ASP.NET中的异常处理
上面已经排除了服务器中存在的一些故障,接下来要处理的就是程序当中存在的一些错误。通常把代码中存在的错误叫异常。本节主要介绍如何处理ASP.NET程序中的异常。
调试异常是开发功能完善的ASP.NET应用程序的重要一步。若要调试未处理的ASP.NET异常,则需确保调试器能够在发生这些异常时停止。ASP.NET运行库具有一个顶级异常处理程序,因此默认情况下,调试器从不在发生未处理的异常时中断。若要通知调试器在发生异常时中断,必须转到"异常"对话框,然后在该对话框内选中发生异常名称后的复选框,如图14.11所示。
如果已启用"仅我的代码",则在系统代码(如NET Framework方法)中发生异常时,"发生以下异常时中断:引发"选项不会导致调试器立即中断。执行将继续,直至调试器命中用户的代码,然后调试器中断。这意味着不必在发生异常后逐句通过系统代码。
|
图14.11 "异常"对话框 |
"仅我的代码"向用户提供了另一个可能更有用的选项:"发生以下异常时中断:用户未处理的"。如果为异常选择此设置,则调试器会将用户代码中断执行,但是仅当异常没有被用户代码捕获和处理时才这样做。此设置实质上使顶级ASP.NET异常处理程序不起作用,因为该处理程序在非用户代码中。
启用ASP.NET异常调试和"仅我的代码"
如果要使用"用户未处理的"设置,则必须启用"仅我的代码",方法如下:
(1)从"调试"菜单中选择"异常"命令,打开"异常"对话框。
(2)在"公共语言运行库异常"行上选择"引发"或"用户未处理的"命令,如图14.12所示。
|
图14.12 设置"用户未处理"的异常 |
ASP.NET异常处理的最佳方法
在可能引发异常的代码周围使用try…catch…finally块。例如,如果应用程序调用XML Web Services或直接调用SQL Server,则应该将该代码置于try…catch块中,因为此过程中可能会发生大量异常。
catch和finally一起使用的常见方式是:在try块中获取并使用资源,在catch块中处理异常情况,并在finally块中释放资源。
下面的代码演示捕捉异常,并作出相应处理。
- using System;
- using System.Data;
- using System.Configuration;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- using System.Data.SqlClient;
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- DataSet ds= new DataSet(); ;
- try
- {
- //读取XMLFile文件中的数据,并将数据信息绑定到表格控件中
- ds.ReadXml(Server.MapPath("~/XMLFile.xml"));
- this.GridView1.DataSource = ds.Tables["XML"].DefaultView;
- this.GridView1.DataBind();
- }
- catch( Exception ex)
- {
- //抛出异常
- Response.Write(ex);
- }
- finally
- {
- //释放资源
- ds.Dispose();
- }
- }
- }
- }
输出结果如下: - System.NullReferenceException: 未将对象引用
设置到对象的实例。 在 _Default.Page_Load(Object sender, EventArgs e) 位置 e:\Asp.net从基础入门到 项目实战\Instances\14\01\Default.aspx.cs:行号 22
|