我在VB.NET中创建了一个Windows窗体,在“保存”的点击事件中,我调用了5个程序来执行不同的任务。所有这些都在一个TRY - CATCH块中。我面临的问题是,从调用的5个程序开始,如果在执行第4个程序时出现错误,则在程序之前存储的数据将存在于表中。
任何人都可以帮助我如何在VB.NET中使用begin tran,rollback tran和commit tran。
的问候,
乔治
答案 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个程序都在同一个数据库中,并且没有涉及链接数据库: -
您可以创建一个以正确顺序调用所有5个过程的过程。 在此过程中,您可以分别在开头和结尾执行BEGIN TRAN和COMMIT / ROLLBACK TRAN
如果您想使用ADO.net进行此操作,并且只要在同一个Connection上调用所有过程,您就可以将事务与命令对象关联起来并按照示例{{3}使用它}
但是,如果您正在跨多个数据库进行交谈,
答案 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块。