在ASP 3.0上捕获SQL错误(经典),并返回一个特定的HttpStatus

问题描述:

我正在做一些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

就好像它不支持命名错误处理程序一样。

是的,因为它没有。

你需要做的是打开缓冲。请在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