この文では:
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
例外が発生した場合、接続を閉じますか?
この文では:
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
例外が発生した場合、接続を閉じますか?
「通常の」クエリを実行する最も安全な方法は次のとおりです。
using (var conn = new SqlConnection("..."))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "...";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// ...
}
}
}
}
このコードの外部で例外をキャッチできます。
コマンドがうまくいかない可能性のある方法はたくさんあります。
最終的には、以前に何も問題がなかった場合に接続を閉じるのは、データリーダーのCloseメソッドです。
ExecuteReaderまたはその呼び出されたメソッドのいずれかで例外が発生した場合、実際のDataReaderオブジェクトが構築される前に、いいえ、接続は閉じられません。
例外の場合、私はそれが接続を閉じることを信用しません。
例外が発生する場所によって異なります。
トライキャッチを正しく構成すれば問題ありません。
例えば:
SqlCommand myCommand = new SqlCommand();
try
{
myCommand.dostuff();
}
catch(Exception ex)
{
// display error message
}
finally
{
myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
次の行:myCommand.ExecuteReader(CommandBehavior.CloseConnection)が失敗した場合(おそらくデータベースがダウンした場合)、プログラムで接続を閉じることはできません。