我想知道以下代码模式:
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())
..)