我不知道下面的代碼模式:處置的SqlConnection時拋出異常
static SqlConnection getcon()
{
SqlConnection con = new SqlConnection("data source=foobar..");
con.Open();
// is con Disposed automatically or will it leak and live
// forever when exception is thrown?
throw new Exception("exception");
return con;
}
static void Main(string[] args)
{
try
{
using (var scope = new TransactionScope())
using (var con = getcon())
using (var cmd = new SqlCommand("UPDATE SomeTable SET Column1 = 'test'", con))
{
cmd.ExecuteNonQuery();
scope.Complete();
}
}
catch
{
}
}
這是使用SqlConnection
一個安全的方式(獲取從getcon()
方法的連接)?當拋出異常或者它會永遠存在時,函數是否會退出?
目的,爲什麼我要把這個GetCon()
方法是縮短代碼和包裹連接創建開放在一條線(using (var con = getcon())
..)
我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
好的!但是,即使在「使用」-line中出現異常時,連接也不會丟失,而不在花括號內? – Jaska
爲了解決所有這些問題(並且可能導致副作用和錯誤),只需簡單地避免鍵入**代碼('conn.Open()')的一行**看起來像是一個非常錯誤且過早的優化 - 不要這樣做。這是不值得的。 –