ASP 经典记录集在 MySQL 转换后无法看到具有 'table.column_name' 格式的列
ASP Classic recordset unable to see columns with 'table.column_name' format after MySQL conversion
我目前正在将大量 ASP classic/VBscript 页面从旧数据库 (Unify Dataserver) 转换为 MySQL。
假设您有这样的查询:
sql = "SELECT c.container_type, c_amount, c_sdate, c_edate, csrt " & _
"FROM containers c, container_chars cc"
objRS.Open sql, objConn, 3, 1
如果我想引用列 "c_edate",我可以简单地使用它并且它工作正常:
x = objRS("c_edate")
但是,当涉及到引用像 "c.container_type" 这样的列时(使用 . 将其与另一个 table 区分开来,例如:
x = objRS("c.container_type")
它会说
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
我可以改用数字来修复它:
objRS(0)
在我们切换到 MySQL 之前,这从来都不是问题。在我们的旧数据库中,使用 rs(table.column_name) 格式工作得很好。但是在 MySQL 中,一旦您在代码中添加 (.),除非您将其切换为数字,否则它无法找到该项目。
正如您所想象的,每次引用查询中的某些内容时,我手动浏览该网站的 700 多页,手动计算每一列在相应 select 语句中的位置,这非常痛苦.
有谁知道为什么会这样,或者如何使 rs(table.column_name) 格式与 MySQL 一起使用,就像它与我们的旧数据库一样?
在 SQL 服务器中,显然在 MySQL 中也是如此,在结果集中引用字段的方法是只使用名称,不带前缀。
x = objRS("container_type")
数据库需要前缀来区分同名列,但一旦将结果发送到记录集,该记录集就不知道也不关心列的来源。
别名也是如此:
SQL = "SELECT c.container_type AS ctype, [...]"
...
x = objRS("ctype")
结合这两个事实,如果您 在结果集中有同名的列,您必须至少为其中之一设置别名。如果不这样做,它不一定会出错,但您将无法使用 rs("name")
语法引用第二列。
SQL = "SELECT c1.container_type, c2.container_type AS c_type2, ..."
...
x = objRS("container_type")
y = objRS("c_type2")
[请注意,当您使用它时,您可能还应该修改 FROM 子句以使用正确的 FROM table1 INNER JOIN table2 ON table1.fieldA = table2.fieldB
类型语法。 FROM table1, table2 WHERE table1.fieldA = table2.fieldB
语法已被弃用多年。]
我目前正在将大量 ASP classic/VBscript 页面从旧数据库 (Unify Dataserver) 转换为 MySQL。
假设您有这样的查询:
sql = "SELECT c.container_type, c_amount, c_sdate, c_edate, csrt " & _
"FROM containers c, container_chars cc"
objRS.Open sql, objConn, 3, 1
如果我想引用列 "c_edate",我可以简单地使用它并且它工作正常:
x = objRS("c_edate")
但是,当涉及到引用像 "c.container_type" 这样的列时(使用 . 将其与另一个 table 区分开来,例如:
x = objRS("c.container_type")
它会说
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
我可以改用数字来修复它:
objRS(0)
在我们切换到 MySQL 之前,这从来都不是问题。在我们的旧数据库中,使用 rs(table.column_name) 格式工作得很好。但是在 MySQL 中,一旦您在代码中添加 (.),除非您将其切换为数字,否则它无法找到该项目。
正如您所想象的,每次引用查询中的某些内容时,我手动浏览该网站的 700 多页,手动计算每一列在相应 select 语句中的位置,这非常痛苦.
有谁知道为什么会这样,或者如何使 rs(table.column_name) 格式与 MySQL 一起使用,就像它与我们的旧数据库一样?
在 SQL 服务器中,显然在 MySQL 中也是如此,在结果集中引用字段的方法是只使用名称,不带前缀。
x = objRS("container_type")
数据库需要前缀来区分同名列,但一旦将结果发送到记录集,该记录集就不知道也不关心列的来源。
别名也是如此:
SQL = "SELECT c.container_type AS ctype, [...]"
...
x = objRS("ctype")
结合这两个事实,如果您 在结果集中有同名的列,您必须至少为其中之一设置别名。如果不这样做,它不一定会出错,但您将无法使用 rs("name")
语法引用第二列。
SQL = "SELECT c1.container_type, c2.container_type AS c_type2, ..."
...
x = objRS("container_type")
y = objRS("c_type2")
[请注意,当您使用它时,您可能还应该修改 FROM 子句以使用正确的 FROM table1 INNER JOIN table2 ON table1.fieldA = table2.fieldB
类型语法。 FROM table1, table2 WHERE table1.fieldA = table2.fieldB
语法已被弃用多年。]