2011-07-14 125 views
0

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

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

public class CustomException : Exception 
{ 
    private string message; 

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

    } 

} 

需要知道如何与会话超时链接此,从那里我需要写相同的逻辑。谢谢。

+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:抛出新的CustomException(“Session已经超时” ,ste)' –

+0

@Dan Puzey,同意了。你对这个问题的了解越多越好。 – Jethro

+0

这是什么SessionTimeoutException?无法找到相同的指令。 – NewBie

0

您可能希望这样的异常信息被正确传送写为

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

,为其他构造

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

,那么你不需要私人字符串信息栏。

+0

谢谢你的回应。如果我正在编写一个类似dt = q.ExecuteQuery()的代码;在try块中,我的异常类如何知道抛出的异常是否是会话超时异常,以便显示消息。 – NewBie

+0

如果这是一个自定义的异常,你应该自己抛出它,你应该让ExecuteQuery()(除非你自己写了)抛出适当的异常。如果它被你抛出只是捕获(CustomException e) –

+0

这意味着。我必须在应用程序代码中检查会话超时......不在异常类中。 – NewBie

0

SQLEXCEPTION类公开财产Errors这是SQLERROR对象的集合。您可以查询与master.dbo.sysmessages表中的条目相对应的每个错误对象的Number属性。

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) { } 
} 
相关问题