Sql ADODB记录集记录计数不为';不要返回有用的信息

Sql ADODB记录集记录计数不为';不要返回有用的信息,sql,vb6,adodb,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.

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

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行。有人知道我为什么会得到不一致的结果吗?我需要能够跳过后续的一段代码,如果我在这里得到零结果,并且没有其他好的检查方法,除了尝试访问错误的记录集对象,如果是特定的错误代码,则使用特殊的处理程序继续下一步操作。

如果您的
strConnection
指定了只向前移动的光标,然后,记录计数将始终为
-1
,因为结果大小无法通过这种连接识别

从这里

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


dim FindRecordCount为整数

如果是rsTemplate.EOF,则 FindRecordCount=0 其他的 rsTemplate.MoveLast FindRecordCount=RStreRecords.AbsolutePosition 如果结束


也许您可以尝试这样的方法

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

例如:

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

END

好吧,我会的。我对两者使用相同的连接字符串,但在第二种情况下,我在尝试解决另一个问题时添加了行
objConn.CursorLocation=adUseClient
。几分钟后就可以接受了。谢谢是的,这可能会起作用,但我很高兴
记录计数本身能正常工作。我认为它能按预期工作。当ADO无法确定记录数或提供程序或游标类型不支持RecordCount时,再次使用“-1”。只需创建一个替换recordCount的函数。我的代码添加了我在对另一个答案的评论中提到的行。有什么理由不包括行
SET NOCOUNT OFF
?它会制造问题吗?只是想知道为什么它不是默认设置。启用
no count
会更快、更高效(特别是当您运行查询数千次,并且并不真正关心受影响的行数时)。但是如果您确实关心结果,则需要将
no count
设置为关闭。嗯,我可以在不将该行包含在存储过程中的情况下获取记录计数。默认情况下,该选项处于禁用状态。仅当您错误地将属性设置为
set NOCOUNT ON
时,我的答案才适用。我也可以在存储过程中获得
set NOCOUNT ON
行的记录计数,这就是我在原始问题中提到的第二个SP中的记录计数。