ADODB RecordSet RecordCount不会返回有用的信息

时间:2014-10-06 15:54:56

标签: sql vb6 adodb

我的代码中有一个非常基本的存储过程执行:

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如果它是特定的错误代码。

3 个答案:

答案 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        结束如果

也许你可以试试这样的事情