web-dev-qa-db-ja.com

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

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

73
Sprintstar

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

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

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

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

MSDNライブラリ-MARSの概要

データの読み取りと更新を行った例:

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

87
Kev

これは、MARSが追加された理由を知る限りですので、使用する必要があると思います。

17
Rune Grimstad

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

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

0
dmajkic