2011-07-14 12 views
0

私はカスタム例外クラスを追加する必要があるWebプロジェクトを開発しています。たとえば、セッションタイムアウトが発生したときに私のカスタム例外クラスからメッセージを表示するにはどうすればよいですか?助けてください。どのサンプルも参考になります。私自身の例外を表示するには?

これは私がこれまでに私の例外クラスで書かれたものです:

public class CustomException : Exception 
{ 
    private string message; 

    public CustomException() 
    { 
     this.message = "Invalid Query"; 
    } 
    public CustomException (String message) 
    { 
     this.message = message; 

    } 

} 

iが同じのロジックを記述する必要があるところから、セッションのタイムアウトでこれをリンクする方法を知っている必要があります。ありがとうございました。

+0

なぜセッションタイムアウトが発生した場合にカスタム例外をスローしたいですか? – Eranga

+0

レイヤAからのクエリの実行時にバルクデータを返そうとしていて、レイヤAのセッションタイムアウト時にnullを返します。それはレイヤーAのエラーを表示しませんので、私はそれのためにカスタム例外を使用する必要があります。 – NewBie

答えて

1

あなたのカスタムexceptionを投げることを望むなら、このようにすることができます。

try { 
    DataTable dt = q.ExecuteQuery(); //This throws a timeout. 
} catch(SessiontTimeoutException ste) { 
    throw new CustomException("Session has timed out"); 
} catch(Exception e) { 
    //Show unexpected exception has occured 
} 

これが実行しようとしていることがあまりにもわかりません。
更新:
SqlExceptionががTimeoutExceptionであるかどうかを調べるには、このStackOverFlow Post.

+0

元の例外もInnerExceptionとして常に含める必要があります: 'throw new newException(" Session has timed out " 、ste) ' –

+0

@ダン・プジー、同意。あなたが問題についてより多くの情報を持っている方が良いでしょう。 – Jethro

+0

このSessionTimeoutExceptionは何ですか?同じ指令を見つけることができませんでした。 – NewBie

0

あなたは例外メッセージが正しく渡されるこの方法は、あなたがプライベート文字列メッセージのフィールドを必要としない

public CustomException(String message) : base(message) { } 

他のコンストラクタのために、

public CustomException() : base("Invalid Query") { } 

としてこれを書きたいと思うかもしれません。

+0

ありがとうございました。もし私がdt = q.ExecuteQuery()のようなコードを書いているなら、 tryブロック内で、例外クラスがスローされた例外がメッセージを表示するためにinodeのセッションタイムアウト例外かどうかを知る方法を教えてください。 – NewBie

+0

カスタム例外の場合は、自分で投げる必要があります。ExecuteQuery()(自分で書かない限り)に適切な例外をスローする必要があります。あなたがスローされた場合は単にcatch(CustomException e) –

+0

という意味です。私はアプリケーションコード内でセッションのタイムアウトをチェックする必要があります...例外クラス内ではありません。 – NewBie

0

SQLExceptionクラスは、SQLERRORオブジェクトのコレクションであるプロパティErrorsを公開参照してください。 master.dbo.sysmessagesテーブルのエントリに対応する各エラーオブジェクトのNumberプロパティを照会できます。

0

ユーザフレンドリな例外メッセージとシステムエラーメッセージを得るには、Inner Exceptionを使用することをお勧めします。 MyExceptionを取得すると、例外メッセージとシステム例外メッセージがMyException.ToString()に表示されます。

さらに、例外をコーディングすることに懸念がある場合は、VSのコードスニペット機能を使用できます。 'Exception'と入力してTabキーを2回押すと、VSはExceptionクラスを次のコードとして作成します。

try 
{ 
    DataTable dt = q.ExecuteQuery(); //This throws a timeout. 
} 
catch (SessiontTimeoutException ex) 
{ 
    throw new MyException("my friendly exception message", ex); 
} 

[Serializable] 
public class MyException : Exception 
{ 
    public MyException() { } 
    public MyException(string message) : base(message) { } 
    public MyException(string message, Exception inner) : base(message, inner) { } 
    protected MyException(
     System.Runtime.Serialization.SerializationInfo info, 
     System.Runtime.Serialization.StreamingContext context) 
     : base(info, context) { } 
} 
関連する問題