В приведенном ниже коде, если при выполнении операторов 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;
}
}