OLEDB IMultipleResults-> getResult不返回rowset

时间:2013-09-13 18:34:33

标签: oledb

我在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语句的结果集?在我开枪之前请帮忙。

2 个答案:

答案 0 :(得分:1)

不知道你是否也在这里问same question,但看起来非常相似: -

  

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

所以简而言之,问题可能在你自己的最终! :)

答案 1 :(得分:0)

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

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