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

📄 ch9_demoform001.vb

📁 文件与IO存取,数据绑定,数据库更新,章立民的程序
💻 VB
字号:
Option Strict On
Imports System.Data.SqlClient

Public Class CH9_DemoForm001

    Private Sub btnPollingAsynch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPollingAsynch.Click
        ' 利用 SqlConnectionStringBuilder 对象来构建连接字符串。
        Dim connectStringBuilder As New SqlConnectionStringBuilder()
        connectStringBuilder.DataSource = "(local)\SQLExpress"
        connectStringBuilder.InitialCatalog = "北风贸易"
        connectStringBuilder.IntegratedSecurity = True

        ' 启用异步处理。
        connectStringBuilder.AsynchronousProcessing = True


        ' 使用一个 StopWatch 对象来计算执行时间以便检视效率。
        Dim myWatch As Stopwatch = New Stopwatch()


        ' 开始计时。
        myWatch.Start()

        Using myConnection As SqlConnection = New SqlConnection(connectStringBuilder.ConnectionString)
            Try
                ' 建立所要异步执行的三道 Transact-SQL 语句,其中第一道
                ' 的 WAITFOR 语句会刻意暂停三秒钟来仿真长时间的数据库存取
                ' 作业,以方便我们执行轮询作业。
                Dim myQuery As String = _
                  "WAITFOR DELAY '00:00:03';" & _
                  "SELECT * FROM 章立民研究室;" & _
                  "SELECT * FROM 飞狐工作室"

                Dim myCount As Integer = 0
                Dim myCommand As SqlCommand = New SqlCommand(myQuery, myConnection)
                myConnection.Open()

                ' 执行数据命令的 BeginExecuteReader 方法,此方法会传回一个 IAsyncResult,
                ' 藉由轮询 IAsyncResult 的 IsCompleted 属性可以知道异步操作是否执行完毕。
                Dim myResult As IAsyncResult = myCommand.BeginExecuteReader()

                While Not myResult.IsCompleted

                    myCount = myCount + 1

                    ' 在异步查询结果传回之前,我们会持续更新状态列。
                    queryStatusStatusBar.Step = 1
                    queryStatusStatusBar.Value = myCount
                    If myCount = 100 Then
                        myCount = 0
                    End If

                    elapsedTime.Text = myWatch.ElapsedMilliseconds.ToString() + " ms"
                    elapsedTime.Refresh()
                End While


                ' 完成 Transact-SQL 语句的异步执行作业之后,
                ' 务必呼叫数据命令的 EndExecuteReader 方法来结束异步执行,
                ' 并传回最终的 SqlDataReader。
                Using myReader As SqlDataReader = myCommand.EndExecuteReader(myResult)

                    ' 停止计时。
                    myWatch.Stop()

                    ' 在此可以提取异步查询的结果并显示在窗体上。

                    Dim ds As New DataSet
                    ' 将数据读取器的两个结果集分别加载成数据集对象 ds 当中的
                    ' 「章立民研究室」与「飞狐工作室」数据表。
                    ds.Load(myReader, LoadOption.OverwriteChanges, New String() {"章立民研究室", "飞狐工作室"})

                    ' 将「章立民研究室」数据表的数据记录显示在 DataGridView 控件中。
                    Me.LimingchDataGridView.DataSource = ds.Tables(0)
                    ' 将「飞狐工作室」数据表的数据记录显示在 DataGridView 控件中。
                    Me.FoxDataGridView.DataSource = ds.Tables(1)

                End Using

                ' 在窗体上显示各项信息。
                elapsedTime.Text = myWatch.ElapsedMilliseconds.ToString() + " ms"
                messageReturned.Text = "使用轮询返回异步查询结果。"
                queryStatusStatusBar.Value = 100

            Catch ex As SqlException
                MessageBox.Show(ex.Message.ToString(), "请注意")
            Catch ex As InvalidOperationException
                MessageBox.Show(ex.Message.ToString(), "请注意")
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString(), "请注意")
            End Try

        End Using
    End Sub

    Private Sub CH9_DemoForm001_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

⌨️ 快捷键说明

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