错误对象的经典asp行号

时间:2019-04-17 21:24:43

标签: error-handling asp-classic

在经典的ASP脚本中,我有一堆SQL更新。如果存在sql错误,则由自定义500错误页面处理,该页面记录了

的值
    ' get the extended error information 
    Set ASPErr = Server.GetLastError() 

    strASPDesc = ASPErr.ASPDescription 
    strASPNumber = ASPErr.ASPCode 
    intASPLine = clng(ASPErr.Line) 
    intASPColumn = clng(ASPErr.Column) 
    strDesc = ASPErr.Description 
    strNumber = "0x" & Hex(ASPErr.Number) 
    strASPFile = ASPErr.File
    strERRline = ASPErr.Source

并将其登录到sql-table中。因此,很容易在出现错误的情况下进行调试。但是,如果执行了某些语句,而另一些则没有,这可能会使数据库不一致。

所以现在我将其包装在一个小袋中。

on error resume next
conn.beginTrans
do_transaction
if err.number=0 then
  conn.commitTrans
  response.write "OK"
else
  conn.rollbackTrans
  Response.write "Error # " & CStr(Err.Number) & " " & Err.Description & vbCrLf
  Response.write "Source: " & Err.Source & vbCrLf
end if
err.clear
on error goto 0

'here the actual transaction is done:
sub do_transaction
  set rs=conn.execute("SELECT ....")
  conn.execute("UPDATE ...")
  conn.execute("INSERT ...")
  conn.execute("DELETE ...")
end sub

如果出现错误,这会将整个事务回滚,但是现在我看不到是哪个语句导致了错误。 Err对象不包含行或列,Server.GetLastError()除了第78列外根本没有任何意义。

有什么办法获取导致错误的原因吗? 我可以从conn对象获取sql语句吗?

1 个答案:

答案 0 :(得分:0)

不要以为您可以在错误处理中检索sql语句,但是可以将其粘贴在变量中,例如lastSql = "SELECT * FROM ...",然后将该变量用于错误处理,因为它始终包含最后一个声明。