如果在执行SQL语句时发生任何异常,由于事务未提交,我们应该期望事务会被隐式回滚,因为它已经超出作用域并被处理:
using (DbTransaction tran = conn.BeginTransaction())
{
//
// Execute SQL statements here...
//
tran.Commit();
}
以上做法是否可行?还是应该捕获异常并显式调用tran.Rollback(),如下所示:
using (DbTransaction tran = conn.BeginTransaction())
{
try
{
//
// Execute SQL statements here...
//
tran.Commit();
}
catch
{
tran.Rollback();
throw;
}
}