次のコードパターンが気になります:
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()
メソッドが必要な理由は、コードを短縮し、接続の作成と開始を 1 行にラップすることです ( using (var con = getcon())
..)