2

私は ASP.NET で多くの開発を行っていますが、SQLConnection ごとに 1 つの SQLDataReader しか開くことができないことを知っています。ただし、これは VB.NET (フォーム アプリケーション) には当てはまらないようです。つまり、1 つの接続オブジェクトに対して複数の SQLDataReader を開いています。これは VB.NET で許可されていますか?

これに対する明らかな答えがない場合は、いくつかのコードを投稿します。

ここにいくつかのコードがあります:

Public Function CheckActiveReviews()
            Dim objCon As SqlConnection
            Dim objCommand As SqlCommand, objCommand2 As SqlCommand
            Dim objDR As SqlDataReader, objDR2 As SqlDataReader
            Try
                objCon = New SqlConnection("Data Source=TestDatabase;Initial Catalog=TestTable;User ID=TestUser;Password=TestPassword;MultipleActiveResultSets=True")
                objCommand = New SqlCommand
                objCommand.Connection = objCon
                objCommand2 = New SqlCommand
                objCommand2.Connection = objCon
                objCon.Open()
                objCommand.CommandText = "SELECT ID FROM Person WHERE PersonID > 1000"
                objDR = objCommand.ExecuteReader()
                Do While objDR.Read
                    objCommand2.CommandText = "SELECT * FROM Sport WHERE PersonID = @PersonID "
                    objCommand2.Parameters.AddWithValue("@PersonID", objDR("ID"))
                    objDR2 = objCommand2.ExecuteReader
                Loop

            Catch ex As Exception

            End Try

        End Function
4

1 に答える 1

2

MARS (複数のアクティブな結果セット)を使用する場合は、複数のデータ リーダーを使用できます、本当に必要でない限り、それはお勧めしません。

代わりに、SqlConnection必要になるたびに新しいオブジェクトを作成することをお勧めします。できるだけ短い期間使用してから、破棄します (Usingステートメントを使用してこれを行います)。接続プールは、可能な場合は「物理」ネットワーク接続を再利用するという点で効率を考慮します。そうすれば、すでに開いているかどうかなどを心配する必要はありませんSqlConnection。毎回同じ「作成、開く、使用、破棄」のパターンに従うだけです。

于 2012-07-04T16:27:32.593 に答える