2012-03-26 5 views
3

Ich führe eine Datenbanktransaktion mit ADO und VBScript in einer klassischen ASP-Seite, die mehrere Aufrufe an Execute-Methode des Verbindungsobjekts umfasst (d. H. conn.Execute). Ich habe festgestellt, dass ich 'On Error Resume Next' oben auf meiner Seite festlegen muss, so dass, wenn einer der Transaktionsaufrufe (d. H. Conn.Execute) fehlschlägt, dann kann ich es mit Rollback-Code folgen. Kann ich eine ADO-Transaktion ausführen, auch wenn der Fehlermodus 'On Error GoTo 0' statt 'On Error Resume Next' auf meiner klassischen ASP-Seite ist? Beispielcode zum Zurücksetzen der Transaktion lautet wie folgt.Welcher Fehlermodus wird beim Ausführen einer ADO-Transaktion im klassischen ASP verwendet?

'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 

Antwort

3

Interessante Frage! Normalerweise mache ich keine Datenbanktransaktionen von klassischen ASP, also bin ich nicht sicher, dass conn.Errors Fehler vor dem ASP-Skript abfangen wird. Aber man kann zumindest versuchen ...

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

Andernfalls kann es Ihnen helfen, zu wissen, dass On Error Resume Next nur im aktuellen Bereich wirksam ist. (siehe Code unten)

<% 
    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 


%>