2011-06-30 13 views
3

私は次のコードでASP.Netアプリケーション有する:SQLExceptionがキャッチされていない

try 
    { 
     sql = new SqlProc("prcCustomerAgeSelect", 
      SqlProc.InParam("@DateFrom", SqlDbType.DateTime, 8, _OrderDateFrom), 
      SqlProc.InParam("@DateTo", SqlDbType.DateTime, 8, _OrderDateTo), 
     sql.Command.CommandTimeout = 1; 
     dt = sql.ExecuteTable(); 

    } 
    catch (SqlException ex) 
    { 
     Filter.ErrorMessage = "Please narrow your search criteria."; 
    } 

注ライン:

sql.Command.CommandTimeout = 1。

これにより、SqlExceptionがスローされます(テスト用)。

キャッチブロックがこの例外をキャッチするとは思っていましたが、そうではありません。代わりに、私は得る:

タイムアウトが切れている。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。

[SqlException(0x80131904):タイムアウトが期限切れです。操作が完了する前にタイムアウト時間が経過しているか、サーバーが応答していません。]

なぜそれをキャッチしませんか?間違ったタイプを使用していますか?私はここで何が欠けていますか?

ありがとうございます!

-Ev

+0

実際の*コードを投稿してください。あなたのコードはコンパイルされず、正確なコードなしで何が起こっているのかを正確に評価することはできません。 – Nix

+1

'Console.WriteLine(ex.GetType()。Name)'の出力は何ですか? – ChrisWue

答えて

5

何を見ていることはSqlExceptionではないようですね。

SqlProcがそれ自身でSqlExceptionsを捕まえて、そこからいくつかの情報を抽出して、新しいタイプの例外(新しい例外のメッセージに元の情報の一部を埋め込む)を新たに投げる可能性があります。

+0

クイック返信ありがとう!私は、ブラウザにスローされた例外は、 例外の理由:System.Data.SqlClient.SqlException:タイムアウトが切れているので、そうは思わないが、操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。 –

+0

したがって、例外はSystem.Data.SqlClient.SqlException型であることを意味しています。これはまさに私が捕まえようとしているものです。右? –

+1

いいえ - 私は直面しています。 SqlExceptionは何らかの理由でApplicationExceptionでラップされていました。新しいApplicationExceptionをスローします(string.Format( "予期しないエラーが発生しました:{0}"、GetProcDebugString(cmd))。 –

0

コマンドタイムアウトではなく、接続タイムアウトのようです。

これを確認するために、より合理的なタイムアウト値でクエリを接続して実行できることを確認します。