存储过程执行后,记录集关闭

加雷斯

我正在VBA中使用ADO执行存储过程。我试图用SQL Server 2008中存储过程的结果填充记录集。以下VBA的示例:

Public Function DoSomething() As Variant()

Dim oDB As ADODB.Connection: Set oDB = New ADODB.Connection
Dim oCM As ADODB.Command: Set oCM = New ADODB.Command
Dim oRS As ADODB.Recordset

oDB.Open gcConn

With oCM
    .ActiveConnection = oDB
    .CommandType = adCmdStoredProc
    .CommandText = "spTestSomething"
    .NamedParameters = True
    .Parameters.Append .CreateParameter("@Param1", adInteger, adParamInput, , 1)
    Set oRS = .Execute
End With

If Not oRS.BOF And Not oRS.EOF Then 'Error thrown here'
    DoSomething = oRS.GetRows()
Else
    Erase DoSomething
End If

oRS.Close
Set oRS = Nothing
oDB.Close
Set oDB = Nothing

End Function

Operation is not allowed when the object is closed在行上收到错误该错误If Not oRS.BOF...向我指示存储过程未返回结果。

但是,如果我在SSMS中执行存储过程,它将返回一行。SP遵循以下原则:

CREATE PROC spTestSomething
    @Param1 int
AS
BEGIN

    DECLARE @TempStore table(id int, col1 int);

    INSERT INTO table1
        (param1)
        OUTPUT inserted.id, inserted.col1
        INTO @TempStore
    VALUES
        (@Param1);

    EXEC spOtherSP;

    SELECT
        id,
        col1
    FROM
        @TempStore;
END
GO

在SSMS中执行该过程的结果是:

id    col1
__    ____
1     1

谁能帮助您解决为什么关闭/未填写记录集的问题?

麦琪(Maciej Los)

基于类似的问题:我在注释中建议执行存储过程时“关闭对象时不允许操作”

我怀疑2个原因:1)您的sp不包含:SET NOCOUNT ON;2)您正在处理类型为table的变量。

最常见的原因Operation is not allowed when the object is closed是该存储过程不包含SET NOCOUNT ON命令,这可以防止多余的结果集干扰SELECT语句。

有关更多信息,请参见:SET NOCOUNT(Transact-SQL)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

存储过程测试返回记录集

来自分类Dev

连接断开后执行命令时,返回关闭的记录集(而不是错误)

来自分类Dev

如何从内部调用到存储过程获取记录集?

来自分类Dev

如何从内部调用到存储过程获取记录集?

来自分类Dev

在存储过程中循环记录集

来自分类Dev

关闭记录集后,是否需要处置SqlCommand?

来自分类Dev

记录集应何时关闭?

来自分类Dev

记录集关闭时,updatesql?

来自分类Dev

从存储过程中获取第二条记录集

来自分类Dev

如何在Access 2010中从SQL存储过程返回多个记录集

来自分类Dev

如何从Dapper.Net中的存储过程获取平面记录集

来自分类Dev

从存储过程中获取第二个记录集

来自分类Dev

将记录集值添加到存储过程参数 - 经典 ASP

来自分类Dev

无法检索从 MS Access ADO 中的存储过程返回的记录集

来自分类Dev

VBA将记录集存储为整数变量

来自分类Dev

在VBA中将记录集存储到阵列

来自分类Dev

从C#中存储的proc返回多个记录集

来自分类Dev

执行存储过程并返回结果集

来自分类Dev

记录集之间的子句

来自分类Dev

函数返回记录集

来自分类Dev

SQL WHERE ... IN记录集

来自分类Dev

记录集目标 SSIS

来自分类Dev

我如何从Oracle过程返回我自己的结构的数组/记录集

来自分类Dev

我可以在更新过程中检查DAO记录集字段中的值吗?

来自分类Dev

存储过程:创建后无法执行

来自分类Dev

事务复制后执行存储过程

来自分类Dev

SQL Server - 执行存储过程后出错

来自分类Dev

断开的记录集/数据集的德尔福

来自分类Dev

检查记录集的空字段