Как правильно сообщать / обрабатывать классические ошибки страницы ASP и ошибки базы данных - PullRequest
1 голос
/ 21 декабря 2011

Я пытался создать путь обработки ошибок для нашего классического сайта ASP.Я искал информацию в течение 3 часов в настоящее время и не нашел много даже здесь о переполнении стека.Так что, если вы можете указать мне на дубликат великого ... Я не смог найти ничего, хотя оно должно существовать.

Мой план следующий ...

  1. Есть правильная ошибкаобработка в хранимых процедурах.Любые возникающие ошибки вставляются в таблицу ошибок и также возвращаются обратно в приложение.
  2. Установите на странице "При возобновлении ошибки далее".Затем проверьте коллекцию connection.errors на наличие ошибок.А также свойство Server.GetLastError ().
  3. Если есть перенаправление на страницу для отображения информации о безопасной ошибке и вставки другой записи в другую таблицу базы данных, чтобы связать имя страницы, где произошла ошибка, с уже существующей ошибкой базы данных в таблице базы данных, упомянутой выше дляпоследующие цели отладки.

Я создал следующую страницу, чтобы начать тестирование.Однако это не работает.

Dim cmd
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandType = adCmdStoredProc

on error resume next

cmd.CommandText = "spReturnDBException"
cmd.CommandTimeout = 30 ' 2 minutes
cmd.Execute


dim objErr
set objErr = Server.GetLastError()

if objError.ASPCode <> 0 then

    response.write("ASPCode=" & objErr.ASPCode)
    response.write("")
    response.write("ASPDescription=" & objErr.ASPDescription)
    response.write("")
    response.write("Category=" & objErr.Category)
    response.write("")
    response.write("Column=" & objErr.Column)
    response.write("")
    response.write("Description=" & objErr.Description)
    response.write("")
    response.write("File=" & objErr.File)
    response.write("")
    response.write("Line=" & objErr.Line)
    response.write("")
    response.write("Number=" & objErr.Number)
    response.write("")
    response.write("Source=" & objErr.Source)

else 
    response.write("There's nothing wrong.")
end if



Dim objErr2
for each objErr2 in objConn.Errors
  response.write("<p>")
  response.write("Description: ")
  response.write(objErr2.Description & "<br />")
  response.write("Help context: ")
  response.write(objErr2.HelpContext & "<br />")
  response.write("Help file: ")
  response.write(objErr2.HelpFile & "<br />")
  response.write("Native error: ")
  response.write(objErr2.NativeError & "<br />")
  response.write("Error number: ")
  response.write(objErr2.Number & "<br />")
  response.write("Error source: ")
  response.write(objErr2.Source & "<br />")
  response.write("SQL state: ")
  response.write(objErr2.SQLState & "<br />")
  response.write("</p>")
next

Free(cmd)
Free(con)

В хранимой процедуре я просто RAISERROR (N'Lets выдает ошибку, потому что я хочу! ', 17, 0);

Выход Iполучить каждый раз следующим образом ...

ASPCode = ASPDescription = Категория = Столбец = -1Description = Файл = Строка = 0Number = 0Source = Описание: Контекст справки: Файл справки: Собственная ошибка: Номер ошибки: Источник ошибки: Состояние SQL:

Почему я не получаю никакой информации об ошибке в цикле conn.Errors?

Решено.

Я использовал другой объект подключения для цикла, которыйпроходит через соединение. Ошибки ... ошибка копирования и вставки.

Однако, на заметку ... Мне было чрезвычайно трудно найти информацию о том, как даже делать то, что я до сих пор.

1 Ответ

0 голосов
/ 22 декабря 2011

вот некоторые дополнительные ресурсы:

некоторые общие темы: http://social.msdn.microsoft.com/search/en-US?query=Server.GetLastError%28%29&refinement=89

конкретный пример: http://support.microsoft.com/kb/224070

...