MultipleActiveResultSets = Trueまたは複数の接続?


86

接続(ExecuteReader)でリーダーを作成し、そのリーダーのすべての行に対して(を使用してExecuteNonQuery)別のコマンドを実行するC#がいくつかあります。この場合MultipleActiveResultSets=True、接続で使用するか、複数の接続を使用する方が良いですか?

回答:


99

複数のアクティブな結果セット(MARS)がこのタイプの操作専用に追加されたため、SqlDataReaderから読み取り、追加のバッチを実行するために2つの接続を同時に開く必要はありません。

MARSはSQLServer2005以降と互換性があります。MSDNドキュメントから引用するには:

複数のアクティブな結果セット(MARS)が導入される前は、開発者は特定のシナリオを解決するために、複数の接続またはサーバー側カーソルのいずれかを使用する必要がありました。

詳細については、以下を参照してください。

MSDNライブラリ-MARSの概要

データの読み取りと更新の実例:

MSDNライブラリ-データの操作(MARS)は、「MARSを使用したデータの読み取りと更新」までスクロールダウンします。


21

これは、MARSが追加された理由を私が知る限りですので、そうです、あなたはそれを使うべきだと思います。


0

これをテストする最良の方法は、SQLServer Profilerを起動し、サーバー側で実際に何が起こっているかを確認することです。

私の推測では、ExecuteNonQuery()を使用しているので、それは良くないでしょう。したがって、実際には、複数の結果を処理することはありません。


6
これは私がコードを書いたときに思ったものですが、MultipleActiveResultSets = Trueがない場合でも、「このコマンドに関連付けられた開いているDataReaderが既にあり、最初に閉じる必要があります」というメッセージが表示されます。ExecuteNonQueryの例外。
Sprintstar 2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.