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

... 等

+0

你能澄清你为什么要这样做吗? – daryal 2012-03-28 14:16:16

+0

为什么你在第一个地方使用不同的交易?你一次只执行一个动作,并且已经是事务性的,无论是插入提交还是不提交。你试图完成什么?看起来好像你在整个过程中只需要一次交易。 – PedroC88 2012-03-28 14:43:09

+0

@ PedroC88:这只是一个例子。用简单的东西来说明更容易。 – sgtz 2012-03-28 14:46:00

您可以嵌套事务使用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() 
} 
+0

然后看起来像供应商问题。谢谢。 – sgtz 2012-03-28 14:20:54

+0

你是否缺少TransactionScope的构造函数参数? – sgtz 2012-03-28 14:32:13

+0

@sgtz - 它有一个空的无参数构造函数。但是,如果您愿意,您可以指定几个不同的参数。 – Oded 2012-03-28 14:33:31