ASP.NET中的異常處理
上面已經排除了服務器中存在的一些故障,接下來要處理的就是程序當中存在的一些錯誤。通常把代碼中存在的錯誤叫異常。本節(jié)主要介紹如何處理ASP.NET程序中的異常。
調試異常是開發(fā)功能完善的ASP.NET應用程序的重要一步。若要調試未處理的ASP.NET異常,則需確保調試器能夠在發(fā)生這些異常時停止。ASP.NET運行庫具有一個頂級異常處理程序,因此默認情況下,調試器從不在發(fā)生未處理的異常時中斷。若要通知調試器在發(fā)生異常時中斷,必須轉到"異常"對話框,然后在該對話框內選中發(fā)生異常名稱后的復選框,如圖14.11所示。
如果已啟用"僅我的代碼",則在系統代碼(如NET Framework方法)中發(fā)生異常時,"發(fā)生以下異常時中斷:引發(fā)"選項不會導致調試器立即中斷。執(zhí)行將繼續(xù),直至調試器命中用戶的代碼,然后調試器中斷。這意味著不必在發(fā)生異常后逐句通過系統代碼。
|
圖14.11 "異常"對話框 |
"僅我的代碼"向用戶提供了另一個可能更有用的選項:"發(fā)生以下異常時中斷:用戶未處理的"。如果為異常選擇此設置,則調試器會將用戶代碼中斷執(zhí)行,但是僅當異常沒有被用戶代碼捕獲和處理時才這樣做。此設置實質上使頂級ASP.NET異常處理程序不起作用,因為該處理程序在非用戶代碼中。
啟用ASP.NET異常調試和"僅我的代碼"
如果要使用"用戶未處理的"設置,則必須啟用"僅我的代碼",方法如下:
(1)從"調試"菜單中選擇"異常"命令,打開"異常"對話框。
(2)在"公共語言運行庫異常"行上選擇"引發(fā)"或"用戶未處理的"命令,如圖14.12所示。
|
圖14.12 設置"用戶未處理"的異常 |
ASP.NET異常處理的最佳方法
在可能引發(fā)異常的代碼周圍使用try…catch…finally塊。例如,如果應用程序調用XML Web Services或直接調用SQL Server,則應該將該代碼置于try…catch塊中,因為此過程中可能會發(fā)生大量異常。
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從基礎入門到 項目實戰(zhàn)\Instances\14\01\Default.aspx.cs:行號 22
|