【问题标题】:Classic asp line number for err object错误对象的经典 asp 行号
【发布时间】:2019-04-17 21:24:43
【问题描述】:

在一个经典的 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 表中。因此在出现错误的情况下很容易调试。但是,如果执行了某些语句而其他语句未执行,这可能会导致数据库不一致。

所以现在我已经把它包装在一个子里了。

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 语句吗?

【问题讨论】:

    标签: error-handling asp-classic


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      • 2010-11-04
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多