在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输出,并且在错误发生时,一半的文档已经发送) 。
任何想法?任何帮助是极大的赞赏。谢谢。
就好像它不支持命名错误处理程序一样。
是的,因为它没有。
你需要做的是打开缓冲。请在IIS管理器的应用程序级别打开它,或者在将ASP文件中的任何内容(静态或动态)发送到客户端之前使用Response.Buffer = True
。
嗨安东尼。感谢你的回答。就像我说的,我对asp经典并不熟悉,我读过一篇文章,他们特别提到(甚至有代码示例)命名错误处理。我手边没有URL,但可以稍后提供。我认为它支持函数,但不支持独立代码? – GR7
和你的建议,打开缓冲,将使它的工作方式,我有它吗?或者是为了让我能够使用Server.GetLastError()? – GR7
@silverCORE:错误转到SomeLabel在VBScript的任何地方都不被支持,或许您正在考虑的文章是a)错误的(它发生)或b)实际上是关于支持它的VBA或VB6。通过启用缓冲,脚本引擎可以完全放弃当前的响应输出,并将其替换为任何可以响应500.100错误的配置。你不需要关心Server.GetLastError等 – AnthonyWJones
我不相信serverside VBscript支持GOTO语句。这可能有助于http://www.aspmessageboard.com/showthread.php?t=20090 – Dee