私はデータベースに接続するアプリケーションを使っています。いくつかのデータベース操作が失敗した場合、私は間違いなくロールバックを行いたいと思っています。私はちょうどどのトランザクション+ try-catchがSQLやVB.NETを使うのが良いのだろうかと思っていますか?トライキャッチがSQLである場合SQLトランザクション+ Try-catchまたはVB.NET Transaction + Try-catch?
Try
...
Catch ex As Exception
MyTransaction.Rollback
End Try
:
VB.NETで、我々のような何かを行うことができます
...
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クエリとして実行されます_ - トランザクション、はい。 「試して」...「キャッチ」、いいえ。これはLINQクエリの一部であるか、 '式'の一部であった場合にのみ可能です。 – stakx