2011-02-28 5 views
0

Stack traceはExecuteReaderがExecuteScalarの基礎となるメソッドであることを示しています。関連するコマンドビハインドのために掘り下げている間、私は以下のポストを見つけました - コマンドbehaviour.defaultがリーダーによって使用されていることを示しました。ExecuteScalar()を使用すると、ExecuteReader()が "デフォルト" CommandBehaviourで呼び出されますか?

私は接続が常に閉じられ、明示的に(datareader.closeを使用して配置することができることを承知している

Does ExecuteScalar() have any advantages over ExecuteReader()?

)、datareader.dispose() - 提供は、のExecuteReader(commandbehaviour.Closeconnection)が使用されています。一方、ExecuteReader(CommandBehaviour.Default)は、datareaderオブジェクトが閉じられたり廃棄されたりしても、基底の接続を開いたままにします。ですから、私の質問は、startscalarがデフォルトの動作を使用する場合、スカラー値が取得されたら、基礎となる接続が確実に閉じられるようにしますか?

答えて

1

C#usingステートメントは、言語に含まれる最も優れたものの1つです。あなたの問題を直接解決するわけではありませんが、SQLConnections(およびIDisposableを実装するその他のタイプ)をラップするために標準的な習慣を使用すると、このようなことを心配する必要はありません。

using(SQLConnection connection = new SQLConnection(...)) 
{ 
} 
+0

ありがとうございますLoren!ステートメントを使用するのがおそらく最も速くて簡単な方法です。 – MZZ

+0

嬉しいですが、usingステートメントはC#の絶対的な宝石です。それよりも頻繁に使用する必要があります – LorenVS