ASP(经典)RecordSet值在第一次访问后“消失”,当MySQL TEXT数据值

时间:2013-07-04 00:40:02

标签: mysql asp-classic odbc

不久前,在一个快乐程序员的和平世界中,ASP经典和MySQL(5.0)过去相处得很好。 ODBC(3.51)是他们的朋友,数据将从天堂(读取:数据库)流出,没有任何问题。

然后,有一天,发生了一个黑暗而神秘的事件。现在MySQL Clan中的某些DataType拒绝表现。

突然间,TEXT停止在ASP对象中可用,而不是ONCE。因此, NOT NULL 的任何预测试都成为对象中数据的结尾。

......说真的。什么的您可以在此处查看表示:http://bugs.mysql.com/bug.php?id=44831和此处:http://forums.mysql.com/read.php?132,220948,220948

我的问题是:有没有人发现为什么会这样。我有 ZERO欲望返回并编辑100个站点,以便在记录集填满后立即将值放入var中。

哄我超人!

我们已尝试升级到MySQL 5.6和ODBC 5.1.sumthin& 5.2.5 ......但没有任何帮助。 (我们确定ODBC版本对该问题没有影响)

当前的生产服务器保留在ODBC 3.51 + MySQL 5.0
当前测试服务器包含ODBC 5.2.5 + MySQL 5.6

编辑:使用ADODB连接
即:

dim oC, oRs
set oC = Server.createObject("ADODB.Connection")
oC.Open database

set oRs = oC.execute("SELECT 'garble garble garble garble' as `textthing`;")
if not oRs.eof then
    for x = 0 to 3
        response.write "Output: "
        response.write oRs("textthing") &"<br />"
    next
end if
oRs.close
set oRs = nothing
oC.close
set oC = nothing

这导致:
输出:乱码乱码 输出:
输出:
输出:

(我在这里要求一些自由:上面的文字字符串 - &gt;记住它是为了这个练习而作为TEXT或MEDIUMTEXT出现。)

编辑2: (如下面的评论中所述) 我们的工作解决方案是:

  1. 将真正不需要的东西改为*** TEXT到VARCHAR(BigEnough)。
  2. 编辑ASP以获取需要*** TEXT的内容以放置值 直接变成一个变量。
  3. 这远非一个很好的解决方案,但它确实会迫使您更准确地考虑您的数据 - 这只能是一件好事......对吗?

1 个答案:

答案 0 :(得分:0)

马克,我在这里拍了很长时间。对于我所知道的经典ASP(包括多年的咒骂和爱好),来自MySQL数据库的NULL答案实际上导致......没有。除非您将记录集结果定义为字符串,否则它将无法与""进行比较。所以,要么你这样做:

var recordsetVal = oRs("textthing")&""

......或者您可以这样做:

if oRs("textthing")&"" <> "" then 

此外,使用while ... wend花边代替do while...loop。它可能会奏效。 再次,这是一个很长的镜头。这个问题可能涉及很多因素,但MySQL驱动程序和ODBC兼容性问题只是其中之一,幸运的是,可能性最小。让我们发布。