在這個句子:.net SqlCommand.ExecuteReader關閉連接嗎?
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
確實異常的情況下,它緊密結合?
在這個句子:.net SqlCommand.ExecuteReader關閉連接嗎?
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
確實異常的情況下,它緊密結合?
命令可能出錯的方式很多。
最終,數據讀取器的Close方法會關閉連接,前提是沒有出錯。
如果在構造實際的DataReader對象之前發生了ExecuteReader或其任何調用方法內部的異常,則no,連接將不會關閉。
如果發生異常,我不會信任它來關閉連接。
這取決於發生異常的地方!
如果你正確地構建你的try catch,它會沒事的。
例如:
SqlCommand myCommand = new SqlCommand();
try
{
myCommand.dostuff();
}
catch(Exception ex)
{
// display error message
}
finally
{
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())
{
// ...
}
}
}
}
例外可以將此代碼之外被抓住。