⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 async.vb

📁 wrox出版社的另一套经典的VB2005数据库编程学习书籍,收集了书中源码,郑重推荐,电子书,电子书下载
💻 VB
📖 第 1 页 / 共 2 页
字号:
            End With

            If blnMultiServer Then
                cnnOrders = New SqlConnection(Replace(strOrders, ";Async=True", ""))
            Else
                cnnOrders = New SqlConnection(Replace(strCusts, ";Async=True", ""))
            End If
            Dim cmdOrders As SqlCommand = cnnOrders.CreateCommand
            With cmdOrders
                .CommandType = CommandType.Text
                .CommandTimeout = 10
                .CommandText = "SELECT * FROM Orders"
            End With

            If blnMultiServer Then
                cnnDetails = New SqlConnection(Replace(strDetails, ";Async=True", ""))
            Else
                cnnDetails = New SqlConnection(Replace(strCusts, ";Async=True", ""))
            End If
            Dim cmdDetails As SqlCommand = cnnDetails.CreateCommand
            With cmdDetails
                .CommandType = CommandType.Text
                .CommandTimeout = 10    'milliseconds
                .CommandText = "SELECT * FROM [Order Details]"
            End With

            lstOps.Items.Clear()
            timHiRes.Start()

            'Open the Customers connection and execute reader
            cnnCusts.Open()
            lstOps.Items.Add(Format(timHiRes.ElapsedTime, "0.000") + " - 1 Opened Customers connection/reader")
            Dim sdrCusts As SqlDataReader = cmdCusts.ExecuteReader(CommandBehavior.CloseConnection)
            With sdrCusts
                Dim intCtr As Integer
                Dim objValue As Object
                While .Read
                    For intCtr = 0 To .FieldCount - 1
                        objValue = .GetValue(intCtr)
                    Next intCtr
                End While
                .Close()
            End With

            'Open the Orders connection and execute reader
            cnnOrders.Open()
            lstOps.Items.Add(Format(timHiRes.ElapsedTime, "0.000") + " - 2 Opened Orders connection/reader")

            Dim sdrOrders As SqlDataReader = cmdOrders.ExecuteReader(CommandBehavior.CloseConnection)
            With sdrOrders
                Dim intCtr As Integer
                Dim intLoop As Integer
                Dim objValue As Object
                While .Read
                    For intLoop = 1 To intLoops
                        For intCtr = 0 To .FieldCount - 1
                            objValue = .GetValue(intCtr)
                        Next intCtr
                    Next intLoop
                End While
                .Close()
            End With

            'Open the Details connection and execute reader
            cnnDetails.Open()
            lstOps.Items.Add(Format(timHiRes.ElapsedTime, "0.000") + " - 3 Opened Details connection/reader")

            Dim sdrDetails As SqlDataReader = cmdDetails.ExecuteReader(CommandBehavior.CloseConnection)
            With sdrDetails
                Dim intCtr As Integer
                Dim objValue As Object
                While .Read
                    For intCtr = 0 To .FieldCount - 1
                        objValue = .GetValue(intCtr)
                    Next intCtr
                End While
                .Close()
            End With
            lstOps.Items.Add(Format(timHiRes.ElapsedTime, "0.000") + " - 4 End reading Order Details")

        Catch excSync As Exception
            Me.Cursor = Cursors.Default
            MsgBox(excSync.Message + excSync.StackTrace, , "Async Operation Exception")
        Finally
            Me.Cursor = Cursors.Default
            btnExecSync.Enabled = True
        End Try
    End Sub


    '****************************************
    'Optional Sub Main to demonstrate WaitAll
    'Wait all requires a multi-threaded apartment (MTA) class
    'Win32 forms are single-threaded apartment (STA) classes
    'The default for VB.NET classes is STA so you must add the
    '<MTAThreadAttribute> to Shared Sub Main

    'Mark the Startup with custom Sub Main checkbox on the
    'Application page of the project's Properties window 
    'and press Ctrl+S to save the changes to run the WaitAll demo
    '****************************************

    <MTAThreadAttribute()> _
     Shared Sub Main()
        'Set true for multi-server operation
        Dim blnIsMultiServer As Boolean
        Try
            cnnCusts = New SqlConnection(strCusts)
            Dim cmdCusts As SqlCommand = cnnCusts.CreateCommand
            With cmdCusts
                .CommandType = CommandType.Text
                .CommandTimeout = 10
                .CommandText = "SELECT * FROM Customers"
            End With


            If blnIsMultiServer Then
                cnnOrders = New SqlConnection(strOrders)
            Else
                cnnOrders = New SqlConnection(strCusts)
            End If
            Dim cmdOrders As SqlCommand = cnnOrders.CreateCommand
            With cmdOrders
                .CommandType = CommandType.Text
                .CommandTimeout = 10
                .CommandText = "SELECT * FROM Orders"
            End With

            If blnIsMultiServer Then
                cnnDetails = New SqlConnection(strDetails)
            Else
                cnnDetails = New SqlConnection(strCusts)
            End If
            Dim cmdDetails As SqlCommand = cnnDetails.CreateCommand
            With cmdDetails
                .CommandType = CommandType.Text
                .CommandTimeout = 10
                .CommandText = "SELECT * FROM [Order Details]"
            End With

            Dim timHiRes As New clsTimer
            timHiRes.Start()

            Dim awhHandle(2) As WaitHandle

            'Open the Customers connection
            cnnCusts.Open()
            astrListItems(0) = Format(timHiRes.ElapsedTime, "0.000") + " - 1 Opened Customers connection"

            Dim asrCustomersReader As IAsyncResult
            asrCustomersReader = cmdCusts.BeginExecuteReader(CommandBehavior.CloseConnection)
            awhHandle(0) = asrCustomersReader.AsyncWaitHandle
            astrListItems(1) = Format(timHiRes.ElapsedTime, "0.000") + " - 2 BeginExecuteReader: Customers"

            'Open the Orders connection
            cnnOrders.Open()
            astrListItems(2) = Format(timHiRes.ElapsedTime, "0.000") + " - 3 Opened Orders connection"

            Dim asrOrdersReader As IAsyncResult
            asrOrdersReader = cmdOrders.BeginExecuteReader(CommandBehavior.CloseConnection)
            awhHandle(1) = asrOrdersReader.AsyncWaitHandle

            astrListItems(3) = Format(timHiRes.ElapsedTime, "0.000") + " - 4 BeginExecuteReader: Orders"
            'Open the Details connection
            cnnDetails.Open()
            astrListItems(4) = Format(timHiRes.ElapsedTime, "0.000") + " - 5 Opened Details connection"

            Dim asrDetailsReader As IAsyncResult
            asrDetailsReader = cmdDetails.BeginExecuteReader(CommandBehavior.CloseConnection)
            awhHandle(2) = asrDetailsReader.AsyncWaitHandle
            astrListItems(5) = Format(timHiRes.ElapsedTime, "0.000") + " - 6 BeginExecuteReader: Order Details"

            WaitHandle.WaitAll(awhHandle)
            Dim sdrCustomers As SqlDataReader = cmdCusts.EndExecuteReader(asrCustomersReader)
            'Do something with the data
            sdrCustomers.Close()
            sdrCustomers.Dispose()
            Dim sdrOrders As SqlDataReader = cmdOrders.EndExecuteReader(asrOrdersReader)
            'Do something with the data
            sdrOrders.Close()
            sdrOrders.Dispose()
            Dim sdrDetails As SqlDataReader = cmdDetails.EndExecuteReader(asrDetailsReader)
            'Do something with the data
            sdrDetails.Close()
            sdrDetails.Dispose()
            astrListItems(6) = Format(timHiRes.ElapsedTime, "0.000") + " - 7 EndExecuteReader: All readers"
            frmAsync.ShowDialog()
        Catch excAsync As Exception
            MsgBox(excAsync.Message + excAsync.StackTrace, , "Async Operation Exception")
        End Try
    End Sub

    Private Sub frmAsync_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'If Sub Main has run, load the list box
        If Not astrListItems(0) Is Nothing Then
            Dim intCtr As Integer
            For intCtr = 0 To 6
                lstOps.Items.Add(astrListItems(intCtr))
            Next
        End If
    End Sub

    '*************************************************************************
    'Code examples in Chapter 2's "Execute SqlCommands Asynchronously" section
    '*************************************************************************

    Private Sub PollingAsyncCommand()
        'Execute commands asynchronously with polling
        'Example code; not part of project
        Try
            Dim strConn As String = "Data Source=localhost;" + _
             "Initial Catalog=Northwind;Integrated Security=SSPI;Async=True"
            Dim cnnCusts As SqlConnection = New SqlConnection(strConn)
            cnnCusts = New SqlConnection(strCusts)
            Dim cmdCusts As SqlCommand = cnnCusts.CreateCommand
            With cmdCusts
                .CommandType = CommandType.Text
                .CommandTimeout = 60
                .CommandText = "SELECT * FROM Customers"
            End With

            Dim asrCustsReader As IAsyncResult = _
             cmdCusts.BeginExecuteReader(CommandBehavior.CloseConnection)
            While Not asrCustsReader.IsCompleted
                'Do something while waiting
            End While
            Dim sdrCusts As SqlDataReader = cmdCusts.EndExecuteReader(asrCustsReader)
            'Do something with the data
            sdrCusts.Close()
            sdrCusts.Dispose()
        Catch excAsync As Exception
            MsgBox(excAsync.Message + excAsync.StackTrace, , "Async Operation Exception")
        End Try
    End Sub

    Private Sub CallbackAsyncCommand()
        'Execute commands asynchronously with a callback
        'Example code; not part of project
        Try
            Dim strConn As String = "Data Source=localhost;" + _
             "Initial Catalog=Northwind;Integrated Security=SSPI;Async=True"
            Dim cnnCusts As SqlConnection = New SqlConnection(strConn)
            cnnCusts = New SqlConnection(strCusts)
            Dim cmdCusts As SqlCommand = cnnCusts.CreateCommand
            With cmdCusts
                .CommandType = CommandType.Text
                .CommandTimeout = 60
                .CommandText = "SELECT * FROM Customers"
            End With
            cnnCusts.Open()
            'Provide the SqlCommand as the stateObject
            Dim objCmdCusts As Object = CType(cmdCusts, Object)
            Dim asrCustsReader As IAsyncResult = _
             cmdCusts.BeginExecuteReader(New AsyncCallback(AddressOf CustomersHandler), objCmdCusts, CommandBehavior.CloseConnection)
        Catch excAsync As Exception
            MsgBox(excAsync.Message + excAsync.StackTrace, , "Async Operation Exception")
        End Try
    End Sub
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -