2016-03-26 6 views
1

Derzeit während jeder Datenbank bezogenen Code zu tun i die folgende Struktur verwenden:Wie Transaktion verwenden, innen mit {} Block

try 
{ 
    using(FBConnection con = new FBConnection('connectionstringhere')) 
    { 
    con.Open(); 
    using(FBCommand cmd = FBCommand("qryString",con)) 
    { 
     cmd.Parameters.Add("paramSql", FbDbType.Date).Value ="somevalue"; 
     cmd.CommandType = CommandType.Text; 
     using(FBDatareader rdr = cmd.ExecuteReader()) 
     { 
     while(rdr.Read()) 
     { 
      //some code here 
     } 
     } 
    } 
    } 
} 
catch(FBException ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

Jetzt möchte ich Transaktion in der obigen structure.How zu übernehmen muss ich tun es richtig Weg mit Blockieren. Bitte erläutern Sie mit dem richtigen Code-Snippet.

Antwort

1

Sie haben nicht eine Transaktion benötigen, wenn Sie gerade lesen Aufzeichnungen (ExecuteReader) aber dies könnte ein Ansatz sein, die als

geschrieben werden konnte TransactionScope class

try 
{ 
    using(TransactionScope scope = new TransactionScope()) 
    using(FBConnection con = new FBConnection('connectionstringhere')) 
    { 
    con.Open(); 
    ... 
    scope.Complete(); 
    } 
} 
catch(FBException ex) 
{ 
    // No rollback needed in case of exceptions. 
    // Exiting from the using statement without Scope.Complete 
    // will cause the rollback 
    MessageBox.Show(ex.Message); 
} 

Der Standardansatz

FBTransaction transaction = null; 
FBConnection con = null; 
try 
{ 
    con = new FBConnection('connectionstringhere'); 
    con.Open(); 
    transaction = con.BeginTransaction(); 
    ... 
    transaction.Commit(); 
} 
catch(FBException ex) 
{ 
    MessageBox.Show(ex.Message); 
    if(transaction!=null) transaction.Rollback(); 
} 
finally 
{ 
    if(transaction != null) transaction.Dispose(); 
    if(con != null) con.Dispose(); 
} 

Nicht sicher über das Verhalten oder das FBConnection-Objekt im Falle von Ausnahmen, also besser gehen Sie auf eine traditionelle finally-Block, in dem Sie die Transaktion und die Verbindung in der richtigen Reihenfolge

entsorgen
+0

Eigentlich bin ich mein Beispiel, ich mache einige Inserts in eine andere Tabelle innerhalb der While oder If block.Hence muss ich Transaktion für commit oder rollback.Hence ich frage nach einem richtigen Beispiel für die Verwendung der Transaktion im Inneren mit Block – msm

+0

Dank @Steve für Deine Antwort :) – msm

Verwandte Themen