最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 網站開發 > ASPnet >
  • asp.net教程之ASP錯誤處理

  • 2017-06-11 20:20 來源:未知
簡單介紹
asp是很簡單的,以至于許多的研發者不會去思考錯誤處理。錯誤處理能夠讓您的應用程式更加合理。我看到過很多個用asp編寫的商業網站,大多數都忽略了錯誤處理。
錯誤的類型
有三種主要的錯誤類型:
編譯錯誤:
這種錯誤出現一般都是代碼的語法問題。因為編譯錯誤而導致辭asp停止運行。
運行錯誤
這個錯誤是發生在您準備運行asp時的。例如:假如您試圖給一個變量賦值,但是卻超出了該變量允許的范圍。
邏輯錯誤
邏輯錯誤是最難被發現的,這種錯誤經常是一種結構錯誤,電腦是發現不了的。這就需要我們徹頭徹尾地檢查我們的代碼。
因為編譯錯誤一般是和邏輯錯誤一起發生的,一般都能顯示出來,所以我們擔心的就只是運行錯誤。他都終止asp的運行,而且給用戶丟下一堆很不友好的文字。
那么我們要怎樣處理運行錯誤呢!?我們先來看看,asp唯一提供給我們的錯誤命令---on error resume next(這里提醒一下初學者,在asp中只有on error resume next語句,沒有on error resume goto語句)
假如您不使用on error resume next語句的話,一切運行錯誤都會發生,這個是致命的,那么就會有一段錯誤代碼“展現”給用戶,而且asp程式也會停止。

下面就是個錯誤代碼:


microsoft ole db provider for odbc drivers error 80004005
[microsoft][odbc driver manager] data source name not found and no default driver specified
/test.asp, line 60


當我們在程式最上面使用on error resume next語句時,任何的錯誤都會被忽略,程式會自動執行下一條語句。這樣程式就會完全執行,出錯后用戶也不會看到出錯信息。但是這樣也有不好的地方,那就是假如程式沒有按照您想像的執行的話,您就很難找到到底是哪里出了問題,所以您就得在必要的地方對錯誤進行處理。
處理錯誤
在asp中,處理錯誤的最好的辦法就是在程式最底端放上代碼來處理錯誤。我也推薦在每個asp程式都使用緩沖區。這樣的話,假如錯誤發生,頁面就會停止,頁面內容也會被清除,這樣用戶就不會看到錯誤信息,對您們的抱怨也就少了!下面是個例子:
<%@ language="vbscript" %>
<% 配置buffer為true
response.buffer = true
開始錯誤處理
on error resume next
%>
<% 錯誤處理
if err.number <> 0 then
清除頁面
response.clear
顯示錯誤信息給用戶
%>
<html>
<head>
<title></title>
</head>
<body bgcolor="#c0c0c0">
<font face="arial">an error occurred in the execution of this asp page<br>
please report the following information to the support desk<p>
<b>page error object</b><br>
錯誤 number: <%= err.number %><br>
錯誤信息: <%= err.description %><br>
出錯文檔: <%= err.source %><br>
出錯行: <%= err.line %><br>
</font>
</body>
</html>

<%end if%>


您們上面看到了,我首先配置on error resume next ,這樣出現錯誤就不會影響程式的執行。

錯誤處理和數據庫
在錯誤處理中加入數據庫的執行是很復雜的。假若我們有一個程式,有很多的命令去向數據庫中添加記錄,假如insert/update在程式的最底部執行,假如我們前面又錯誤發生,那就完了!我們就會向數據庫中添加了一個錯誤的信息。因為我們用了on error resume next 一切的錯誤都被忽略了!即使前面出錯,程式依舊會向數據庫中添加數據的。
為避免這種情況,我們就先得做些手腳,正確處理的方法如下:

if err.number = 0 and objconnection.errors.count = 0 then

這里才能執行語句,因為沒有錯誤
set rstresults = dbdata.execute(txtsql)

end if



更多高級的處理辦法
當一個錯誤發生時,您們也能夠顯示更多的錯誤信息。下面是同時處理數據庫和頁面錯誤的例子,有了他我們一下就能發現我們程式中的任何錯誤。(由于有些地方我覺得英文更能說時問題,所以沒有翻譯)。
<%
if err.number <> 0 then
response.clear
select case err.number
case 8 指定錯誤的number
在這里處理自定義錯誤

case else 一般錯誤

if isobject(objconnection) then
if objconnection.errors.count > 0 then
%>

<b>database connection object</b>

<% for intloop = 0 to objconnection.errors.count - 1 %>

error no: <%= objconnection.errors(intloop).number %><br>
description: <%= objconnection.errors(intloop).description %><br>
source: <%= objconnection.errors(intloop).source %><br>
sqlstate: <%= objconnection.errors(intloop).sqlstate %><br>
nativeerror: <%= objconnection.errors(intloop).nativeerror %><p>

<% next
end if

end if
if err.number <> 0 then
%>

<b>page error object</b><br>
error number <%= err.number %><br>
error description <%= err.description %><br>
source <%= err.source %><br>
linenumber <%= err.line %><p>

<% end if
end select
end if
%>


上面的例子讓我們一下了處理了很多在數據庫中出現的問題,這個在我們日常編程也是常用的!我們也應該看到那個select case 語句,他能讓我們來處理特定的錯誤。
redirect 和錯誤處理
有一點我們就當注意一下,就是我們常用到的redirect對象,假如一個頁面中出現了redirect對象,那么錯誤處理就失去了意義。所以在轉向之前我們還得處理一下,如下:

if err.number = 0 and objconnection.errors.count = 0 then


response.clear
response.redirect ?lt;url here>?

end if



把代碼變得更整齊
為了讓代碼變得更整齊,首先把錯誤處理的文檔放在一個包含文檔中。這樣您就能夠在任何文檔中使用他。這樣修改也方便。
在您程式的最上方加入(當然在語言聲明之后)on error resume next語句。
在您執行sql以前進行錯誤檢查。
使用redirect以前也要進行錯誤處理。
讓您處理錯誤的包含文檔在代碼的最上面
pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
佳木斯卖鱼赚钱 智富销销乐赚钱 下载全民捕鱼赢话费 qq麻将网页版 专业打假太赚钱了 做pua赚钱吗 大众麻将翻倍规则 趣步App可以赚钱吗 2017娃娃机赚钱