ASP Classic Dictionary[Key,Array]取值报错求助
问题解决:ADODB.Field 80020009 错误
你的问题根源是直接将ADODB.Field对象存入数组,而非字段的实际值。当Recordset执行MoveNext或循环结束后,这些Field对象失去了与当前记录的关联,后续访问时就会触发BOF/EOF相关错误。
修复方法
在构建数组时,必须显式获取字段的Value属性,而不是直接引用Field对象:
修改后的存储代码
Set excel = Server.CreateObject("ADODB.Recordset") excel.Open sql, conn Set newExcel = Server.CreateObject("Scripting.Dictionary") i = 0 Do Until excel.EOF ' 显式获取每个字段的Value,存入数组 newRow = Array( _ excel(0).Value, excel(1).Value, excel(2).Value, excel(3).Value, _ excel(4).Value, excel(5).Value, excel(6).Value, excel(7).Value _ ) newExcel.Add i, newRow i = i + 1 excel.MoveNext Loop ' 记得关闭Recordset和释放资源 excel.Close Set excel = Nothing
读取代码(可保留,建议补充NULL值处理)
For Each k In newExcel.Keys row = newExcel.Item(k) For j = LBound(row) To UBound(row) ' 处理NULL值,避免输出空内容或异常 If Not IsNull(row(j)) Then Response.Write row(j) Else Response.Write "NULL" End If Next Next
额外说明
- 直接引用
excel(0)返回的是ADODB.Field对象,仅在Recordset处于有效记录(非BOF/EOF)状态时才能正常访问其值。 - 加入
IsNull判断可以避免字段值为NULL时的输出异常。 - 操作完成后关闭并释放Recordset对象,避免服务器资源泄漏。
内容的提问来源于stack exchange,提问作者Pau Serra Sans
相关产品推荐
相关产品推荐

