Лучше явно вызывать откат транзакции или позволить исключению вызвать неявный откат?

В приведенном ниже коде, если при выполнении операторов 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;
    }
}
20
задан Elan 21 June 2011 в 00:12
поделиться