0

プロシージャで2つのデータリーダーを使用できない理由を説明できますか?

サンプルコードは次のとおりです。

Private Sub  Do_Execute()

  Dim conx as SqlConnection
  Dim cmd1 as SqlCommand
  Dim cmd2 as SqlCommand

  Dim drd1 as SqlDataReader
  Dim drd2 as SqlDataReader

  conx = new SqlConnection("connection string")
  conx.Open()

     cmd1 = new SqlCommand("SELECT * FROM Category" , conx)
     drd1 = cmd1.ExecuteReader()

     While (drd1.Read())
     {
        Reading Data From drd1
     }

     cmd2 = new SqlCommand("SELECT * FROM Stock" , conx)
     drd2 = cmd2.ExecuteReader()

     While (drd2.Read())
     {
        Reading Data From drd2
     }

End Sub

そのプログラムを実行すると、例外メッセージがスローされます。

drd2 が初期化される前に drd1 を閉じたとき。できます。

上記のコードのように使用できないのはなぜですか? 説明してください。前もって感謝します!

4

3 に答える 3

4

これは、実際に同じ接続を共有しているためです。


1) SqlCommand ごとに異なる接続を使用します。これは、これを行う必要があった元の方法でした。

また

2)ここで説明されているように、MARS (Multiple Active Result Sets) を使用します。

于 2009-11-23T09:18:33.060 に答える
1

私はこれを試したことはありませんが、可能なはずです。

複数のアクティブな結果セットの使用と、MSDNの
複数のアクティブな結果セットの有効化を参照してください。

これは SQL2005 以降のものであることに注意してください。

記事の1つからの抜粋:

以前のバージョンの SQL Server で SqlDataReader オブジェクトを使用して複数の結果セットにアクセスするには、各 SqlCommand オブジェクトで個別の SqlConnection オブジェクトを使用する必要があります。

于 2009-11-23T09:16:55.840 に答える
1

この記事では、問題が何であるかを説明し、SQL Server を使用している場合の解決策を紹介します。このソリューションは MARS (Multiple Active Record Sets) と呼ばれ、SQL Server 2005 以降のバージョンで利用できます。

于 2009-11-23T09:17:03.180 に答える