3

我在 sql server 数据库中有一个存储过程,它包含一个 select 语句,因此在调用存储过程时它应该作为结果集返回:

Create Procedure SqlTxFunctionTesting (
                                  @inparam decimal(15,3),
                                  @outparam decimal(15,3) output,
                                  @inoutparam decimal(15,3) output)
                                  AS 
                                  BEGIN 
                                  set @outparam = @inparam * 2;
                                  set @inoutparam = @inoutparam * 4;
                                  select * from resultsetdata;
                                  return @inparam * 8;
                                  END

我正在使用执行存储过程

m_pICommandText->Execute(NULL, IID_IMultipleResults, 
                                    &params, &nRowsAffected, (IUnknown **)&m_IMultipleResultSets)))                                   

并尝试使用

HRESULT getResultSetRetCode = m_IMultipleResultSets->GetResult(NULL, 0, IID_IRowset, &
                nRowsAffected, (IUnknown **)&m_pIRowset);

第一次调用返回 S_OK,m_pIRowset 为 NULL,第二次调用返回 DB_S_NORESULT。为什么它不返回 select 语句的结果集?在我开枪之前请帮忙。

4

2 回答 2

1

不知道您是否也在这里问过同样的问题,但看起来非常相似:-

我在尝试创建独立测试程序时发现了这一点。我已经在我认为是我连接的用户的默认数据库的数据库上创建了我的存储过程。结果默认数据库设置为其他内容,并且该数据库还有一个同名的存储过程,但没有任何选择语句(结果集)。所以我错误地认为存储过程正在执行 select 语句,但它对 OLEDB 程序不可用。

所以简而言之,问题可能出在你自己身上!!!:)

于 2013-09-22T14:16:36.547 回答
0

SQL Server 存储过程可以有整数返回码和输出参数。返回代码和输出参数是在服务器的最后一个数据包中发送的,因此在行集完全释放之前,应用程序不可用。

如果该命令返回多个结果,则当 IMultipleResults::GetResult 返回DB_S_NORESULT到达结果结束)或 IMultipleResults 接口完全释放时,输出参数数据可用,以先发生者为准。

于 2013-09-20T12:03:19.280 回答