プロセスは、データ層は、SQL Serverエラーを使用して



開発者は、適切に予期しないを処理するため、努力ので、ユーザーは天国のようなシステムエラーメッセージを心配する必要はありません。このため、例外処理は、各です。NETアプリケーションの標準的な部分。試しtry / catchブロックを使用すると、実装の観点から例外と制御アプリケーションをキャッチすることができます。対話は、データベースで発生するときに多くの間違いが、多くの開発者がどのようにエラーのデータベース層に対処するのか分からない。この論文では、どのようにデータベース内のエラーを処理するのSQLServerとT - SQLコードを使用して探求する。

T - SQLのエラーを処理

のSQLServerのSQLダイアログでは、簡単に、非致命的なエラーが発生しました関数を格納することがプロセスを処理するが、扱いやすいのすべてのエラーをしないことができます。実際には、非致命的な致命的なエラーが多い。志免、何Shifei致命的な、Duicimoyou編は、ドキュメントとして完了致命的な、しかし、アプリケーションのコードは常に/ブロックを致命的なデータベースエラーを処理するキャッチしようと入手可能です。他のすべてのエラーの場合は、次の方法を使用できます。

サービス

あなたは、データベース内のすべてが問題はないすべての変更が完了していることを確認するトランザクションコードを使用する必要があります。トランザクション一連のステートメント(挿入、更新、または削除を選択で構成され論理ユニットとして記載のタスクにSQLServerのオンラインヘルプ、等)。トランザクションは、エラー時に、すべての変更は、トランザクションがデータベースの永続的な一部となるが発生していない。エラーは、この期間中に発生した場合は、データベースに変更を加えることはありません。

サービスは、BEGIN TRANSACTIONとの間のEND TRANSACTIONステートメントに含まれます。変更が発生しないようにトランザクションをロールバックステートメントは、すべての変更を取り消すことができます。のCOMMIT TRANSACTIONステートメントは、永続的な変更に使用することができます。今、私たちはT - SQLのエラーの対処方法に焦点を当てることができます。

@ @エラー

あなたは、T - SQLエラー処理を実装することができます@ @ Error関数ようにします。これは、エラーコードをシステムから返されたが返されます。エラーが"0が返されます。" @ @ Error関数は、すぐに呼び出す必要がありますステートメントの直後、各T - SQLステートメントを削除する後、それはされるため。

RAISERRORステートメント

RAISERRORステートメントを使用すると、カスタムエラーメッセージを生成したり、内部にあるフォームを使用してされているsysmessagesニュースすることができます。あなたはその構文をオンラインで表示できますが、最も基本的なフォームがメッセージ(カスタムメッセージの場合)またはメッセージID(既存のソース)およびその重症度と状態が含まれている。 SQLServerは、軽くそれをその上に番号を渡された状態を使用していません。重大度は0から18のエラーの重大度は、ユーザー、19-25管理者のために予約した。

リストAでは、サンプルプロシージャは、これらの機能に、データベースレコードのNorthwindサンプルを更新するために使用するストアド:

TRANSACTIONUPDATE ASBEGINBEGINのCREATE PROCEDURE sp_UpdateCustomerPhoneは(@ idはnvarchar型(5)、@電話nvarchar型(24)、@ retvalueint出力)[dboは] [お客様]のSET [電話] = @携帯電話のWHERE([得意先コード] = @ id)をのIF(@エラーは、 0) - 非負の値errorBEGINROLLBACK TRANSACTIONを信号@ - 変更はpermanentRAISERROR('更新お客様はエラー'、1,1) - されていませんカスタムエラーメッセージを発生させる - カスタムエラーメッセージが表示される場合= -1 - 戻り負の値を@ retvalue consoleSETからsignalproblemsENDCOMMITトランザクションを実行 - 変更は永続的に、レコードがupdatedSET @ retvalue = 1 - 正の戻り値signalssuccessRETURNENDですので、

リスト

エラーが発生した場合、値がプロセスに渡さに設定されている電話番号を記載した。そこには負の値を返す問題は、すべて何の問題の実装で物事の場合、それは肯定が返されますている場合は、戻り値パラメータを使用します。

ストアドプロシージャの戻り値を使用して

ストアドプロシージャの戻り値により、我々は。NETコードで年間それを使用することができます。 SqlCommandオブジェクトを使用すると簡単にプロセスにパラメータを追加すると戻り値を格納することができます。 Directionプロパティのパラメータは、ストアドプロシージャの呼び出しから値を受け取るために使用されます。これは、2つのプロパティの値を:InputOutputのと出力しています。この例では、我々は状態値を受け取るために出力を使用します。

このコードは、Northwindデータベースの簡単なASP.NETページのデータテーブルに新しい値を顧客に転送するために使用されます。 id値は、実際には、簡単にフォームに渡すことができる隠しフィールドに、が格納されて、このフィールドは、記述するために使用されます。テキストフィールドに値を入力してデータベーステーブルを更新するために使用される場所の電話番号フィールド。

パラメータは、SqlCommandオブジェクト(に彼らは正確にストアドプロシージャパラメータを満たす必要があります)追加されます。コマンドは、SqlCommandオブジェクトのExecuteNonQueryメソッドを介して実行されます。一度は、戻り値は、パラメータを取得することができますが実行されています。

コードは、(-1問題を示される)、および戻り値をチェックするメッセージがLabelコントロールインチで表示されます。また、任意の致命的なエラーの操作中に発生することがデータベースとの対話をキャプチャするために使用try / catchブロックをしてください。参照してください]ボックスの一覧のB:

新番号:OnCommand ="btnUpdatePhone_Click"にrunat ="サーバー"/ ALFKIと

リストB

対応VB.NETのコードでリストはC:

新番号:OnCommand ="btnUpdatePhone_Click"にrunat ="サーバー"/ ALFKIと

リストC

データベースは、すべてカバー

使用は、/ブロックを例外。NETアプリケーションのコードを処理するためにキャッチしようとする単純なプロセスですが、データベース層の例外を監視することができます。のSQLServerのT - SQL言語の例外処理コードをすべてあなたが必要を提供します。