SqlTransaction を使用する次のコードがあります。Dispose を catch で呼び出して、finally ブロックしました。しかし、Dispose() を呼び出す前に、既に破棄されているかどうかを確認していません。Dispose() を呼び出す前に、SqlTransaction が既に破棄されているかどうかを確認するにはどうすればよいでしょうか?
MSDN:SqlTransaction.Dispose Methodを参照しました。しかし、それは私の質問をカバーしていません。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.dispose(v=vs.100).aspxも参照
注: が よりTransactionScope
も優れていることは既にわかっていSqlTransaction
ます。しかし、私は SqlTransaction の破棄を理解しようとしています。
コード
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlTransaction transaction = null;
try
{
transaction = connection.BeginTransaction();
sessionID = GetSessionIDForAssociate(connection, empID, transaction);
//Other code
//Commit
transaction.Commit();
}
catch
{
//Rollback
if (transaction != null)
{
transaction.Rollback();
transaction.Dispose();
}
//Throw exception
throw;
}
finally
{
if (transaction != null)
{
transaction.Dispose();
}
}