我正在使用一个连接到数据库的应用程序。如果某些数据库操作失败,我肯定想进行回滚。我想知道哪个transaction + try-catch更好用,SQL还是VB.NET?
在VB.NET中,我们可以这样做:
Try
...
Catch ex As Exception
MyTransaction.Rollback
End Try如果try catch在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,有什么不同吗?那些是什么?有什么缺点吗?
发布于 2011-08-12 15:37:39
其中一个不同之处在于捕获的错误。
中出现的错误,
传播的编程错误和许多查询错误
您想要使用的内容高度依赖于您的情况。如果SQL块所做的只是执行查询并回滚错误,那么在VB.Net中执行回滚要好得多。这保持了数据库逻辑的紧凑和本地化。
但是,如果VB.Net try块包含其他业务逻辑,那么将回滚保留在那里可能更有意义。
发布于 2011-08-12 15:37:07
在功能上,它们是相同的- vb.net版本被翻译并作为sql查询运行。
主要区别在于,您可以使用相同的连接执行多个SQL语句,而不必生成一个大型SQL查询,该查询包含您希望在事务中完成的所有操作。
https://stackoverflow.com/questions/7036919
复制相似问题