asp.net的異常處理機制


    程序開發中,數據流按照一定的規律進行傳輸,如果用戶和程序之間的交互完全按照預定的效果運行,程序不會出現問題。可以假設所處理的數據都符合要求,通過界面作格式判定,所有資源都正確,但是爲了系統的安全,需要處理存在的隱患,不能對數據安全抱有理想化的想法。
    在ASP.NET中,錯誤處理分爲兩個層面:頁面輸入信息驗證、CLR提供的結構化錯誤處理機制。在頁面輸入信息判斷中,可以採用JavaScript、VBScript等腳本進行判斷,也可以使用.NET 環境下帶有的Validation和正則表達式的方式將信息在提交執行處理前,進行格式判斷。格式判斷包括:網絡地址、電子信箱、輸入字符串長短和輸入信息的數據類型的判斷等。
    結構化異常處理是CLR的基礎部分,具有以下特點:可以跨語言,異常可以在一種語言中引發,在另外一種語言中捕捉處理;分層處理,一個異常可以包括另外一個異常,這意味着系統可以捕獲底層對象(如數據層和業務層)的異常,引發自己的異常,包含有底層對象的異常。這樣可以將異常進行細緻分類,使得異常更容易處理。 
    結構化異常處理,一般要使用3部分代碼。 
(1)Try:是程序中可能出現錯誤的操作部分。
(2)Catch:是用來處理各種錯誤的部分(可以有多個)。必須正確排列捕獲異常的Catch子句,範圍小的Exception放在前面的Catch。即如果Exception之間存在繼承關係,就應把子類的Exception放在前面的Catch子句中。
(3)Finally 塊的代碼用來清理資源或執行要在Try塊末尾執行的其他操作(可以省略)。無論是否產生異常,Finally塊都會執行。
    結構化異常處理
    異常是在程序設計中無法避免的錯誤,設計的程序必須能夠處理所有可能出現的錯誤。所以要全面考慮異常處理,將一切可能出現異常的代碼都進行try的捕捉,然後建立自己的異常處理機制,按照不同的異常情況進行分類處理。
    異常產生的時候,需要知道是什麼原因造成的錯誤以及錯誤的相關信息。根據實際情況拋出具體類型的異常,然後建立捕捉機制,捕捉到異常時做出具體的處理。在編寫代碼過程中,可以使用系統已定義的相關異常類以及自定義的異常類來實例化並拋出需要的異常。如一個不可能實現的接口,可以拋出System.NotSupportedExceptiion的異常來告訴接口的調用者。
    在處理異常的時候,應該將可處理的具體異常分別在catch 塊中作出相應處理,否則程序將終止運行。針對每一種異常,以不同方式處理,避免對所有異常做出一樣的處理。並且在異常產生時,給用戶一個友好的提示(最終用戶對系統異常的具體內容是不明白的,這就需要給出相關的信息提示和解決方案,或告訴聯繫管理員等),並在可能的情況下給用戶提供選擇(確定和取消),讓用戶來決定系統的運行方向。同時,程序中要將異常做日誌記錄。不是所有異常都是必須記錄的,例如一些可捕捉並且已經安排程序進行處理的異常就不需要記錄它。

 


    可以採取如下形式記錄異常:
    在文件中記錄異常。便於技術人員查看所發生的異常,從而日後對程序進行改進。
    在數據庫中記錄異常。數據庫支持查詢,這樣在後期就能夠對異常進行分類查詢等操作,便於查看與管理。
    在Eventlog中記錄異常。能夠遠程操作,方便系統管理員監控所有計算機的異常。
除了可預料到的異常外,還有未預料到的異常。這類異常是無法進行管理的,發生後將系統程序轉移到特定的錯誤頁面,提示用戶系統出錯,結束程序。做好日誌能爲解決和調試問題帶來很多方便。要避免使用了Try-Catch但沒有處理異常的情況,否則就相當於給異常放行(這種情況還不如根本不去捕獲)。
    異常處理,還應該注意在Finally塊中釋放相關資源、還原相關設置信息等收尾工作。基本程序結構如下:
try
{
int&n

bsp;x = 123/0; //會拋出一個除數爲0的異常
}
catch
{
// ... //在這裏捕捉到這個異常,然後進行相關處理
}
finally
{
// ... //在這裏做最後的清理或是其他工作
}
    本章的異常處理是針對容易出現錯誤的地方(操作數據庫)應用此技術,但是隻是捕捉到SQL異常後,給用戶一個錯誤提示,並沒有進一步作程序的處理。

C#中常見異常類
Exception:所有異常對象的基類。
SystemException:運行時產生的所有錯誤的基類。
IndexOutOfRangeException:當一個數組的下標超出範圍時運行時引發。
NullReferenceException:當一個空對象被引用時運行時引發。
InvalidOperationException:當對方法的調用對對象的當前狀態無效時,由某些方法引發。
ArgumentException:所有參數異常的基類。
ArgumentNullException:在參數爲空(不允許)的情況下,由方法引發。
ArgumentOutOfRangeException:當參數不在一個給定範圍之內時,由方法引發。
InteropException:目標在或發生在CLR外面環境中的異常的基類。
ComException:包含COM類的HRESULT信息的異常。
SEHException:封裝Win32結構異常處理信息的異常。
SqlException:封裝了SQL操作異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章