2009-06-18 8 views
5

で例外を発生させない、私はこのようなステートメントを持っているSQL Server 2005のデータベースにストアドプロシージャを持っている:SQL ServerのRAISERRORは、.NETクライアント

IF @Condition = 0 
    BEGIN 
     RAISERROR('some error message',16,1) 
     RETURN 
    END 

、それはそうのようなC#クライアントから呼ばれています:

ただし例外はありません。 SPの条件は、テストの場合は常にtrueです。これを確認するために、SQL Server Profilerから呼び出しをコピーしてクエリウィンドウで実行し、エラーが発生したことを示すErrorMessageが表示されました。

何が起きているのかよく分かりません。

+0

catchステートメントにブレークポイントを置いてみましたか、それがまったく実行されているかどうかを確認しましたか? –

+0

はい。それが働いていないことがわかったのです。 – Abdu

答えて

6

私はSQL Helperクラスを使い、ExecuteScalarが例外を奪い、nullを返すことを知りました。私はこれをしないExecuteDataSetに切り替えました。私は、異なるExecute ..メソッドが同じように動作することを期待していました。もう1つの方法はExecuteScalarを使用することで、SPがエラーを検出すると、クライアントで処理可能なSELECTエラー番号が表示されます。

0

重大度とは関係がありますか? 19まで重大度を上げても、コードに例外が発生しますか?

+1

重大度が11を超えると、クライアントが処理できるエラーになります。 – Abdu

2

SQL Booksオンライン重大度16によると、ユーザーが修正できる一般的なエラーを示します。 - 重大度は問題ありません。

私はSQL 2008のみを使用していますが、RAISERROR( 'some error message'、16,1)をテストしましたが、エラーはC#アプリケーションで検出されました。エラーがあなたの "SqlHelper"クラスで処理されていないと確信していますか?

+0

ありがとうございます。同じ結論を出した分析をした後、あなたのコメントを読んだ。 – Abdu

1

オンラインブックからCATCHブロックを呼び出すずにTRYブロック からのメッセージを返すようにRAISERRORを使用して10以下の重大度を指定します。

関連する問題