0

ストアド プロシージャ キャッチ ブロック コード。

alter PROCEDURE [dbo].[TESTError]      
(

)
AS
BEGIN

    SET NOCOUNT ON;

      BEGIN TRY
        SELECT 5/0
      END TRY 
    BEGIN CATCH

        DECLARE @ErrorNumber INT

           SELECT @ErrorNumber = ERROR_NUMBER() 

           RAISERROR
        (N'The error code is: %d',
             16, -- Severity.
              1, -- State.
             @ErrorNumber,     
             '');
END CATCH
END

上記のストアド プロシージャは、SSMS を使用して実行すると、エラーをスローして表示します。

.Net クライアント コードのみの例外部分。

    catch (SqlException ex)
            {      
                string msg = string.Format("Error number: {0} / Message: {1}", ex.Number, ex.Message);
            }

アプリケーションがストアド プロシージャを呼び出すと、例外ブロックでキャッチされません。

どんな種類のヒントやアイデアも私を助けてくれます。

4

1 に答える 1

0
catch (SqlException ex)
        {      
            string msg = string.Format("Error number: {0} / Message: {1}", ex.Number, ex.Message);
        }

このキャッチブロックが入力されたとしても、何が起こると予想していますか? 文字列変数は、次のマイクロ秒で失われた値を取得します...

とにかく:特殊な(型付きの)catchブロックを扱うときはいつでも、一般的なcatchブロックを追加しない正当な理由があるはずです(特殊化されたブロックの最後として):

catch (System.Exception sysex)
        {      
            string msg = string.Format("Error number: {0} / Message: {1}", sysex.Number, sysex.Message);
            //Do something with this information!
        }

あるいは単に

catch{throw;}

これは、ニーズとツール/デバッグの習慣に依存します...

于 2016-10-27T21:44:24.063 に答える