我的代码中有一个非常基本的存储过程执行:
Dim objCmd As ADODB.Command
Dim objConn As ADODB.Connection
Dim rsTemplate As ADODB.Recordset
Set objConn = New ADODB.Connection
objConn.Open strConnection
Set objCmd = New ADODB.Command
objCmd.ActiveConnection = objConn
objCmd.CommandType = adCmdStoredProc
objCmd.CommandText = "GetTemplate"
objCmd.Parameters.Append objCmd.CreateParameter("@Param1", adInteger, adParamInput, , lngParam1)
objCmd.Parameters.Append objCmd.CreateParameter("@Param2", adInteger, adParamInput, , lngParam1)
objCmd.CommandTimeout = 600
Set rsTemplate = objCmd.Execute()
LogInfo "Found " & rsTemplate.RecordCount & " templates"
SP应该找到一行。问题是,有时它会罚款,实际上没问题,但两种情况下RecordCount
属性都是-1。我原本预期0表示零记录,1表示1记录。我有另一部分代码可以返回一行或多行,并且使用我的测试参数,它返回七行,RecordCount
正确显示7.是否有人知道为什么我会得到不一致的结果?如果我在这里得到零结果,我需要能够跳过后面的一段代码,并且没有其他好的方法可以检查,除了尝试访问一个错误的RecordSet对象并且有一个特殊的处理程序resume next
如果它是特定的错误代码。
答案 0 :(得分:4)
如果您的strConnection
指定了仅向前游标,则记录计数将始终为-1
,因为无法使用这种连接识别结果大小。
从这里http://msdn.microsoft.com/de-de/library/windows/desktop/ms676701(v=vs.85).aspx
Recordset对象的游标类型是否影响数量 记录可以确定。 RecordCount属性将返回-1 只向前游标;静态或键集游标的实际计数; 并且-1或动态游标的实际计数,具体取决于 数据源。
答案 1 :(得分:1)
确保在存储过程GetTemplate
中启用了行计数。
示例:
CREATE procedure [dbo].[GetTemplate]
AS
BEGIN
SET NOCOUNT OFF -- Enable row count here
...
END
答案 2 :(得分:0)
将FindRecordCount调暗为整数
如果是rsTemplate.EOF那么 FindRecordCount = 0 其他 rsTemplate.MoveLast FindRecordCount = rstRecords.AbsolutePosition 结束如果
也许你可以试试这样的事情