1

我在 ASP 中的旧网站开始生成此错误:

Microsoft Cursor Engine error '80040e21'
Multiple-step operation generated errors. Check each status value.

我最近没有改变任何东西 - 也许我的托管服务提供商做了改变,但错误指向这行代码:

rs.Open SQL, adoCon

我检查了:rs、adoCon 和 SQL 都已设置好,并且它曾经工作多年。

Set rs = Server.CreateObject("ADODB.Recordset")
adoCon.Open  "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=<SERVER_NAME>; PORT=<PORT_NUMBER>;" &_
                    "DATABASE=<DBNAME>; USER=<USERNAME>; PASSWORD=<PASS>; OPTION=3;"

SQL 是正确的 - 我直接将它注入到 mySQL Web 界面中,它生成了所需的结果。

当我在 ASP 中处理此错误时,会打印 Error.Description

"Object required"

它在抱怨什么?

4

2 回答 2

1

我的问题的答案是我必须将十进制字段转换为字符串。修复看起来像这样:

SELECT Convert(Price,char) as Price FROM Table;

这很奇怪,但我的托管服务提供商网站上可能发生了一些变化,导致了这个问题。我实际上在这里找到了类似的解决方案(奇怪的 mysql 结果在 asp 中),这帮助我发现了这个问题。正如我从上面的链接中引用的那样,“ASP 无法识别来自 MySQL 的结果并认为它是 EOF”,而无需从十进制转换为字符串。

于 2013-08-13T23:16:09.000 回答
0

对我来说,它发生在几年前,Oracle 的日期/时间字段具有损坏的值,在尝试选择它们时会导致这个确切的错误。

猜猜这是幕后的同一个问题,对我有用的是使用 Oracle 工具手动删除损坏的行。

另一个工作机会很小的技巧是使用这样的代码:

adoCon.Open  "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=<SERVER_NAME>; PORT=<PORT_NUMBER>;" &_
                "DATABASE=<DBNAME>; USER=<USERNAME>; PASSWORD=<PASS>; OPTION=3;"
Set rs = adoCon.Execute(SQL)

希望此方法中使用的光标不会崩溃。

于 2013-08-04T12:27:33.903 回答