是不是你經(jīng)常在aspx對頁面出現(xiàn)的錯誤措手不及,的確,我也是,特別是當彈出一大段的東西,一個字,煩,有些錯誤由于解釋的太專業(yè)或者E文不夠好,不能完全理解,這里我就隨便說說應(yīng)用程序跟蹤和錯誤處理吧,希望對您有所幫助。
ASP.net應(yīng)用程序可能出現(xiàn)的4中主要錯誤是:
1、配置錯誤--由web.config或machine.config文件中的問題造成的錯誤; 2、解析器錯誤--是asp.net頁面中的錯誤語法造成的錯誤; 3、編譯錯誤----是visual basic編譯器引發(fā)的錯誤; 4、運行期錯誤---當頁面實際執(zhí)行時檢測到的錯誤;
如果需要查看詳細的錯誤信息,需要禁用自定義錯誤或者將次模式設(shè)置為remoteonly,可以在machine.config或某個應(yīng)用程序的web.config文件中配置自定義錯誤的模式,例如:
<configuration> <system.web> <customErrors mode="Off"> </system.web> </configuration>
當自定義模式為off時,總是顯示詳細的錯誤信息,甚至在遠程機器上顯示。 開啟asp.net頁面的調(diào)試模式有兩種辦法,可以在一個web.config文件中為一個目錄中的啟用調(diào)試模式或者使用page指令啟動。
<%@ page debug="true"%>
或者把上面的web.config文件放在應(yīng)用程序的根目錄中。
頁面級錯誤處理
下面我寫寫如何使用visual try...catch語句包圍錯誤代碼中的危險語句,下面看看使用page_error子例程捕捉和相應(yīng)頁面中發(fā)生的未處理的錯誤。 1:try.............catch捕捉異常。
<%@ Page Language="VB" %> <%@ import Namespace="system.data" %> <%@ import Namespace="system.data.oledb" %> <script runat="server">
sub page_load(s as object ,e as eventargs) dim conn as oledbconnection dim strselect as string dim ascmd as oledbcommand conn = new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=d:\web\web\net\data\db.mdb") strselect = "select * from site_n" ascmd= new oledbcommand (strselect, conn) try conn.open() txt.datasource = ascmd.executereader() txt.databind() conn.close() catch response.write("we are sorry,we are experiencing technical problem...") end try end sub </script> <html><head><title></title></head><body> <asp:datagrid id="txt" runat="server" /> </body></html>
這里,我們try............catch............end try了我們認為有可能出現(xiàn)問題的代碼。 如果,我把這個數(shù)據(jù)庫的表名改稱不存在的,就在瀏覽器出現(xiàn)如下錯誤(我們在代碼中定義的):
we are sorry,we are experiencing technical problem...
這樣的錯誤是不是太簡單了?ok,來點詳細的吧,如果需要在catch塊中獲取錯誤信息,可以捕捉引發(fā)該錯誤的異常,在.net框架中,異常是用exception(除外, 例外, 反對, 異議)類的實例代表的,這個類包括一下屬性:
1、message---------返回一個代表錯誤消息的字符串; 2、source--返回一個代表造成此錯誤發(fā)生前調(diào)用的方法的字符串; 3、stacktrace---返回一個代表錯誤發(fā)生前調(diào)用的方法的字符串; 4、targetsite-----返回一個代表造成此錯誤的方法的methodbase的對象;
下面我就改改上面給出的例子,把上面的catch后面到end try 改為:
response.write("the file is not right server:<br/>") response.write("<li>message:" & objexception.message) response.write("<li>source:" & objexception.source) response.write("<li>stack trace:" & objexception.stacktrace) response.write("<li>target site:" & objexception.targetsite.name)
還是故意把數(shù)據(jù)庫的表的名稱改錯。 出現(xiàn)的錯誤:
the file is not right server:
message:Microsoft Jet 數(shù)據(jù)庫引擎找不到輸入表或查詢 'site_ns'。 確定它是否存在,以及它的名稱的拼寫是否正確。 source:Microsoft JET Database Engine stack trace: at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteReader() at ASP.p591_aspx.page_load(Object s, EventArgs e) target site:ExecuteCommandTextErrorHandling
返回一個很詳盡的錯誤描述。
2:捕捉頁面未處理的異常
只需加上page_error子例程就行
sub page_error response.write"sorry" end sub
應(yīng)用程序級錯誤保護
其實是獲取瀏覽器的statuscode的值,然后重定向。 web.config:
<configuration> <system.web> <customErrors mode="On" defaultRedirect="apperror.aspx" > <error statusCode="404" redirect="notfound.aspx" /> </customErrors> </system.web> </configuration>
當文件不存在的時候就重定向到nofound.aspx,總比asp里面好用了吧,呵呵。
另外,可以跟蹤和監(jiān)視應(yīng)用程序,獲取進程信息,記錄事件,使用調(diào)試器,逐步執(zhí)行等n多的錯誤機制調(diào)整,當然,這些都是比較高級的技術(shù)了,留給我以后慢慢的寫吧,這里不再累贅。
下面我就來實例了,不再說具體的理論了,基本還是上面講到過的技術(shù)。當然,這只是一個入門級的教程,代碼等僅僅可以作為初學(xué)者的參考,和真正的.net相差甚遠,但這點基礎(chǔ)不掌握牢固的話還談什么高級技巧?
出處:藍色理想
責(zé)任編輯:moby
上一頁 將數(shù)據(jù)綁定到web控件 下一頁
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|