2017-01-05 7 views
2

sqlプロシージャを実行しようとするとSqlExceptionがスローされ、プロパティNumberが0になる可能性はありますか?SqlExceptionがスローされ、プロパティNumber == 0が可能ですか?

特定の状況:ドメインコントローラは使用できない/応答していないため、SQL Serverとの実際の通信は発生していません。 SqlException.Numberは、次の場合を除き、0であることを

+0

これを確認してください:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlerror.number(v = vs.110).aspx – TheGameiswar

+0

これはhttps:// msdnです。 microsoft.com/en-us/library/system.data.sqlclient.sqlexception.number(v=vs.110).aspx – TheGameiswar

+0

SqlConnectionが既に開かれているときに接続が中断されたことを意味しますか?この場合、クライアントコンポーネントは「Aトランスポートレベルのエラーが発生しました...」というメッセージをスローします。その例外には番号があります(19 - 物理接続は使用できません)。しかし、number == 0のエラー状態が定義されています。 – dlatikay

答えて

0

いいえ、それは可能ではありません。

  • 読み取り専用の結果を解析中
  • サーバーた重大なエラー処理クエリ
  • 加工キャンセルは失敗をルーティング
  • あなたはUSIじゃないと仮定すると、ユーザーインスタンスを作成するために

を失敗しました。 SQL Server 2016の読み取り専用ルーティングを使用している場合、上記のシナリオに該当しない場合があります。

残っているケースは、sysmessagesからの非ゼロ数値か、Win32エラーコード(0 == ERROR_SUCCESSもゼロにならないため)です。

実際には、「SSPIコンテキストを作成できません」、または「サーバーに要求を送信するときにトランスポートレベルのエラーが発生しました」、または「既存の接続がサーバーによって強制的に閉じられました。リモートホスト "であり、それらも0でないWin32エラーコードを持っています。

参考:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlerror.number(v=vs.110).aspx

それはSqlException.NumberはそのErrors配列の最初のエントリのNumberプロパティの同義語であり、その配列は、複数の項目が含まれている可能性があることは注目に値するかもしれません。

0

私自身の質問に答える。はい、可能です。

catch (SqlException ex) 
{ 
    for (int i = 0; i < ex.Errors.Count; i++) 
    { 
     this.logger.Error("Index #" + i + "\n" + 
     "Message: " + ex.Errors[i].Message + "\n" + 
     "Error Number: " + ex.Errors[i].Number + "\n" + 
     "LineNumber: " + ex.Errors[i].LineNumber + "\n" + 
     "Source: " + ex.Errors[i].Source + "\n" + 
     "Procedure: " + ex.Errors[i].Procedure + "\n"); 
    }      

    if (ex.Number == 0) 
    { 
     this.logger.Warn("Exception was caught but ex.Number == 0! Changing to -69."); 
     oResults.Add("_ExitCode", "-69"); 
    } 
} 

、これは今日のログに記録されました:私たちは、キャッチするaditionalコードを追加しました。

2017-01-17 08:05:08,282 [r074008903] ERROR ProcessLogger Index #0 
Message: A severe error occurred on the current command. The results, if any, should be discarded. 
Error Number: 0 
LineNumber: 0 
Source: .Net SqlClient Data Provider 
Procedure: 

2017-01-17 08:05:08,282 [r074008903] ERROR ProcessLogger Index #1 
Message: A severe error occurred on the current command. The results, if any, should be discarded. 
Error Number: 0 
LineNumber: 0 
Source: .Net SqlClient Data Provider 
Procedure: 

2017-01-17 08:05:08,283 [r074008903] WARN ProcessLogger Exception was caught but ex.Number == 0! Changing to -69. 

他の場所で_ExitCodeを決定するために使用されたので、何かが私たちが虚偽の情報を持っていた、この特定の状況では間違っていたです。

関連する問題