2016-03-23 13 views
5

ho questo:Come rollback di una transazione utilizzando azzimato

  using (var con= new SqlConnection(ConfigurationManager.ConnectionStrings["sqlcon"].ConnectionString)) 
      { 
       try 
       { 
        // many transactions 
       } 
       catch (Exception e) 
       { 
        con.BeginTransaction().Rollback(); 
       } 
      } 

Sarà questo lavoro è la mia domanda .. Io conosco un altro metodo è quello di effettuare una transazione quindi aprirlo poi rollback.

risposta

7

è possibile utilizzare una variabile TransactionScope in un blocco utilizzando allo stesso livello del utilizzando blocco del SqlConnection

using (TransactionScope scope = new TransactionScope()) 
using (var con= new SqlConnection(ConfigurationManager.ConnectionStrings["sqlcon"].ConnectionString)) 
{ 
    try 
    { 
     // many transactions 
     scope.Complete(); 
    } 
    catch (Exception e) 
    { 
     // Not needed any rollback, if you don't call Complete 
     // a rollback is automatic exiting from the using block 
     // con.BeginTransaction().Rollback(); 
    } 
} 
+0

Dapper estende DbConnection in modo che non vi siano problemi nell'utilizzo dell'oggetto Transaction standard, ma è più ingombrante. (Ovviamente è necessario dichiarare la transazione all'inizio del codice e utilizzarla per il rollback o il commit – Steve

+1

@NoviceDeveloper notare che tutte le operazioni dapper accettano una transazione ado.net come parametro opzionale, se si utilizza ado. transazioni nette, assicurati di includerlo nelle tue chiamate –

+0

@Steve La transazione standard ado.net non sarebbe più leggera della transazione ambientale e se più connessioni sono aperte nella transazione ambientale, verrà promossa alla transazione distribuita –

0

Nella mia comprensione, se avete intenzione di lavorare con una singola connessione e la necessità di transazione per garantire il completamento o il rollback di DML, quindi effettuare la transazione specifica della connessione che sarebbe più leggera delle transazioni Ambient System.Transaction, che sono più generiche e aiutano a coordinare con MSDTC, se necessario, poiché possono essere aperte più connessioni di vari tipi.

using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlcon"].ConnectionString)) 
{ 
using(var txn = con.BeginTransaction()) 
    { 
    try 
    { 
     txn.Commit(); 
    } 
    catch (Exception e) 
    { 
     txn.Rollback(); 
    } 
    } 
} 
Problemi correlati