程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.Net之C#中的異常處理

ASP.Net之C#中的異常處理

編輯:關於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 x = 123/0; //會拋出一個除數為0的異常

}

catch

{

// ... //在這裡捕捉到這個異常,然後進行相關處理

}

finally

{

// ... //在這裡做最後的清理或是其他工作

}

本章的異常處理是針對容易出現錯誤的地方(操作數據庫)應用此技術,但是只是捕捉到SQL異常後,給用戶一個錯誤提示,並沒有進一步作程序的處理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved