Какой режим ошибок использовать при выполнении транзакции ADO в классическом ASP? - PullRequest
3 голосов
/ 26 марта 2012

Я выполняю транзакцию базы данных с использованием ADO и VBScript на классической странице ASP, которая включает в себя несколько вызовов метода Execute объекта подключения (т. Е. conn.Execute ). Я обнаружил, что мне нужно установить «On Error Resume Next» в верхней части моей страницы, чтобы при сбое любого из вызовов транзакции (т.е. conn.Execute), я мог следовать за ним с кодом отката. Могу ли я выполнить транзакцию ADO, даже если в моей классической странице ASP режим ошибки «В случае ошибки Перейти к 0», а не «В случае возобновления ошибки далее»? Пример кода для отката транзакции приведен ниже.

'Rollback transaction if a previous conn.Execute fails
if err.Number <> 0 then
    if tranCount = 1 then
       conn.RollbackTran
       tranCount = 0
    end if
end if

1 Ответ

3 голосов
/ 26 марта 2012

Интересный вопрос! Я обычно не выполняю транзакции базы данных из классического ASP, поэтому я не уверен, что conn.Errors будет перехватывать ошибки перед ASP-скриптом. Но ты можешь хотя бы попробовать ...

IF conn.Errors.Count > 0 THEN
    response.write "whoops"
END IF

В противном случае это может помочь вам узнать, что On Error Resume Next действует только в текущей области. (см. код ниже)

<%
    response.write "start"
    BadFunction()
    response.write "middle"  '//<--- This will be printed

    dim b : b = 8 / 0  '//Division by zero

    response.write "end"    '//<-- This will NOT be printed!




    Function BadFunction()
        On Error Resume Next
        dim a : a = 9 / 0  '//Division by zero

        BadFunction = a
    End function


%>
...