ADODB记录的RecordCount不返回有用的信息

ADODB记录的RecordCount不返回有用的信息

问题描述:

我有一个存储过程的一个非常基本的执行在我的代码:ADODB记录的RecordCount不返回有用的信息

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,如果它是一个特定的错误代码,没有其他好方法来检查。

如果你的strConnection是这样的,你只是指定一个只进游标,那么记录数将始终为-1,因为结果大小不能用这种连接来标识。

从这里http://msdn.microsoft.com/de-de/library/windows/desktop/ms676701(v=vs.85).aspx

的记录对象的光标类型会影响是否能够确定的 记录数。 RecordCount属性将返回-1为 一个只进游标;静态或键集游标的实际计数; 以及-1或动态游标的实际计数,具体取决于数据源 。

+0

嗯,我会。我为两者使用了相同的连接字符串,但在尝试解决另一个问题时,我在第二种情况下添加了“objConn.CursorLocation = adUseClient”这一行。将在几分钟内接受。谢谢! – 2014-10-06 16:03:03

暗淡FindRecordCount作为整数

如果rsTemplate.EOF然后 FindRecordCount = 0 否则 rsTemplate.MoveLast FindRecordCount = rstRecords.AbsolutePosition 结束如果

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

+0

是的,这可能会起作用,但我很高兴让'RecordCount'本身正常工作。 – 2014-10-06 16:10:45

+0

我认为它按预期工作。再次“-1,当ADO无法确定记录的数量或提供者或游标类型不支持RecordCount时”。只需创建一个替换recordCount的函数。 – trixrabbit 2014-10-06 16:14:10

+0

那么我的代码工作添加我在其他答案的评论中提到的行。 – 2014-10-06 16:15:16

确保在存储过程GetTemplate中启用了行计数。

例子:

CREATE procedure [dbo].[GetTemplate] 
AS 
BEGIN 
    SET NOCOUNT OFF -- Enable row count here 
    ... 

END 
+0

你有什么理由不加入'SET NOCOUNT OFF'这行吗?它会产生问题吗?只是想知道为什么它不是默认设置。 – 2014-10-06 16:17:46

+1

启用'no count'会更快更高效(特别是如果您运行查询数千次,并且不关心受影响的行数)。但是如果您关心结果,那么你需要将'no count'设置为关闭。 – 2014-10-06 16:20:52

+0

嗯,我能够在存储过程中不包括该行的情况下获得记录数。 – 2014-10-06 16:30:01