使用ADO.net,如果我在不隐式执行BeginTransaction的情况下填充数据适配器,是否会发生“事务”?如果不是,那么默认的隔离级别是多少?
发布于 2011-05-21 12:55:05
对于DataAdapter,没有事务是隐式的。
发布于 2015-08-27 13:24:03
要在数据适配器上运行事务,只需使用TransactionScope。
using (var ts = new TransactionScope())
{
// do your data adapter related code
// ...
ts.Complete();
}当使用TransactionScope时,你也可以指定IsolationLevel (比如Serializable)。TransactionScope上的默认隔离级别是可序列化的。
发布于 2016-06-21 23:20:03
您将需要显式创建一个事务。除了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();
}
}https://stackoverflow.com/questions/4101341
复制相似问题