2012-02-12 1 views
2

こんにちは、Error_Number()をストアドプロシージャから呼び出し元の.NETアプリケーションに渡す最もよい方法は何ですか?ストアドプロシージャから呼び出し元の.NETアプリケーションにError_Number()を取得するには

出力パラメータを設定するか、SELECTクエリを使用して設定できます。

注:私はデータリーダーを使用しています。

ありがとうございます。

答えて

4

これを行うには、試みることができる - SQL try/catchブロックであなたのError_number()をキャッチして、あなたがSqlExceptionとして.NETアプリケーションでキャッチすることができ、エラーを上げます。あなたのSQLストアドプロシージャで

:Royi..Thanks @

// call your stored proc some way... 
using(SqlConnection conn = new SqlConnection("server=.;database=Test;Integrated Security=SSPI;")) 
using (SqlCommand cmd = new SqlCommand("dbo.YourStoredProcNameHere", conn)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    // possibly add parameters to the stored procedure call.... 

    try 
    { 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 
     conn.Close(); 
    } 
    catch (SqlException ex) 
    { 
     // catch SqlException - ex.ErrorNumber contains your error number 
     string msg = string.Format("Error number: {0}/Message: {1}", ex.Number, ex.Message); 
    } 
} 
+0

ありがとうございます。 Iamはdatareaderを使って作業しています。このソリューションはData Readerで動作しますか? – Ananth

+1

@Ananth:SQL ServerでRAISERRORが発生した場合、C#コードが例外で中断され、データリーダーが中断され、.NETの 'try/catch'ブロックの' catch'に制御が移りますアプリ。そう、はい、それはデータウェアで動作します.... –

+1

@marc_s ..私は私が探していた答えを得ました。それはex.Numberにはエラー番号があります。ありがとうございます。しかし、raiseエラーはデータでは機能しませんでしたリーダー。 SELECTクエリの直後にRAISERRORステートメントが記述されていても、spのselectクエリがうまく動作せず、エラーが発生しませんでした – Ananth

0

はこれを試してみてください。

BEGIN TRY 
    -- Generate a constraint violation error. 

END TRY 
BEGIN CATCH 
    SELECT 
     ERROR_NUMBER() AS ErrorNumber 
     ,ERROR_SEVERITY() AS ErrorSeverity 
     ,ERROR_STATE() AS ErrorState 
     ,ERROR_PROCEDURE() AS ErrorProcedure 
     ,ERROR_LINE() AS ErrorLine 
     ,ERROR_MESSAGE() AS ErrorMessage; 


END CATCH; 
+0

BEGIN TRY -- do something here.... END TRY BEGIN CATCH DECLARE @ErrorNumber INT SELECT @ErrorNumber = ERROR_NUMBER() RAISERROR (N'The error code is: %d', 16, -- Severity. 1, -- State. @ErrorNumber, -- First substitution argument. ''); -- Second substitution argument. END CATCH; 

と(:C#のここに)あなたの.NETコードで

。しかし、SELECTクエリ以外の解決策はありますか?同様に、commandobjectまたはreaderのプロパティにエラー番号が設定されているかどうかを知る必要があります。 – Ananth

関連する問題