SQL Transaction + Try-catch或VB.NET Transaction + Try-catch?

时间:2011-08-12 07:32:46

标签: sql vb.net transactions

我正在使用连接到数据库的应用程序。如果某些数据库操作失败,我肯定想要回滚。我只是想知道哪个事务+ try-catch更好用,SQL还是VB.NET?

在VB.NET中我们可以做类似的事情:

Try

...

Catch ex As Exception
    MyTransaction.Rollback
End Try

如果try是在SQL中:

...
MyCommand.CommandText = _
"USE AdventureWorks2008R2; " & _
"GO " & _
"BEGIN TRANSACTION; " & _
"BEGIN TRY " & _
"    ... " & _
"END TRY " & _
"BEGIN CATCH " & _
"    SELECT  " & _
"        ERROR_NUMBER() AS ErrorNumber " & _
"        ,ERROR_SEVERITY() AS ErrorSeverity " & _
"        ,ERROR_STATE() AS ErrorState " & _
"        ,ERROR_PROCEDURE() AS ErrorProcedure " & _
"        ,ERROR_LINE() AS ErrorLine " & _
"        ,ERROR_MESSAGE() AS ErrorMessage; " & _
"    IF @@TRANCOUNT > 0 " & _
"        ROLLBACK TRANSACTION; " & _
"END CATCH; " & _
"IF @@TRANCOUNT > 0 " & _
"    COMMIT TRANSACTION; " & _
"GO " & _
MyCommand.ExecuteNonQuery()

我总是使用第一个,通过VB.NET。有什么区别吗?那些是什么?有什么缺点吗?

2 个答案:

答案 0 :(得分:2)

其中一个区别是被困的错误。

  • SQL catch将捕获SQL查询中出现的错误
  • VB.Net catch将捕获VB.Net中发生的错误。这包括编程和许多通过.Net API传播的查询错误

您想要使用的内容在很大程度上取决于您的情况。如果所有VB.Net try块都执行查询并回滚错误,那么在SQL中执行回滚会更好。这使数据库逻辑保持紧密和本地化。

但是,如果VB.Net try块包含说其他业务逻辑,那么保持回滚可能更有意义。

答案 1 :(得分:0)

从功能上讲,它们是相同的 - vb.net版本被翻译并作为sql查询运行。

主要区别在于您可以使用相同的连接执行多个SQL语句,而无需生成一个包含您希望在事务中完成的所有内容的大型SQL查询。