[英]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.