Pregunta

¿Cómo puedo comprobar si una transacción dotnet está cerrado o no?

¿Fue útil?

Solución

using(TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew)){

    try{
        //Do something;

        scope.Complete();  //denotes the transaction completed successful.
    }
    catch(TransactionAbortedException ex)
    {

        //scope.Complete(); is never called, the transaction rolls back automatically.
    }
    catch(ApplicationException ex)
    {

    }
}

Otros consejos

Su título le pide una cosa y hace otra pregunta. Por lo tanto, voy con el título.

Si desea saber si la transacción se revierte o conjunto de revertir única, se puede comprobar

transaction.WasRolledBack // true if transaction is rolled back

Aquí, transaction es una instancia de ITransaction

Editar (basado en su comentario)

var isRolledBack = false;
using (var connection = new SqlConnection())
{
  using (var transaction = connection.BeginTransaction())
  {
    try
    {
      // do your stuff here with transaction
    }
    catch (Exception ex)
    {
      transaction.Rollback();
      isRolledBack = true;
      throw;
    }
  }
}

Ahora, se puede comprobar la bandera isRolledBack para ver si la transacción se revierte

Si se encuentra en el servidor SQL, puede utilizar DBCC OPENTRAN

http://msdn.microsoft.com/en-us/library/ ms182792.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top