You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:38:18