2010-11-04 9 views
0

Avec ADO.net, si je remplis un adaptateur de données sans effectuer implicitement une BeginTransaction, une "Transaction" se produit-elle de toute façon? Si non, alors quel serait le niveau d'isolement par défaut?Transactions ADO.NET

Répondre

1

Aucune transaction n'est implicite avec le DataAdapter.

1

Pour exécuter une transaction sur votre adaptateur de données, utilisez simplement TransactionScope. Lorsque vous utilisez TransactionScope, vous pouvez également spécifier IsolationLevel (par exemple, Serializable) lors de l'utilisation de TransactionScope. Le niveau d'isolation par défaut sur TransactionScope est Serializable.

0

Vous devrez créer explicitement une transaction. Avec TransactionScope vous pouvez utiliser SqlTransaction.

Par exemple:

  var connString = "Data Source=(local);Integrated security=SSPI; Initial Catalog=Northwind"; 
      var sql = "SELECT * FROM Orders"; 

      using (var conn = new SqlConnection(connString)) 
      { 
       conn.Open(); 
       var da = new SqlDataAdapter(sql, conn); 
       var ds = new DataSet(); 

       // load data from the data source into the DataSet 
       da.Fill(ds, "Orders"); 

       // start the transaction 
       SqlTransaction tran = conn.BeginTransaction(); 

       // associate transaction with the data adapter command objects 
       da.DeleteCommand.Transaction = tran; 
       da.InsertCommand.Transaction = tran; 
       da.UpdateCommand.Transaction = tran; 

       // modify the data in the DataSet 
       // submit changes, commit or rollback, and close the connection 

       try 
       { 
        da.Update(ds, "Orders"); 
        // commit if successful 
        tran.Commit(); 
       } 
       catch (Exception) 
       { 
        tran.Rollback(); 
       } 
      }