2012-08-27 40 views
2

我得到異常「與當前連接關聯的事務已完成但尚未處理。事務必須在連接可用於執行SQL之前進行處理聲明「。當我使用TransactionScope將多次調用中發生的大量數據庫更新包裝到UpdateItem子例程中時。誰能幫明白這是什麼錯誤意味着與重組代碼同時保留保留,如果在foreach內出現任何故障,回滾能力的正確方法(拋出異常)使用單個TransactionScope來包裝大量數據庫更新時出現異常

static void Foo() 
{  
    using (TransactionScope transactionScope = new TransactionScope()) 
    { 
     foreach (var item in items) 
     { 
      UpdateItem(item); 
     } 

     transactionScope.Complete(); 
    } 
} 


static void UpdateItem(string item) 
{ 
    using (MyDataContext db = new MyDataContext) 
    { 
     : 
    : 
    db.Table1.InsertOnSubmit(); 
    : 
    db.SubmitChanges(); 
    : 
    : 
    db.ExecuteCommand(); // I get the exception here 
    : 
    db.Table2.InsertOnSubmit(); 
    : 
    db.SubmitChanges(); 
    : 
    } 
} 
+0

Whill [this](http://stackoverflow.com/a/6028691/706456)工作? – oleksii

+0

做了什麼幫助?在大多數情況下,我的WCF服務出現同樣的錯誤。它工作正常,然後它最近開始拋出這個錯誤 –

回答

0

一個TransactionScope有超時。當它被擊中時,事務被回滾。指定一個更大的超時值。

+0

我已經設置超時(DataContext.CommandTimeout)爲Int32.MaxValue。 –

+0

這不是TScope的超時時間。那個是不同的。只能在TScope的Ctor中設置(最長10分鐘)。 – usr

相關問題