質問: 例外がスローされた場合のストアドプロシージャからの出力値の取得方法 SqlServer Management Studioでは、ストアドプロシージャを実行するときに例外がスローされ、出力値も返されます。 私はC#.NETからその値を取得する方法を理解することはできません - 例外がスローされたときに実行が停止され、出力値が設定されません。
回答: ストアドプロシージャとストアドプロシージャを実行しているコードの両方を制御できる場合は、OUTPUTストアドプロシージャパラメータを使用して呼び出し元にエラーコードを返すこともできます(つまり、@ErrorCode INT = 0 OUTPUT) 。 私の意見では、これにはエラーを引き起こすことに比べていくつかの利点があります。 1)例外処理は.NETフレームワークでは非常に高価です。必要なのは、入力したデータに何か問題があるか、データベースに競合があることをユーザーに伝えることです。エラーコードを戻すと、アプリケーションとサーバーのパフォーマンスは、スローするよりもはるかに小さい影響を与えます例外をキャッチします。 2)あなたの手続きが処理の中で十分に進んだ場合、他のパラメータを設定することができます。たとえば、レコードがロックされているユーザーに関する情報を含める必要がある場合は、この情報を別の出力パラメーターに含めて、コード内にエラーメッセージを作成することができます。 3)ストアドプロシージャでエンコードされたエラーメッセージを使用するよりも、メッセージの国際化やカスタマイズを簡単にサポートできます。