2010-11-04 3 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(); 
       } 
      }