.NET アプリケーション (VB / VS2010) があり、データベース クエリのために SQL Server 2008 で多くのストアド プロシージャを呼び出しています。これらのストアド プロシージャがデータベース テーブルを変更すると、自動的に実行されるかなりの数の更新/挿入/削除トリガーもあります。
ストアド プロシージャが呼び出され、エラーが発生せず、.NET アプリが通常どおり続行されるため、正常に実行されているように見える状況がよくあります。ただし、内部を調べて SQL Server クライアント経由でストアド プロシージャの呼び出しを手動で実行すると、ストアド プロシージャが失敗した直後にトリガーが実行され、すべての変更がロールバックされることがわかります。
だから私の質問は: .NET でエラーを検出して通過する最良の方法は何ですか?-> ストアド プロシージャ -> .NET アプリでエラーが発生した場合にすべてが成功したかどうかを確実に知るためのシナリオをトリガーしますか?
よろしくお願いします、スティーブ
更新: 私は今家にいて、週末はデスク (およびコード ベース) から離れているため、ストアド プロシージャの詳細を確認する機会がありません。これまでの回答に感謝します。来週またコードを見ることができます。
しかし、その間...
1 つの質問は、MS SQL Server のバージョンに関するもので、2008 です。
私が頭のてっぺんから知っていることから、ストアドプロシージャ(少なくともデータを読み取らず、データを「単に」更新、削除、または挿入するもの)を次のように呼び出しています。
Using connection As New SqlConnection("connectionString")
Dim command As New SqlCommand("EXEC STORED_PROCEDUR_ENAME), connection)
command.Connection.Open()
command.ExecuteNonQuery()
End Using
上記のコードの背後にある仮定は、ストアド プロシージャまたは関連するトリガー内で何かが失敗した場合に、
command.ExecuteNonQuery()
その後失敗します。それが私の最初の問題かもしれません。つまり、このコードを変更する必要がありますか? 以下の 1 つの質問は、私が ExecuteDataReader を使用するかどうかでした。したがって、少なくとも今のところ、答えはノーです...
以下の SQL 固有の質問と提案についてコメントします。