【发布时间】: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