万圣节崔丝塔娜手感:调试-- ASP.NET中的异常处理

来源:百度文库 编辑:偶看新闻 时间:2024/05/02 06:23:09

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块中释放资源。

下面的代码演示捕捉异常,并作出相应处理。

  1. using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Web;  
  5. using System.Web.Security;  
  6. using System.Web.UI;  
  7. using System.Web.UI.WebControls;  
  8. using System.Web.UI.WebControls.WebParts;  
  9. using System.Web.UI.HtmlControls;  
  10. using System.Data.SqlClient;  
  11. public partial class _Default : System.Web.UI.Page   
  12. {  
  13.     protected void Page_Load(object sender, EventArgs e)  
  14.     {  
  15.         if (!IsPostBack)  
  16.         {  
  17.             DataSet ds= new DataSet(); ;  
  18.             try  
  19.             {  
  20.                 //读取XMLFile文件中的数据,并将数据信息绑定到表格控件中  
  21.                 ds.ReadXml(Server.MapPath("~/XMLFile.xml"));  
  22.                 this.GridView1.DataSource = ds.Tables["XML"].DefaultView;  
  23.                 this.GridView1.DataBind();     
  24.             }  
  25.             catch( Exception  ex)  
  26.             {  
  27.                 //抛出异常  
  28.                 Response.Write(ex);   
  29.             }  
  30.             finally  
  31.             {  
  32.                 //释放资源  
  33.                 ds.Dispose();  
  34.             }  
  35.         }  
  36.     }  

输出结果如下:

  1. System.NullReferenceException: 未将对象引用
    设置到对象的实例。 在 _Default.Page_Load(Object 
    sender, EventArgs e) 位置 e:\Asp.net从基础入门到
    项目实战\Instances\14\01\Default.aspx.cs:行号 22