17 May 2010

Accesso ai dati asincrono – Async data access

Namespace DotNetSide.Articles.AsyncDataAccess
    Imports System
    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Drawing
    Imports System.Text
    Imports System.Windows.Forms
    
    
    Public Class Form1
        Inherits Form
        
        Public Sub New()
            MyBase.New
            InitializeComponent
        End Sub
        
        Private Sub btnStart_Click(ByVal sender As Object, ByVal e As EventArgs)
            Dim myConnection As SqlConnection = New SqlConnection
            myConnection.ConnectionString = "Data Source=.\\SQLEXPRESS;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ProgrammareADONet;async=true"
            myConnection.Open
            Dim cmd As SqlCommand = myConnection.CreateCommand
            cmd.CommandText = "WaitFor Delay '00:00:15' Select @@Version"
            cmd.BeginExecuteReader(New AsyncCallback(ProcessResult), cmd)
        End Sub
        
        Public Sub ProcessResult(ByVal asyncRes As IAsyncResult)
            Dim cmd As SqlCommand = CType(asyncRes.AsyncState,SqlCommand)
            cmd.Connection
            cmd
            Dim DBVersion As String = string.Empty
            Dim myReader As SqlDataReader = cmd.EndExecuteReader(asyncRes)
            If myReader.Read Then
                DBVersion = myReader(0).ToString
                lbltextVersion.BeginInvoke(New LabelHnd(Update), DBVersion)
            End If
        End Sub
        
        Public Sub Update(ByVal text As String)
            lbltextVersion.Text = text
        End Sub
        
        Public Delegate Sub LabelHnd(ByVal value As String)
    End Class
End Namespace