2010-09-14 27 views
0

我在VB.NET中創建了一個窗體窗體,並在「保存」的單擊事件中,我打電話給5個程序執行不同的任務。所有這些都在一個單一的TRY - CATCH塊中。我面臨的問題是,從調用的5個過程中,如果在執行第4個過程時發生錯誤,從過程3前存儲的數據將存在於表中。在VB.NET中開始Tran

任何人都可以幫助我如何在VB.NET中使用begin tran,rollback tran和commit tran。

問候,
喬治

+0

同一數據庫中的所有5個過程是否都是? – InSane 2010-09-14 04:36:26

回答

1

您可以設置ADO.Net使用事務:如果所有5個程序在同一個數據庫中有不涉及鏈接數據庫

Dim conn As SqlConnection = New SqlConnection("connString") 
    Dim transaction As SqlTransaction = conn.BeginTransaction 

    conn.Open() 
    Try 
     'do all your work.... 

      transaction.Commit() 

    Catch ex As Exception 
     transaction.Rollback() 

    Finally 
     'clean up.... 
    End Try 
+0

+1我們也可以使用TransactionScope :) – 2010-09-14 04:44:10

+0

尊敬的Klabranche,感謝您的幫助。我也聽說有一種叫做「使用範圍」的東西。這也可以使用,如果是,可以在try-catch塊中。 – 2010-09-14 04:55:31

+0

是的,你可以在try-catch塊中使用它。 – klabranche 2010-09-14 05:13:04

1

: -

  1. 您可以創建一個過程,以正確的順序調用所有5個過程。 在此過程中,你可以做一個BEGIN TRAN,並在一開始就執行COMMIT/ROLLBACK TRAN,如果你想用做和ADO.net分別就結束

  2. 只要所有的程序都被稱爲在同一個連接,你可以將交易與您的命令obect關聯,並把它作爲每例子given here

但是在你跨多個數據庫交談的情況下,

  1. ,你將需要使用分佈式事務和TransactionScope。請參閱this link瞭解更多詳細信息和示例如何使其工作
0

我會使用TransactionScope對象和隱式事務。這樣即使你跨越數據庫,他們也可以透明地一起工作。那麼,你需要的DTC運行的,如果你做到這一點......但無論如何,像這樣

Imports System.Transactions 

Using scope as new TransactionScope() 

    ' do all your work, here, then ... 

    ' Commit everything 
    scope.Complete() 
End Using 

這裏的好處是,要知道,它的實際工作沒有代碼有運行的交易,如果在那裏有異常,它會自動回滾,這要歸功於Using塊。

+0

親愛的克里斯,謝謝你的信息。我可以在try-catch塊內使用這個範圍嗎?問候,喬治 – 2010-09-14 04:54:17

+0

是的,你可以。或者你可以使用try/catch/finally代替使用塊,但是我覺得使用更容易,更明顯。 – 2010-09-14 05:15:55