如果 recordset.EOF 出现“对象关闭时不允许操作”错误

问题描述

代码

Dim rs As ADODB.RecordSet
Set rs = New ADODB.RecordSet
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command 

cmd.ActiveConnection = cn 'global connection string
cmd.CommandType = adCmdstoredProc
cmd.CommandText = "usp_GetItem"

with cmd.Parameters
     .Item("@parm1") = parm1
     .Item("@parm2") = parm2
End With

Set rs = cmd.Execute

If rs.EOF Then '<-- error here
    functionName = DefaultValue
Else 
    functionName = rs!Item
End If

Set rs = nothing
Set cmd = nothing

Exit Function

错误发生在 rs.EOF 上。我收到“对象关闭时不允许操作”,这是对从 cmd.Execute 语句返回的关闭记录集的引用。返回的记录包含三个字段,第一个是数据,第二个是空,第三个是Item。项目为空但不为空。我有许多其他查询以完全相同的方式编码而没有出现此错误。为什么会这样?

解决方法

我总是尽量保持安全,因此用

封装这些代码
If Not rs.State = adStateClosed Then
   ' Do your stuff
End If 

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...