Ловить ошибку SQL в ASP 3.0 (classic) и возвращать определенный HttpStatus - PullRequest
3 голосов
/ 04 ноября 2011

Я делаю некоторую работу над ASP 3.0 и не смог разобраться в этом. ASP корректно сломается (и вернет ошибку 500), если есть синтаксическая ошибка, но если я (намеренно) напишу неверный SQL-запрос, а затем выполню запрос, он просто выведет возвращенную ошибку SQL прямо в HTML, а не ломка. Это был бы код (просто переписал 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 Ответ

2 голосов
/ 04 ноября 2011

Как будто он не поддерживает именованный обработчик ошибок.

Ну да, потому что это не так.

Что вам нужно сделать, это включить буферизацию,Либо включите его на уровне приложения в диспетчере IIS, либо используйте Response.Buffer = True до того, как какое-либо содержимое файла ASP (статическое или динамическое) будет отправлено клиенту.

...