在VB.NET中开始Tran

时间:2010-09-14 04:34:25

标签: vb.net

我在VB.NET中创建了一个Windows窗体,在“保存”的点击事件中,我调用了5个程序来执行不同的任务。所有这些都在一个TRY - CATCH块中。我面临的问题是,从调用的5个程序开始,如果在执行第4个程序时出现错误,则在程序之前存储的数据将存在于表中。

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

的问候,
乔治

3 个答案:

答案 0 :(得分:1)

您可以设置ADO.Net以使用交易:

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

答案 1 :(得分:1)

如果所有5个程序都在同一个数据库中,并且没有涉及链接数据库: -

  1. 您可以创建一个以正确顺序调用所有5个过程的过程。 在此过程中,您可以分别在开头和结尾执行BEGIN TRAN和COMMIT / ROLLBACK TRAN

  2. 如果您想使用ADO.net进行此操作,并且只要在同一个Connection上调用所有过程,您就可以将事务与命令对象关联起来并按照示例{{3}使用它}

  3. 但是,如果您正在跨多个数据库进行交谈,

    1. 您需要使用分布式事务和TransactionScope。有关详细信息,请参阅given here,并了解如何使其工作

答案 2 :(得分:0)

我使用TransactionScope对象和隐式事务。这样,即使你跨数据库,他们也会透明地一起工作。好吧,如果你这样做,你需要运行DTC ...但无论如何,这样的事情

Imports System.Transactions

Using scope as new TransactionScope()

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

  ' Commit everything
  scope.Complete()
End Using

这里的好处是,执行实际工作的代码不必知道有一个事务在运行,如果有异常,它会自动回滚,这要归功于Using块。