2011-01-28 10 views
1

私はAsp .NetとC#でプロジェクトをやっています。また、ODP .NETを使用してOracle DBに接続しています。PL/SQLの例外処理とエラー

私はストアドプロシージャを使用してデータベースに値を挿入しています。すべてが正常です、それはまた私が持っているすべての例外を発生させます。

私は3つの例外があります:私はNULL値に

  • デフォルト「その他」
  • を挿入しようとすると、私はすでに挿入しようとする値がデータベース
  • に存在する場合に

    1. 最初の2つの例外が発生すると、エラーが表に挿入されます。エラー、すべてうまく行きます。

      私が本当に知りたいのは、例外が発生したときにユーザーにメッセージを表示するにはどうすればいいですか?

      何かがdbms_output.put_line("Error");のようなものですが、私のウェブページに表示したいと思います。これは可能ですか?

      どのようなヒントもありがとうございます。

  • 答えて

    4

    .NETプログラムはクライアントなので、未処理の例外をPL/SQLプログラムから伝播させてクライアントに戻す必要があります。この例外は他の例外と同様に処理できます。

    つまり、PL/SQLコードから「その他の場合」例外を削除し、代わりにデータベース呼び出し(ODP.NETを使用)をC#例外ブロックでラップする必要があります。ここで例外をキャッチし、Oracleエラー番号とテキストを取得し、必要に応じてユーザーに表示することができます。 (あなたも戻ってC#クライアントにエラーを通知するために、あなたのPL/SQLコードでRAISE_APPLICATION_ERRORを使用することができ、このアプローチを使用する。)

    +0

    多くのありがとうございます。あなたのソリューションで、私は何をどのようにしてやることができるのですか? – l3gion

    1

    整数を返すようにストアドプロシージャを修正することができます。0は正常を意味し、1はタイプ1の例外を意味し、2は例外です。このように、UIは保存メソッドが行ったことをユーザに通知できます期待どおりには行きません。

    通常、ストアドプロシージャで例外を処理しませんでしたが、SQLからエラーをログに記録して、上記の方法で必要な処理を実行できるようにする必要があることを理解しています。私たちのSQL Serverのストアドプロシージャで

    +0

    こんにちはダヴィデ、興味深いアプローチ。たとえば、例外が発生すると、例1に戻ります。この値をアプリケーションに送り返すにはどうすればよいですか?ストアドプロシージャでOUT変数を使用することによって?ありがとうございます – l3gion

    0

    我々はこのようなものがあります:

    ELSE <> 0

    return (1) 
    

    return (0) 
    

    ERROR @@ IFをそれが保存されたかに依存しません格納されたテーブルがテーブルを返す場合は、出力パラメータを使用して上で説明した整数を返すことができます。

    関連する問題