ASP.Netのお勉強

SQL文を非同期で発行@ASP.Net

SQL文を非同期で発行します。
以下では、非同期でSQL文を発行して、
別な接続を確立し、SQL文を発行します。
結果を取得したら、非同期で発行したSQL文の結果を受け取ります。

接続文字列を設定します。
Asynchronous Processingをtrueにします。

接続を行います。
SqlCommandを生成し、BeginExecuteReaderを実行して、IAsyncResultを受け取ります。

別な接続を確立させます。
SQL文を発行して、結果を取得しラベルに表示します。

次に、非同期で実行した結果を取得します。
EndExecuteReaderにIAsyncResultを渡し結果を取得します。
ラベルに表示します。

●aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>SQL文非同期実行</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Button ID="Button1" runat="server" Text="Button" /><br />
        結果1:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
        結果2:<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
    </form>
</body>
</html>


●aspx.vb

Imports System.Data.SqlClient

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

        '接続文字列
        Dim conStr As String

        Try
            conStr = "Data Source=localhost\SQLEXPRESS;Initial Catalog=DBNAME;User ID=sa;Password=pass;Asynchronous Processing=true"

            Using con As SqlConnection = New SqlConnection(conStr)
                con.Open()

                'SQLコマンド
                Dim sqlStr As String = "select * from Table where ID = '1'"
                Dim cmd As SqlCommand = New SqlCommand(sqlStr, con)

                '非同期で発行
                Dim ar As IAsyncResult = cmd.BeginExecuteReader()

                '別なコネクション生成
                Using con2 As SqlConnection = New SqlConnection(conStr)
                    con2.Open()

                    Dim sqlStr2 As String = "select * from Table WHERE ID = '7'"
                    Dim cmd2 As SqlCommand = New SqlCommand(sqlStr2, con2)

                    '同期で発行
                    Dim dr2 As SqlDataReader = cmd2.ExecuteReader()

                    While dr2.Read()
                        Me.Label2.Text = dr2("ID").ToString() + ":" + dr2("NAME")
                    End While
                End Using

                '非同期の結果待ち
                Dim dr As SqlDataReader = cmd.EndExecuteReader(ar)

                '結果表示
                While dr.Read()
                    Me.Label1.Text = dr("ID").ToString() + ":" + dr("NAME")
                End While

            End Using

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub
End Class

Copyright (C) ASP.Netのお勉強. All Rights Reserved.