0

DBDataReaders同時に複数の読み取りデータがある場合、次のエラーが発生します。

There is already an open DataReader associated with this Connection which must be
closed first

設定でConnectionPoolingを有効にしているので、このエラーが発生する理由がわかりません。私の現在の接続はすでに使用されているので、新しい接続を作成することを想定していませんか?

trueに設定MultipleActiveResultSetsすると問題が解決することはわかっていますが、問題が存在する理由を理解しようとしています。

4

1 に答える 1

1

接続プールは、あなたが思っていることをしません。

あなたがこのようなことをするなら

var connection = new SqlConnection(connectionString);
connection.Open();
var command = connection.CreateCommand();
command.CommandText = // some query
var reader = command.ExecuteReader();
var anotherCommand = connection.CreateCommand();
anotherCommand.CommandText = // another query
var anotherReader = anotherCommand.ExecuteReader();

そうすれば、接続プールがあるかどうかに関係なく、これらすべてが1つの接続で発生します。

new SqlConnection接続プーリングは、新しい接続を作成して開く()たびに取得できる接続のキャッシュを保持するだけですSqlConnectinon.Open。接続を閉じると、プールに戻って再利用されます。ただし、開いている1つSqlConnectionのオブジェクトは、プールからの1つの接続に対応します。限目。

于 2011-09-25T03:11:41.220 に答える