2011-11-23 50 views
1

我正在使用VS2005 C#,并且我有一个具有列表,编辑数据库,导入和导出数据等功能的应用程序。如何处理运行ASP.NET应用程序时遇到的错误

但是,我不知道捕捉和处理错误。下面是一个错误的样本屏幕截图会见时导入的文件的列不与数据库匹配,并从停止运行应用程序并点直奔我的后端代码: enter image description here

Preiovusly我使用NetBeans和它Netbeans更清晰,因为他们总是用错误代码指定每个错误,所以我能够为每个错误代码分配一个网页。

我可以知道如何识别这些错误,以及如何处理它们?遇到错误时是否可以分配网页重定向?

谢谢

回答

5

有三种方法在ASP.NET处理异常:

  1. All the exceptions will catch page level. 
      2. All the exceptions will catch entire site level. 
      3. All the exceptions will catch by using "web.config" file 

例子:

1.Exception在页级别处理。

 public void Page_Error(object obj, EventArgs ergs) 
     { 

      Exception objErr = Server.GetLastError().GetBaseException(); 
      string err = "Error Caught in Application_Error event " +  
         System.Environment.NewLine + "Error in: " + Request.Url.ToString() + 
         System.Environment.NewLine + "Error Occured Time:" + DateTime.Now + 
         System.Environment.NewLine + "Error Message:" + objErr.Message.ToString() + 
         System.Environment.NewLine + "Stack Trace:" + objErr.StackTrace.ToString(); 
      Response.Write(err); 
      Server.ClearError(); 
      Response.Redirect("~/customError.aspx"); 
     } 

2.Exception处理在网站级别。通过使用web.config文件在网站级别

protected void Application_Error(object sender, EventArgs e) 
     { 
      Exception objErr = Server.GetLastError().GetBaseException(); 
      TraceExceptions objExceptionInsert = new TraceExceptions(); 
      objExceptionInsert.StackTrace = objErr.StackTrace; 
      objExceptionInsert.Exception = objErr.Message; 
      objExceptionInsert.Page = Request.Url.AbsolutePath; 
      //Inserting exception into the database 
      int exceptioncode = Utilities.TraceException(objExceptionInsert); 
      Server.ClearError(); 
      //Redirecting to common exception page 
      string url = "~/Common/Exceptions.aspx?ExceptionCode=" + exceptioncode; 
      Response.Redirect(url); 

     } 

3.Exception处理。

web.config文件的customErrors元素是针对未处理错误的最后一道防线。如果你有其他错误处理程序,比如Page_Error subs的Application_Error,它们将首先被调用。如果他们没有执行Response.Redirect或Server.ClearError,则应该将其带入web.config中定义的页面。在web.config文件中,您可以处理特定的错误代码(500,404等),或者您可以使用一个页面来处理所有错误。这是此方法与其他方法之间的主要区别(尽管您可以通过使用其他方法执行各种Response.Redirects来模拟此方法)。打开你的web.config文件。该部分的customErrors使用这种格式:

<customErrors defaultRedirect="url" mode="On|Off|RemoteOnly"> 
    <error statusCode="statuscode" redirect="url"/> 
</customErrors> 

这里是关于的“mode”属性的一些重要信息: “开”指定自定义错误被启用。如果没有指定defaultRedirect,用户将看到一个通用错误。

“关”指定自定义错误被禁用。这允许显示详细的错误。

“RemoteOnly”指定自定义错误仅显示给远程客户端,而ASP.NET错误显示给本地主机。这是默认设置。

默认情况下,创建Web应用程序时,该部分看起来像这样。

<customErrors mode="RemoteOnly" 
2

有一个简单的跟随文章here

here

在最基本的情况下,.NET中的错误处理是通过try ... catch ... finally结构完成的,类似于Java。您提到使用NetBeans,所以我假定您熟悉使用这些结构的Java异常处理,所以一旦您了解基础知识,它应该是一个相当简单的过渡。

捕获异常代码和异常类型是有区别的。例如,在.NET中,您可能会得到一个System.NullReferenceExceptionFileNotFoundException。绝大多数情况下,例外情况非常好,这使得了解问题变得容易一些。这只是一个不同的习惯。

您的屏幕截图中的错误是一个OleDbException,这意味着OleDb命令,连接等出现问题。您可以单击“更多详细信息”。

而且,一旦你知道了异常类型,寻找最好的第一个地方是在MSDN,你通常可以找到上的原因,解决方案等。例如很好的文档,在这里您覆盖错误:http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbexception.aspx

最后,如果您在截图中注意到,错误对话框会包含一个链接,指向“在线搜索更多帮助”。这通常会使您立即需要去修复代码。

2

您可以使用Global.asax文件中的Application_Error事件处理程序来捕获ASP.Net应用程序中的所有未处理的错误。

protected void Application_Error(Object sender, EventArgs e) 
    { 
     Exception ex = Server.GetLastError().InnerException; 

     Application["Ex"] = ex; 
     Response.Redirect("ErrorPage.aspx") 
    } 

其中ErrorPage.aspx取入Ex值和显示或处理。 this site还有另一个例子。

此外,从您提供的屏幕截图中,您可以点击View Detail链接,您将获得调用堆栈,内部异常(如果有)以及任何其他帮助您解决问题的信息。

2

错误捕获在C#中相当两岸前进,是这样的:

try{ 
    //stuff you think might fail here, for instance the stuff inside your using statement 
} 
catch(Exception e){ 
    Response.Redirect("/myErrorPage.aspx?error=" + e.Message); 
} 

一旦你捕获的异常,你可以得到各种各样的异常对象关于它的信息的(E在这种情况下)

+1

是的,最后可能会有用,虽然在上面的代码中,using语句将处理任何需要关闭的db连接 –

相关问题