我在这里添加了这个答案,尽管我意识到这比第一次回答问题时要晚得多。我把答案放在这里,以防其他人免去我刚刚经历的麻烦。
重新安装 Windows 10 后,我的 ASP 页面上也出现此错误。以前在我的 localhost IIS 设置上,同一页面没有错误。但是 - 现在它做到了 - 出现以下错误:
Active Server Pages 错误“ASP 0115”意外错误 index.asp
外部对象中出现可捕获错误 (C0000005)。脚本无法继续运行。
我尝试了很多东西来尝试对其进行排序,例如:
- 再次重新安装 Windows 10
- 在新的 Windows 10 安装上重新安装 IIS
- 尝试各种版本的 MySQL 和 ODBC 连接器的组合
- 根据此页面上的答案之一检查 Windows 进程监视器中丢失的文件
- 使用应用程序池
- 使用许多版本的 Microsoft Visual C++ Redistributables
我的问题是 SQL 插入 - 当它运行时,我得到了错误。
这是它的精简版:
sql = ""
sql = sql & " INSERT INTO my_table ( "
sql = sql & " card_sender, "
sql = sql & " senders_email, "
sql = sql & " recipients_email, "
sql = sql & " card_body, "
sql = sql & " session_id, "
sql = sql & " replyID) VALUES ( "
sql = sql & " ?, "
sql = sql & " ?, "
sql = sql & " ?, "
sql = sql & " ?, "
sql = sql & " ?, "
sql = sql & " ?) "
Set stmt = Server.CreateObject("ADODB.Command")
stmt.ActiveConnection = oConn
stmt.Prepared = true
stmt.commandtext = sql
stmt.Parameters.Append stmt.CreateParameter("@001_card_sender", adVarChar, adParamInput, 255, card_sender)
stmt.Parameters.Append stmt.CreateParameter("@002_senders_email", adVarChar, adParamInput, 255, senders_email)
stmt.Parameters.Append stmt.CreateParameter("@003_recipients_email", adVarChar, adParamInput, 255, recipients_email)
stmt.Parameters.Append stmt.CreateParameter("@004_card_body", adLongVarChar, adParamInput, 256665, card_body)
stmt.Parameters.Append stmt.CreateParameter("@sessionsessionID", adVarChar, adParamInput, 255, session.sessionID)
stmt.Parameters.Append stmt.CreateParameter("@replyID", adVarChar, adParamInput, 255, session("replyID"))
stmt.Execute
Set stmt = Nothing
通过构建 SQL 并查找触发错误的行的过程,我发现此行导致了问题:
stmt.Parameters.Append stmt.CreateParameter("@replyID", adVarChar, adParamInput, 255, session("replyID"))
在我的示例中,session("replyID")
未设置该值,这触发了错误。
当我更改代码以检查是否设置了会话变量时,它解决了问题:
...
foo = session("replyID")
if foo = "" then foo = 1
...
stmt0003.Parameters.Append stmt0003.CreateParameter("@replyID", adVarChar, adParamInput, 255, foo)
更多测试证实,任何为空的变量都会发生错误,因此我必须为每个变量添加一个 if 语句,并在它为空时将其设置为某个值,以防止这些我不习惯出现的错误在同一台 PC 上以前安装的 Windows 10。
在花了大约一天的时间研究它之后,深入了解它是一种解脱。