0

ユーザーが 5 分間待機すると、「有効」ボタンをクリックすると、フォームに次のメッセージが表示されます。

サーバーは要求を処理できませんでした。---> 元のエラー メッセージ: エンティティのフェッチ中にデータベースの問題が発生しました。---> [IBM U2][UODOTNET - UNICLIENT][ErrorCode=45002] null レコード ID に対して操作を実行できません

だから私はtryとcatchキーワードを使いたいのですが、

しかし、私はこのコードでエラーメッセージを持っています:

try
            {

                SetPageState();
                Session["NewStep"] = "NewStepConfirm";
                Response.Redirect(stepone.aspx");
            }
            catch (Exception ex)
            {
                if (ex.ErrorCode == 45002)
                {
                    ErrorLabel.Text = "We are very sorry but don't wait for long time";
                }
                else
                {
                    ErrorLabel.Text = ex.Message;
                }
                ErrorLabel.Visible = true;
            }

ここにメッセージエラーがあります

コンパイラ エラー メッセージ: CS1061: 'System.Exception' には 'ErrorCode' の定義が含まれておらず、タイプ 'System.Exception' の最初の引数を受け入れる拡張メソッド 'ErrorCode' が見つかりませんでした (using ディレクティブまたはアセンブリ参照?)

ソース エラー:

if (ex.ErrorCode == 45002)

try および catch キーワードの使用方法

ありがとう

4

2 に答える 2

2

ErrorCode のテストを削除し、catch ブロックにブレークポイントを設定して、デバッガーでアプリを実行し、失敗を再現します。

デバッガーがブレークポイントで停止したら、例外オブジェクトを調べます。そのタイプは何ですか?どのようなフィールドがありますか? この例外オブジェクトには、目的の ErrorCode が含まれている可能性があります。もしそうなら、あなたは終わりです。特定の例外タイプをトラップするには、catch 句を編集します。

ただし、エラー メッセージ (「-->」および「元のメッセージ」) の構造から、これはおそらくラップされた例外であることが示唆されます。コア コードによってスローされた例外 A が、例外 B をスローする中間コードによってキャッチされることを願っています。 B は InnerException プロパティで元の例外 A への参照を保持します。例外オブジェクトの InnerException プロパティ、およびそのオブジェクトの InnerException プロパティなどをチェックして、チェーンをたどって元の例外を見つけます。それが目的のデータを持っている可能性が最も高いためです。

テキストに表示されるエラー コードは、例外オブジェクトの正式なプロパティではなく、文字列に埋め込まれたデータである可能性があります。

求めているデータが InnerException に埋もれている場合、それをキャッチすることはできません。最も外側の例外の型 (デバッガーがブレークポイントで停止したときの ex 変数の型) をキャッチし、InnerException チェーンを掘り下げて目的のデータを引き出す必要があります。

于 2012-11-29T18:15:57.897 に答える
1

スローされている特定の種類の例外をキャッチする必要があります。

基本例外クラスをキャッチすることは、悪い習慣 (または少なくとも最後の努力) と見なされます。特定の例外の種類をキャッチすると、探しているプロパティにアクセスできます。

try
{
  DoSomethingThatThrowsACustomWidgetException() ;
}
catch (CustomWidgetException e )
{
  int errorCode = e.ErrorCode ;
  ...
}

基本の Exception クラスをキャッチした場合は、それをその型にダウンキャストする必要があります。

try
{
  DoSomethingThatThrowsACustomWidgetException() ;
}
catch ( Exception e )
{
  CustomWidgetException cwe = e as CustomWidgetException ;

  if ( cwe == null ) throw ;

  int errorCode = cwe.ErrorCode ;
  ...

}

簡単!

于 2012-11-29T18:15:15.230 に答える