2010-11-04 66 views
0

使用ADO.net,如果我填充数据适配器而不隐式地执行BeginTransaction,是否会发生“事务”?如果不是,那么默认的隔离级别是什么?ADO.NET事务

回答

1

DataAdapter没有隐含事务。

1

要在您的数据适配器上运行事务,只需使用TransactionScope。

using (var ts = new TransactionScope()) 
{ 
    // do your data adapter related code 
    // ... 


    ts.Complete(); 
} 

当使用TransactionScope时,您也可以指定IsolationLevel(例如Serializable)。 TransactionScope上的默认隔离级别是Serializable。

0

您将需要显式创建一个事务。与TransactionScope一起,您可以使用SqlTransaction

例如:

  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(); 
       } 
      }