SQL事务&x2B;尝试catch或VB.NET事务+;试着接球?
我正在使用一个连接到数据库的应用程序。如果某些数据库操作失败,我肯定要执行回滚。我只是想知道使用SQL还是VB.NET哪个事务+try-catch更好 在VB.NET中,我们可以执行以下操作:SQL事务&x2B;尝试catch或VB.NET事务+;试着接球?,sql,vb.net,transactions,Sql,Vb.net,Transactions,我正在使用一个连接到数据库的应用程序。如果某些数据库操作失败,我肯定要执行回滚。我只是想知道使用SQL还是VB.NET哪个事务+try-catch更好 在VB.NET中,我们可以执行以下操作: Try ... Catch ex As Exception MyTransaction.Rollback End Try 如果try-catch在SQL中: ... MyCommand.CommandText = _ "USE AdventureWorks2008R2; " & _
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。有什么区别吗?那些是什么?有什么缺点吗?从功能上讲,它们是相同的-vb.net版本会被翻译并作为sql查询运行
主要区别在于,您可以使用同一连接执行多个SQL语句,而不必生成一个包含您希望在事务中执行的所有操作的大型SQL查询。其中一个区别是捕获的错误
- SQL捕获将捕获SQL查询中发生的错误
- VB.Net捕获将捕获VB.Net中发生的错误。这包括编程错误和许多通过.NETAPI传播的查询错误
try
…catch
,否。仅当它是LINQ查询的一部分或表达式的一部分时,才可能执行此操作。