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がデフォルトの動作を使用する場合、スカラー値が取得されたら、基礎となる接続が確実に閉じられるようにしますか?
ありがとうございますLoren!ステートメントを使用するのがおそらく最も速くて簡単な方法です。 – MZZ
嬉しいですが、usingステートメントはC#の絶対的な宝石です。それよりも頻繁に使用する必要があります – LorenVS