问题描述
代码:
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