繁体   English   中英

ADODB RecordSet RecordCount不返回有用的信息

[英]ADODB RecordSet RecordCount doesn't return useful information

我在代码中对存储过程进行了非常基本的执行:

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表示一条记录。 我还有另一段代码可以返回单行或多行,并且使用我的测试参数,它返回了七行,而RecordCount正确显示了7。有人知道为什么我得到不一致的结果吗? 如果我在这里得到零结果,我需要能够跳过随后的代码,并且没有其他好方法可以检查,除了试图访问一个坏的RecordSet对象,并且有一个特殊的处理程序,如果它是一个特殊的错误,可以resume next一个操作码。

如果您的strConnection使得您指定了仅向前的游标,那么记录计数将始终为-1因为无法用这种连接识别结果大小。

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

Recordset对象的游标类型影响是否可以确定记录数。 对于仅向前的游标,RecordCount属性将返回-1; 静态或键集游标的实际计数; -1或动态游标的实际计数,具体取决于数据源。

确保在存储过程GetTemplate ,已启用行数。

例:

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

END

将FindRecordCount暗淡为整数

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM