在经典的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语句吗?
答案 0 :(得分:0)
不要以为您可以在错误处理中检索sql语句,但是可以将其粘贴在变量中,例如lastSql = "SELECT * FROM ..."
,然后将该变量用于错误处理,因为它始终包含最后一个声明。