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

时间:2011-11-04 15:54:58

标签: 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 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

但是,由于On Error GoTo ErrorControl,页面中断了“ErrorControl”开始的地方。好像它不支持命名的错误处理程序。

我还尝试设置On Error Resume Next然后设置var error = Server.GetLastError(),但似乎没有错误。我想我会记得读到Server.GetLastError只有在没有输出发送到客户端时才会起作用(这是我的情况,因为它是输出的HTML,并且在错误发生时,已经发送了一半的文档)

有什么想法吗?任何帮助是极大的赞赏。感谢。

1 个答案:

答案 0 :(得分:2)

  

好像它不支持命名的错误处理程序。

好吧,因为它没有。

您需要做的是打开缓冲。在IIS管理器中的应用程序级别打开它,或者在ASP文件中的任何内容(静态或动态)发送到客户端之前使用Response.Buffer = True