如何显示我自己的异常?

时间:2011-07-14 06:26:09

标签: c# asp.net custom-exceptions

我正在开发一个Web项目,我需要添加自定义异常类。例如,如何在会话超时发生时从我的自定义异常类中显示消息?请帮忙。任何样本都会有所帮助。

这是我到目前为止在我的异常类中编写的内容:

public class CustomException : Exception
{
    private string message;

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

    }

}

需要知道如何将其与会话超时联系起来,从那里我需要编写相同的逻辑。谢谢。

4 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

您可能希望将其写为

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

这样,异常消息正确传递给另一个构造函数

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

然后您不需要私人字符串消息字段。

答案 2 :(得分:0)

SqlException类公开属性Errors,它是SqlError对象的集合。您可以查询每个错误对象的Number属性,该属性对应于master.dbo.sysmessages表中的条目。

答案 3 :(得分:0)

我建议您使用Inner Exception获取用户友好的异常消息以及系统错误消息。如果获得MyException,您会在MyException.ToString()看到您的异常消息和系统异常消息。

此外,如果您担心编码异常,可以使用VS的代码段功能。只需输入'Exception'并按TAB键两次,然后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) { }
}