我正在使用VS2005 C#,我有一个应用程序,它有一些功能,如列表,编辑数据库,数据的导入和导出。
但是,我不知道捕获和处理错误。下面是导入的文件列与数据库不匹配时遇到的错误的示例屏幕截图,并阻止应用程序运行并直接指向我的后端代码:
Preiovusly我正在使用Netbeans,在Netbeans中我更清楚,因为他们总是用错误代码指定每个错误,所以我能够为每个错误代码分配一个网页。
我可以知道如何识别这些错误以及如何处理它们?是否可以在遇到错误时分配网页重定向?
谢谢
答案 0 :(得分: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.页面级别的异常处理。
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.网站级别的异常处理。
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.使用web.config在网站级别处理异常。
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”属性的一些重要信息: “On”指定启用自定义错误。如果未指定defaultRedirect,则用户会看到一般错误。
“关闭”指定禁用自定义错误。这样可以显示详细错误。
“RemoteOnly”指定仅向远程客户端显示自定义错误,并向本地主机显示ASP.NET错误。这是默认值。
默认情况下,创建Web应用程序时,该部分将如下所示。
<customErrors mode="RemoteOnly"
答案 1 :(得分:2)
您可以在未处理的错误上重定向用户。请查看MSDN文章 - Complete Example for Error Handlers。
PS:阅读代码项目文章 - Exception Handling Best Practices in .NET
答案 2 :(得分:2)
有一篇易于理解的文章here。
here。
在最基本的情况下,.NET中的错误处理是通过try ... catch ... finally结构完成的,类似于Java。您提到过使用NetBeans,因此我假设您熟悉使用这些结构的Java异常处理,因此一旦您了解了基础知识,它应该是一个相当简单的过渡。
捕获异常代码和异常类型之间存在差异。例如,在.NET中,您可能会获得System.NullReferenceException
或FileNotFoundException
。在大多数情况下,异常名称非常明确,这使得理解错误更容易。这是不同的习惯。
屏幕截图中的错误是OleDbException,这意味着OleDb命令,连接等出现问题。您可以单击“更多详细信息”。
此外,一旦你知道了Exception类型,最好看的第一个位置是在MSDN上,你可以在那里找到关于原因,解决方案等的非常好的文档。例如,你的错误是这里介绍:http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbexception.aspx
最后,如果您在屏幕截图中注意到,错误对话框中包含“在线搜索更多帮助”的链接。这通常会将您带到需要修改代码的位置。
答案 3 :(得分:2)
您可以使用Application_Error
文件中的Global.asax
事件处理程序来捕获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
链接,您将获得调用堆栈,内部异常(如果有)以及任何其他有助于您解决的信息这个问题。
答案 4 :(得分: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)