0

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

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

public class CustomException : Exception
{
    private string message;

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

    }

}

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

4

4 回答 4

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 帖子。

于 2011-07-14T06:53:06.177 回答
0

你可能想把它写成

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

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

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

那么您不需要私有字符串消息字段。

于 2011-07-14T06:31:04.390 回答
0

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

于 2011-07-14T06:56:03.120 回答
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) { }
}
于 2011-07-14T07:08:30.023 回答