2016-05-04 36 views
1

情况:使用传统的ASP代码尝试将代码库从旧服务器移动到新服务器。MySQL ODBC 5.1驱动程序将错误的数据类型返回给ADODB

代码尝试使用MySQL ODBC 5.1驱动程序和ADODB.Connection对象连接到Windows服务器上的MySQL数据库。

Connection String = "Driver={MySQL ODBC 5.1 Driver};Server=dbserver;Database=dbname;Uid=username;Password=password;Option=3" 

在ADODB.RecordSet对象中返回查询结果。 当我试图访问包含标准的MySQL整型字段,我得到这个错误:

Microsoft VBScript runtime error '800a01ca'
Variable uses an Automation type not supported in VBScript

如果我手动转换,则错误被消除,并返回正确的值()使用CLNG领域。但是,有太多代码需要手动查找对整数的每个引用并手动将其转换。

VarType()对于这些值返回19,这似乎是VB不能理解的某种Long数据类型。 (See here) 是不是ODBC驱动程序应该为长整型返回VarType 3? (see here

我尝试在连接字符串的“option =”参数中传递选项16384(NO_BIGINT),但它没有任何区别。

任何想法如何解决这个问题?看起来应该有一个选项传递给MySQL ODBC驱动程序以Long Integer数据类型返回long,但是我找不到它。

之前有人提到它:是的,我们知道传统的ASP是不好的。不,我们现在没有资源将这些代码移植到别的东西上。我们只需要它在当前时间继续使用传统的ASP。

+2

不要让任何人告诉你,传统的ASP本质上是坏的。 (我从来没有使用MySQL,所以不能帮助你的实际问题,但我想把它放在那里。) – Martha

+0

@Martha他们不需要写这个,经典的ASP并不差,它只是旧。仍然有很多项目需要支持,不会转移到.Net。很多时候,客户很高兴它如何执行,因此它保持不变。 – Lankymart

+1

好吧,为什么downvote?我做错了什么? –

回答

1

通过淘汰的过程我终于发现问题了。不确定为什么发生这种情况,但它必须是MySQL ODBC驱动程序中的一个错误。

具有UNSIGNED属性的整数字段导致错误。删除此属性会导致字段值作为标准Integer类型返回。显然,ODBC驱动程序没有正确处理从unsigned int到vbscript Integer类型的转换,而是返回指向Long的指针。

我也注意到这个问题在tinyint(1)我正在使用布尔值的字段。将数据类型从tinyint(1)更改为int(11)[缺省值]也消除了此错误。

希望这会帮助别人。仅供参考我也在MySQL ODBC Driver论坛上发布了这个问题,但没有人反应过。