捕获ASP 3.0(经典)上的SQL错误并返回特定的HttpStatus
我正在做一些关于ASP 3.0的工作,但还没能记下来。如果出现语法错误,ASP将正确地中断(并返回500个错误),但是如果我(故意)编写了一个错误的sql查询,然后执行该查询,它将只在HTML上打印返回的sql错误,而不是中断。这就是代码(只是重新编写了sql)。还要注意,这不是函数的一部分。就在代码页上捕获ASP 3.0(经典)上的SQL错误并返回特定的HttpStatus,sql,error-handling,asp-classic,Sql,Error Handling,Asp Classic,我正在做一些关于ASP 3.0的工作,但还没能记下来。如果出现语法错误,ASP将正确地中断(并返回500个错误),但是如果我(故意)编写了一个错误的sql查询,然后执行该查询,它将只在HTML上打印返回的sql错误,而不是中断。这就是代码(只是重新编写了sql)。还要注意,这不是函数的一部分。就在代码页上 set cn = server.createobject("ADODB.Connection") cn.open sConn sql= "select thiscolumndoesnotex
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
%>
现在,我确定“On Error Resume Next(错误恢复下一步)”未处于活动状态,因为如果我使用ASP语法断开页面,它将立即断开。所以我试着做一些类似的事情
On Error GoTo ErrorControl
code here..
ErrorControl:
Response.Status "500 You broke it"
Resume NExt
但是,由于错误上的转到ErrorControl
,页面中断,就在“ErrorControl”开始的地方。好像它不支持命名的错误处理程序
我还尝试在错误恢复下一步设置,然后设置var Error=Server.GetLastError()
,但是,似乎没有错误。我想我记得读过这样一篇文章:Server.GetLastError只有在没有向客户机发送输出的情况下才起作用(这是我的情况,因为它是一个正在输出的HTML,在错误发生时,文档已经发送了一半)
有什么想法吗?非常感谢您的帮助。谢谢
好像它不支持命名的错误处理程序
嗯,是的,因为它没有
您需要做的是打开缓冲。在将ASP文件中的任何内容(静态或动态)发送到客户端之前,请在IIS管理器的应用程序级别打开它,或者使用Response.Buffer=True
。我认为服务器端VBscript不支持GOTO语句。这可能对你好安东尼有帮助。谢谢你的回答。正如我所说,我对asp classic不太熟悉,我确实读过一篇文章,其中他们特别提到了命名错误处理(甚至还有一个代码示例)。我手头没有URL,但可以稍后提供。我认为它支持函数,但不支持独立代码?你的建议是打开缓冲,这会让它像我现在的方式工作吗?或者是为了让我能够使用Server.GetLastError()?@silverCORE:On Error Goto SomeLabel
在VBScript中的任何地方都不受支持,也许您所想到的文章是a)完全错误(发生了),或者b)实际上是关于VBA或VB6的,而VBA或VB6确实支持它。通过打开缓冲,您可以允许脚本引擎完全放弃当前响应输出,并将其替换为确认响应500.100错误的内容。您不必担心Server.GetLastError等。