基礎知識
程序開發中數據流按照一定的規律進行傳輸如果用戶和程序之間的交互完全按照預定的效果運行程序不會出現問題可以假設所處理的數據都符合要求通過界面作格式判定所有資源都正確但是為了系統的安全需要處理存在的隱患不能對數據安全抱有理想化的想法
在ASPNET中錯誤處理分為兩個層面頁面輸入信息驗證CLR提供的結構化錯誤處理機制
在頁面輸入信息判斷中可以采用JavaScriptVBScript等腳本進行判斷也可以使用NET 環境下帶有的Validation和正則表達式的方式將信息在提交執行處理前進行格式判斷格式判斷包括網絡地址電子信箱輸入字符串長短和輸入信息的數據類型的判斷等
結構化異常處理是CLR的基礎部分具有以下特點可以跨語言異常可以在一種語言中引發在另外一種語言中捕捉處理分層處理一個異常可以包括另外一個異常這意味著系統可以捕獲底層對象(如數據層和業務層)的異常引發自己的異常包含有底層對象的異常這樣可以將異常進行細致分類使得異常更容易處理
結構化異常處理一般要使用部分代碼
()Try是程序中可能出現錯誤的操作部分
()Catch是用來處理各種錯誤的部分(可以有多個)必須正確排列捕獲異常的Catch子句范圍小的Exception放在前面的Catch即如果Exception之間存在繼承關系就應把子類的Exception放在前面的Catch子句中
()Finally 塊的代碼用來清理資源或執行要在Try塊末尾執行的其他操作(可以省略)無論是否產生異常Finally塊都會執行
結構化異常處理
異常是在程序設計中無法避免的錯誤設計的程序必須能夠處理所有可能出現的錯誤所以要全面考慮異常處理將一切可能出現異常的代碼都進行try的捕捉然後建立自己的異常處理機制按照不同的異常情況進行分類處理
異常產生的時候需要知道是什麼原因造成的錯誤以及錯誤的相關信息根據實際情況拋出具體類型的異常然後建立捕捉機制捕捉到異常時做出具體的處理在編寫代碼過程中可以使用系統已定義的相關異常類以及自定義的異常類來實例化並拋出需要的異常如一個不可能實現的接口可以拋出SystemNotSupportedExceptiion的異常來告訴接口的調用者
在處理異常的時候應該將可處理的具體異常分別在catch 塊中作出相應處理否則程序將終止運行針對每一種異常以不同方式處理避免對所有異常做出一樣的處理並且在異常產生時給用戶一個友好的提示(最終用戶對系統異常的具體內容是不明白的這就需要給出相關的信息提示和解決方案或告訴聯系管理員等)並在可能的情況下給用戶提供選擇(確定和取消)讓用戶來決定系統的運行方向同時程序中要將異常做日志記錄不是所有異常都是必須記錄的例如一些可捕捉並且已經安排程序進行處理的異常就不需要記錄它
可以采取如下形式記錄異常
在文件中記錄異常便於技術人員查看所發生的異常從而日後對程序進行改進
在數據庫中記錄異常數據庫支持查詢這樣在後期就能夠對異常進行分類查詢等操作便於查看與管理
在Eventlog中記錄異常能夠遠程操作方便系統管理員監控所有計算機的異常
除了可預料到的異常外還有未預料到的異常這類異常是無法進行管理的發生後將系統程序轉移到特定的錯誤頁面提示用戶系統出錯結束程序做好日志能為解決和調試問題帶來很多方便要避免使用了TryCatch但沒有處理異常的情況否則就相當於給異常放行(這種情況還不如根本不去捕獲)
異常處理還應該注意在Finally塊中釋放相關資源還原相關設置信息等收尾工作基本程序結構如下
try
{
int x = /; //會拋出一個除數為的異常
}
catch
{
// //在這裡捕捉到這個異常然後進行相關處理
}
finally
{
// //在這裡做最後的清理或是其他工作
}
本章的異常處理是針對容易出現錯誤的地方(操作數據庫)應用此技術但是只是捕捉到SQL異常後給用戶一個錯誤提示並沒有進一步作程序的處理
C#中常見異常類
Exception所有異常對象的基類
SystemException運行時產生的所有錯誤的基類
IndexOutOfRangeException當一個數組的下標超出范圍時運行時引發
NullReferenceException當一個空對象被引用時運行時引發
InvalidOperationException當對方法的調用對對象的當前狀態無效時由某些方法引發
ArgumentException所有參數異常的基類
ArgumentNullException在參數為空(不允許)的情況下由方法引發
ArgumentOutOfRangeException當參數不在一個給定范圍之內時由方法引發
InteropException目標在或發生在CLR外面環境中的異常的基類
ComException包含COM類的HRESULT信息的異常
SEHException封裝Win結構異常處理信息的異常
SqlException封裝了SQL操作異常
From:http://tw.wingwit.com/Article/program/net/201311/13519.html