如果發生異常,以下代碼是否使連接保持打開狀態?在發生異常時關閉數據庫連接的正確方法
我正在使用Microsoft SQL精簡版數據庫。
try
{
SqlCeConnection conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
conn.Close();
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
當然,更好的方法是在try之前聲明一個連接對象,在try塊中建立一個連接並關閉它在finally塊中?
SqlCeConnection conn = null;
try
{
conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
finally
{
if(conn != null) conn.Close();
}
我還是不能包住我的頭。從ref:「如果SqlCeConnection超出範圍,它不會關閉,您必須通過調用Close或Dispose來顯式關閉連接。」 在你的第一個例子中,你沒有「明確關閉連接」。 – 2014-10-23 09:59:55
當使用'using'語句時,它會調用正在使用的對象的Dispose方法,如果使用'SqlCeConnection',則會調用'Close'方法。在'SqlCeConnection'上調用'Dispose'時,使用ILSpy等工具來查看執行哪些代碼。請參閱文檔[此處](http://msdn.microsoft.com/en-us/library/bb300654%28v=vs.100%29.aspx)。 – shahkalpesh 2014-10-23 17:27:08