我正在使用连接到数据库的应用程序。如果某些数据库操作失败,我肯定想要回滚。我只是想知道哪个事务+ 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。有什么区别吗?那些是什么?有什么缺点吗?
答案 0 :(得分:2)
其中一个区别是被困的错误。
您想要使用的内容在很大程度上取决于您的情况。如果所有VB.Net try块都执行查询并回滚错误,那么在SQL中执行回滚会更好。这使数据库逻辑保持紧密和本地化。
但是,如果VB.Net try块包含说其他业务逻辑,那么保持回滚可能更有意义。
答案 1 :(得分:0)
从功能上讲,它们是相同的 - vb.net版本被翻译并作为sql查询运行。
主要区别在于您可以使用相同的连接执行多个SQL语句,而无需生成一个包含您希望在事务中完成的所有内容的大型SQL查询。