2012-03-28 157 views
1

首先,是否有可能在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

回答

4

您可以嵌套事務使用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