2011-11-04 47 views
3

我正在做一些ASP 3.0的工作,一直沒能把它弄下來。如果存在語法錯誤,ASP將正確地中斷(並返回500錯誤),但如果我(有意)編寫了錯誤的sql查詢,然後執行查詢,則只會將返回的SQL錯誤直接打印在HTML上,而不是斷。這將是代碼(只需重新編寫sql)。另請注意,這不是函數的一部分。它就在頁面代碼中。在ASP 3.0上捕獲SQL錯誤(經典),並返回一個特定的HttpStatus

set cn = server.createobject("ADODB.Connection") 
cn.open sConn 

sql= "select thiscolumndoesnotexist from table1 " 

set rs01 = server.createobject("ADODB.Recordset") 
rs01.Open sql, cn, 0 
%> 

現在,我敢肯定,「在錯誤繼續下一步」不活躍,因爲如果我打破ASP語法的頁面,它會打破的時候了。所以我試圖做這樣的事情

On Error GoTo ErrorControl 

code here.. 

ErrorControl: 
Response.Status "500 You broke it" 
Resume NExt 

但隨後,由於On Error GoTo ErrorControl的分頁符,就在「ErrorControl」開始。就好像它不支持命名的錯誤處理程序一樣。

我也嘗試設置On Error Resume Next然後var error = Server.GetLastError(),但是,它看起來好像沒有錯誤。我想回想一下,讀取Server.GetLastError只會在沒有輸出發送到客戶端的情況下工作(這是我的情況,因爲它是一個HTML輸出,並且在錯誤發生時,一半的文檔已經發送) 。

任何想法?任何幫助是極大的讚賞。謝謝。

+0

我不相信serverside VBscript支持GOTO語句。這可能有助於http://www.aspmessageboard.com/showthread.php?t=20090 – Dee

回答

2

就好像它不支持命名錯誤處理程序一樣。

是的,因爲它沒有。

你需要做的是打開緩衝。請在IIS管理器的應用程序級別打開它,或者在將ASP文件中的任何內容(靜態或動態)發送到客戶端之前使用Response.Buffer = True

+0

嗨安東尼。感謝你的回答。就像我說的,我對asp經典並不熟悉,我讀過一篇文章,他們特別提到(甚至有代碼示例)命名錯誤處理。我手邊沒有URL,但可以稍後提供。我認爲它支持函數,但不支持獨立代碼? – GR7

+0

和你的建議,打開緩衝,將使它的工作方式,我有它嗎?或者是爲了讓我能夠使用Server.GetLastError()? – GR7

+0

@silverCORE:錯誤轉到SomeLabel在VBScript的任何地方都不被支持,或許您正在考慮的文章是a)錯誤的(它發生)或b)實際上是關於支持它的VBA或VB6。通過啓用緩衝,腳本引擎可以完全放棄當前的響應輸出,並將其替換爲任何可以響應500.100錯誤的配置。你不需要關心Server.GetLastError等 – AnthonyWJones