2016-03-23 8 views
5

Ich habe dies:Wie eine Transaktion zum Zurücksetzen von adrett

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

Wird diese Arbeit ist meine Frage .. Ich weiß, eine andere Methode, eine Transaktion es Rollback dann zu machen, ist dann öffnen.

Antwort

7

Sie könnten eine TransactionScope Variable in einem mit Block auf dem gleichen Niveau des mit Block des SqlConnection verwenden

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 erweitert die DbConnection, so dass es kein Problem bei der Verwendung des Standardtransaktionsobjekts gibt, aber es ist mühsamer. (Natürlich müssen Sie die Transaktion am Anfang des Codes deklarieren und sie für das Rollback oder das Commit verwenden – Steve

+1

@NoviceDeveloper Beachten Sie, dass alle Dapper-Operationen eine ado.net-Transaktion als optionalen Parameter akzeptieren, wenn Sie ado verwenden. Net-Transaktionen, achten Sie darauf, es in Ihre Anrufe enthalten –

+0

@Steve Würde die Standard-Ado.net-Transaktion leichter als die Ambient-Transaktion und wenn mehrere Verbindungen in der Ambient-Transaktion geöffnet sind, wird es auf die verteilte Transaktion heraufgestuft werden –

0

In meinem Verständnis, wenn Sie mit einer einzigen Verbindung zu arbeiten, planen und müssen Transaktion, um sicherzustellen, die DML-Vervollständigung oder Rollback, gehen Sie dann für verbindungsspezifische Transaktion, die leichter als die System.Transaction Ambient-Transaktionen, die allgemeiner und helfen bei der Koordinierung mit MSDTC bei Bedarf sind, da mehrere Verbindungen verschiedener Typen geöffnet werden können.

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