2010-12-16 69 views

回答

1
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew)){ 

    try{ 
     //Do something; 

     scope.Complete(); //denotes the transaction completed successful. 
    } 
    catch(TransactionAbortedException ex) 
    { 

     //scope.Complete(); is never called, the transaction rolls back automatically. 
    } 
    catch(ApplicationException ex) 
    { 

    } 
} 
3

你的標題問一件事,你的問題問另一個。所以,我要和你的頭銜一起去。

如果你想知道,如果事務回滾或設置爲僅回滾,可以檢查

transaction.WasRolledBack // true if transaction is rolled back 

這裏,transaction是ITransaction

編輯的一個實例(根據您的評論)

var isRolledBack = false; 
using (var connection = new SqlConnection()) 
{ 
    using (var transaction = connection.BeginTransaction()) 
    { 
    try 
    { 
     // do your stuff here with transaction 
    } 
    catch (Exception ex) 
    { 
     transaction.Rollback(); 
     isRolledBack = true; 
     throw; 
    } 
    } 
} 

現在,你可以檢查isRolledBack標誌,看是否TRANSAC重刑回滾

+0

我很抱歉......因爲這個錯誤 - 我的意思是在標題和主題中的差異。我在C#中使用SqlTransaction。我不確定...關於ITransaction – Relativity 2010-12-16 00:38:01

+0

@Anish:更新了sql事務的答案 – 2010-12-16 01:07:55

+0

Transaction.Rollback()也可以引發異常。你也應該抓住這些。 – Dan 2016-05-31 12:59:36