经典ASP结果集 - 终极混乱!

时间:2011-03-16 16:08:26

标签: asp-classic

从mysql查询中考虑一个简单的结果集。

rs("description")

rs("description").Value

应该被视为同一件事。但是,根据您访问它们的方式,您会得到不同的结果(!!)

直接访问rs(“description”)并返回“Field”对象。或者,更重要的是,直接在调用中使用它,并返回一个“Field”对象。

mydescription = rs("description") + " is the description"

将其分配给另一个变量,并为该对象的值分配...

mydescription = rs("description")

“mydescription”的内容是一个字符串。

为什么会出现这种差异?在ASP生命中的某一点,它们必须完全相同,所以为什么它们会改变,我怎么能改回来呢?

3 个答案:

答案 0 :(得分:2)

管理记录集的最佳方法是使用数组。这将带来巨大(巨大)的性能提升。我发现有时记录集可能是模糊不清的,你所描述的,不可靠和缓慢。这样做可以解决您的所有问题:

rsCommon.open "SELECT ID, name FROM tblPeople", adoCon
    arrData = rsCommon.getRows()
rsCommon.close

for i = 0 to ubound(arrData,2)

    response.write(arrData[0][i] & " - " & arrData[1][i] & "<br />")

next

答案 1 :(得分:2)

你实际上在做两件事:

<案例1

mydescription = rs("description") + " is the description"

<案例2

mydescription = rs("description")

案例2 中,您正在访问记录集中的对象。在案例1 中,您正在访问记录集中的对象,将对象转换为字符串并将其与另一个值为"is the description"的字符串连接。这不容易确定,因为在ASP Classic中,强制转换是隐含的。基本上案例1 mydescription = CStr(rs("description")) + "is the description"相同。如果以这种方式看待它,很容易理解为什么你没有得到预期的结果。

答案 2 :(得分:0)

据我所知,此行为从未改变过。

rs(“description”)始终返回ADO Field对象。

恰好,(方便地)字段对象的默认属性是'.value'属性,在大多数情况下,它的工作正常。

如果您始终要确保访问记录集字段的实际数据,则始终指定“.value”属性。这是确保您不会在某个不需要的地方使用Field对象的最佳方法。如果省略.value属性,那么您将把它留在vbscript和ADO的手中,以便为您做出决定。

http://msdn.microsoft.com/en-us/library/ms678086.aspx