Asp classic 经典ASP结果集-终极困惑!
考虑一个来自mysql查询的简单结果集Asp classic 经典ASP结果集-终极困惑!,asp-classic,Asp Classic,考虑一个来自mysql查询的简单结果集 rs("description") 及 应该被视为同一件事。但是,根据您访问它们的方式,您会得到不同的结果(!!) 直接访问rs(“描述”),系统将返回一个“字段”对象。或者,更重要的是,在调用中直接使用它,将返回一个“Field”对象 将其分配给另一个变量,该对象的值将被分配 mydescription = rs("description") “mydescription”的内容是一个字符串 为什么会有这种差异?在ASP的生命周期中的某一时刻,它们的
rs("description")
及
应该被视为同一件事。但是,根据您访问它们的方式,您会得到不同的结果(!!)
直接访问rs(“描述”),系统将返回一个“字段”对象。或者,更重要的是,在调用中直接使用它,将返回一个“Field”对象
将其分配给另一个变量,该对象的值将被分配
mydescription = rs("description")
“mydescription”的内容是一个字符串
为什么会有这种差异?在ASP的生命周期中的某一时刻,它们的工作方式肯定完全相同,那么它们为什么会发生变化,我如何才能将其更改回来?管理记录集的最佳方法是使用数组。这将大大提高性能。我发现有时候记录集可能像你描述的那样模棱两可,不可靠,速度慢。这样做可以解决您的所有问题:
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
rsCommon.open“从tblPeople中选择ID、名称”,adoCon
arrData=rsCommon.getRows()
rsCommon.close
对于i=0到ubound(arrData,2)
响应.写入(arrData[0][i]&“-”和arrData[1][i]&“
”)
下一个
您实际上在中做了两件不同的事情:
案例1
mydescription=rs(“description”)+“是描述”
以及
案例2
mydescription=rs(“description”)
在案例2中,您正在访问记录集中的对象。在案例1中,您正在访问记录集中的对象,将该对象转换为字符串,并将其与另一个值为
“的字符串连接起来,这是描述”
。这不容易确定,因为在ASP Classic中,强制转换是隐式的。基本上,案例1与mydescription=CStr(rs(“description”)+“是描述”
相同。如果你这样看,很容易看出为什么你没有得到预期的结果。据我所知,这种行为从未改变过
rs(“description”)始终返回ADO字段对象
恰好(方便地)field对象的默认属性是“.value”属性,在大多数情况下,该属性工作正常
如果您始终希望确保访问的是记录集字段的实际数据,那么您将始终指定“.value”属性。这是确保不会在不需要的地方出现Field对象的最佳方法。如果省略.value属性,则将其交给vbscript和ADO来决定
如果这是vbScript,则
Set
语句意味着设置对象,否则将传递值。可能已经改变了?请尝试使用适当的运算符:mydescription=rs(“description”)&“是描述”
这样ASP应该将两者都视为字符串,从而执行自动转换。我的问题是……为什么这会停止工作?这是在服务器上运行的代码…不管它有多糟糕。我只是不明白+
运算符在数字之间使用,所以ASP试图将rs(“说明”)
转换为数字,当它失败时(或者提前查看它不是数字),它会恢复为其真正的类型,即字段对象。使用&
操作符ASP应该尝试将值转换为字符串并成功。完全同意-如果我有时间,我会检查整个代码库并更改它,唉,我现在没有。它在列表中,但目前它只需要工作,因为无论我如何使用rs(“描述”),它都会遇到相同的问题。它“曾经”起作用(可能在IIS6上),但现在不起作用了。@Paul也许你应该在db字段描述中查找该值。由于它在一个环境中工作,而不是在另一个环境中工作,唯一的区别可能是数据。当asp进行隐式转换时,数据是非常重要的
mydescription = rs("description")
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