ADO.NET中的嵌套事务
问题描述:
首先,是否有可能在ADO.Net上具有n个事务级别。其次,这是正确的用法吗?ADO.NET中的嵌套事务
var tx = cx.BeginTransaction();
cx.Execute("insert into atable(id) values(123123)");
var tx2=tx.BeginTransaction();
cx.Execute("insert into atable(id) values(123127)");
tx2.Commit();
tx.Commit();
... 等
答
您可以嵌套事务使用TransactionScope
- 但是,它们将只有一次的最外一个被提交获得承诺。
如果它们中的任何一个会回滚,它们将全部回滚。
根据使用情况 - 您应该将交易创建包装在using
报表中以确保正确处置。
using(var tx1 = new TransactionScope())
{
cx.Execute("insert into atable(id) values(123123)");
using(var tx2 = new TransactionScope())
{
cx.Execute("insert into atable(id) values(123127)");
tx2.Complete();
}
tx1.Complete()
}
你能澄清你为什么要这样做吗? – daryal 2012-03-28 14:16:16
为什么你在第一个地方使用不同的交易?你一次只执行一个动作,并且已经是事务性的,无论是插入提交还是不提交。你试图完成什么?看起来好像你在整个过程中只需要一次交易。 – PedroC88 2012-03-28 14:43:09
@ PedroC88:这只是一个例子。用简单的东西来说明更容易。 – sgtz 2012-03-28 14:46:00