Транзакция SQL + Try-catch или VB.NET Transaction + Try-catch? - PullRequest
3 голосов
/ 12 августа 2011

Я работаю с приложением, которое подключается к базе данных.Я определенно хочу сделать откат, если некоторые операции с базой данных потерпели неудачу.Мне просто интересно, какую транзакцию + 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.Есть ли разница?Что это?Есть ли недостатки?

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Одним из отличий являются ошибки, которые попадают в ловушку.

  • Улов SQL будет перехватывать ошибки, возникающие в запросе SQL
  • Улов VB.Net будет перехватывать ошибки, возникающие в VB.Net. Это включает как программирование, так и множество ошибок запросов, которые распространяются через API .Net

То, что вы хотите использовать, сильно зависит от вашей ситуации. Если все, что делает блок VB.Net try, - это выполнение запроса и откат ошибок, тогда вам гораздо лучше выполнять откат в SQL. Это сохраняет логику базы данных жесткой и локальной.

Однако, если блок попытки VB.Net включает в себя, скажем, дополнительную бизнес-логику, то, вероятно, имеет смысл сохранить там откат.

0 голосов
/ 12 августа 2011

Функционально они одинаковы - версия vb.net переводится и запускается как SQL-запросы.

Основное отличие состоит в том, что вы можете выполнять несколько операторов SQL, используя одно и то же соединение, без необходимости генерировать одно большоеSQL-запрос, содержащий все, что вы хотите сделать в транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...