跳到主要內容

[ASP] ASP錯誤處理

ASP是非常簡單的,以至於許多的開發者不會去思考錯誤處理。
錯誤處理能夠讓你的應用程式更加合理。
我看到過很多個用ASP編寫的商業網站,大多數都忽略 了錯誤處理。
錯誤的類型 有三種主要的錯誤類型:
1.編譯錯誤:   
 這種錯誤出現一般都是代碼的語法問題。因為編譯錯誤而導致辭ASP停止運行。
2.運行錯誤:
 這個錯誤是發生在你準備運行ASP時的。例如:如果你試圖給一個變數賦值,但是卻超出了該變數允許的範圍。
3.邏輯錯誤:
 邏輯錯誤是最難被發現的,這種錯誤經常是一種結構錯誤,電腦是發現不了的。這就需要我們徹頭徹尾地檢查我們的代碼。   

因為編譯錯誤一般是和邏輯錯誤一起發生的,一般都能顯示出來,所以我們擔心的就只是運行錯誤。
它都終止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" %
%Response.Buffer = True "設置buffer為True
On Error Resume Next "開始錯誤處理
%

%"錯誤處理
If Err.Number <> 0 Then
"清除頁面
Response.Clear
"顯示錯誤資訊給用戶
%
An error occurred in the execution of this ASP page
Please report the following information to the support desk

留言

這個網誌中的熱門文章

[WEB]連線 HTTPS 網站發生驗證失敗導致基礎連接已關閉

某支透過 WebClient 物件去呼叫第三方API的程式,突然有天無法使用 經過測試出現下列的錯誤 基礎連接已關閉: 傳送時發生未預期的錯誤。 InnerException : 驗證失敗,因為遠端群體已經關閉傳輸資料流。 原來是第三方的服務已經不支援 TLS 1.0 我方的程式是用.net Framework 4.0開發了 得強制讓webclient改用 TLS 1.1 或 TLS 1.2 感謝黑大提供解決方法 在程式中加入 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12  的設定就解決了這個問題 WebClient wc = new WebClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 參考資料:暗黑執行緒

[SQL] SQL依照你的排序條件 找出目前資料的前一筆與下一筆。 Find Pre and Next DataRows of current Datarow by your order condition

有時候需要用SQL找出前一筆跟後一筆資料 用SQL的TOP是沒有辦法做到 這個時候就可以這個語法 select * from ( SELECT TOP 1 * FROM [Article] where Poid<{CurrentPoid} order by CreateDate desc) t union select * from ( SELECT TOP 1 * FROM [[Article] where Poid>{CurrentPoid} order by CreateDate ASC) t2 找出目前PK id前一個與後一個的資料(依照想要排序順序) 那如果指示想要一個資料行呈現的話 可以改用下面的SQL語法 讓這兩筆資料join在同一筆 select Pre.*,Nex.* from (SELECT TOP 1 * ,1 tID FROM [dbo].[Article] where Poid<{CurrentPoid} order by CreateDate desc) Pre left join (SELECT TOP 1 * ,1 tID FROM [dbo].[Article] where Poid>{CurrentPoid} order by CreateDate ASC) Nex on Pre.tID=Nex.tID

[IIS]IIS - ASP.NET 網站基本優化設定 --筆記

運行 ASP.NET 基本上都是掛載在 IIS 上面,但 IIS 預設的設定,並不適合 24 小時不中斷的營運系統。 如果沒有適當的調整,可能會造成使用者的感受不佳,而你又偏偏不會遇到。 本篇將介紹 IIS 運行 ASP.NET 網站的基本優化設定。 應用程式集區 打開 IIS 管理員,到應用程式集區,選擇網站後,開啟進階設定: 1. 一般 (General) 佇列長度 (Queue Length) 預設值是  1000 ,當封包數量在同一時間到達該指定值,之後的 Request 都會變成 HTTP Status 503 Service Unavailable。 例:當有同時間有 1001 個 Request 一起送到 IIS,第 1001 個 Request 會直接回傳 503,不會進到 ASP.NET 處理。 也不是無限大就好,也是要看伺服器等級。 假設調成 10000,也真的有同時 10000 的量,可能會演變成  CUP High  的問題。 因此,這個欄位沒有建議值,網站封包量很大才有需要調整這個欄位。 啟動模式 (Start Mode) 預設值是  OnDemand ,當網站執行回收後,會等到第一個 Request 進來,IIS 才會把網站啟動。 所以第一個連上來的使用者會等到比較久的時間,ASP.NET 初始化完成後,使用者才會得到回應。 建議設定成  AlwaysRunning ,當網站執行回收後,IIS 就會直接啟動 ASP.NET。 2. 回收 (Recycling) 固定時間間隔 (Regular Time Interval) 預設值是  1740 ,也就是每隔 29 小時 IIS 就會把該網站重啟。 很可能重啟當下使用者正在操作,對於要 24 小時不中斷的系統來說,這真的是很不妥當的事情。 如果 ASP.NET 的 Session Mode 是用 InProc,網站重啟使用者就全被登出了。 建議設定成  0 ,也就是關閉定期重啟網站的設定。 如果網站真的需要定期重啟,可以在 特定時間 (Specific Times)  設定,固定每天哪些離峰時間做重啟的動作。 3. 快速失敗保護 (Rapid-Fail Protection) Enabled 預設值是