2

.asmxページのWebサービスを呼び出す.aspxページがあります。その.netWebサービスで、SQLServer2008へのデータベース接続を開こうとしました。接続が失敗します。理由はわかりません。私はこれをtry/catchで実行していますが、デバッグ時にcatchがヒットします。サーバーのファイルシステムにアクセスしてログファイルを書き込むことができないため、そこに何を出力できるかわかりません。

私はこの投稿を見つけました:

try
{
   SqlCommand cmd =
       new SqlCommand("raiserror('Manual SQL exception', 16, 1)",DBConn);
   cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
   string msg = ex.Message; // msg = "Manual SQL exception"
}

ここでそれは私のためにトリックをするかもしれません、しかし私はこのウェブサービスを呼んだページにmsg文字列を出力させる方法がわかりませんか?呼び出し元のページにも同じ例外ハンドラーを実装させることで、例外チェーンの上位に伝播する方法はありますか?

ありがとう // :)

4

5 に答える 5

3

SQL例外を特定のタイプとしてトラップし、特定のエラーメッセージを読み取ることができるはずです。

try{
   ...
}
catch(SQLException sqlex)
{
   /// do some work here with sqlex.Message
}
catch(Exception ex)
{
   /// this will trap any other 'type' of exception incase a sqlex is not thrown.
}

次に、これを「スタックの上位」にスローできます。これは、失敗したコードを呼び出したメソッドに送り返すことを意味します。

catch(SQLException sqlex)
    {
       throw sqlex;
    }

または、SQL例外に基づいて新しいメッセージをスローすることもできます。

catch (SQLException sqlex)
  {
    throw new Exception("My method threw an exception in SQL:" + sqlex.Message);
  }

これらのアプローチはすべて、SQLを呼び出したクライアントにスタックをバックアップするメッセージを送信することを可能にします。これは、メッセージを表示する場所です。

于 2009-12-12T07:11:01.430 に答える
1

web.configで以下を設定すると、例外の詳細がブラウザに表示されます。

<customErrors mode="off" />

または、 ELMAHのインストールを試すこともできます。セットアップは非常に簡単で、例外の詳細のログをメモリに保持するように構成できます。

于 2009-12-12T07:09:37.947 に答える
1

ページまたはアプリケーションのトレースを有効にしてから、次の操作を実行できます。

Trace.Write ("This is my exception:\n" + exception.ToString ());

次に、http://yourhost/Trace.axdにアクセスすると、出力が表示されます。

于 2009-12-12T07:10:01.790 に答える
1

デバッガーにアクセスできる場合は、

Debug.WriteLine(ex.Message) 

あなたのcatchステートメントで。

これにより、エラーが出力ウィンドウに書き込まれます。

于 2009-12-12T07:45:00.770 に答える
0

デバッグできると言ったので(コードを変更できると仮定して)、次のことを実行してみませんか。

string strEx = Ex.ToString(); //Ex is the caught exception.

次に、Visual StudioIDEウォッチウィンドウ/ビジュアライザーからstrExデータをコピーして、データを使用します。

于 2009-12-12T07:11:30.050 に答える