C# 如何显示我自己的异常?
我正在开发一个web项目,需要在其中添加自定义异常类。例如,当会话超时时,如何显示自定义异常类中的消息?请帮忙。任何样品都会有帮助 这是我目前在exception类中编写的内容:C# 如何显示我自己的异常?,c#,asp.net,custom-exceptions,C#,Asp.net,Custom Exceptions,我正在开发一个web项目,需要在其中添加自定义异常类。例如,当会话超时时,如何显示自定义异常类中的消息?请帮忙。任何样品都会有帮助 这是我目前在exception类中编写的内容: public class CustomException : Exception { private string message; public CustomException () { this.message = "Invalid Query"; } pu
public class CustomException : Exception
{
private string message;
public CustomException ()
{
this.message = "Invalid Query";
}
public CustomException (String message)
{
this.message = message;
}
}
需要知道如何将其与会话超时联系起来,从这里我需要编写相同的逻辑。谢谢。您可能希望将此作为
public CustomException() : base("Invalid Query") { }
这样,异常消息就可以正确地传递给另一个构造函数
public CustomException(String message) : base(message) { }
这样,您就不需要私有字符串消息字段。如果您希望在引发时抛出自定义的
异常,您可以这样做
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,请参阅此SqlException类公开了SqlError对象集合的属性。您可以查询与master.dbo.sysmessages
表中的条目对应的每个错误对象的属性。我建议您使用内部异常
获取用户友好的异常消息以及系统错误消息。如果获取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) { }
}
谢谢你的回复。如果我正在编写类似dt=q.ExecuteQuery()的代码;在一个try块中,my exception类如何知道抛出的异常是否是会话超时异常,以便显示消息。如果是自定义异常,您应该自己抛出,应该让ExecuteQuery()(除非您自己编写)抛出相应的异常。如果它是由您抛出的,只需捕获(CustomException e),这意味着。我必须在应用程序代码本身中检查会话超时…而不是在exception类中。是的,您应该捕获SessionTimeoutException或通过将其作为“参数”来调用的任何内容对于Catch,当会话超时时,为什么要抛出自定义异常?我试图在执行层a的查询时返回批量数据,而在层a的会话超时时返回null。它不会在层A上显示任何错误。因此我需要使用自定义异常。您应该(几乎)始终将原始异常作为内部异常包括在内:抛出新的自定义异常(“会话已超时”,ste)
@Dan Puzey,同意。关于此问题的信息越多越好。此SessionTimeoutException是什么?找不到相同的指令。??我从你的帖子上拿的。您是在谈论TimeoutException、SQL TimeoutException还是实际的Asp.net会话超时异常?您会得到很多。System.Data.SqlClient.SqlException:超时已过期。