我在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,
¶ms, &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语句的结果集?在我开枪之前请帮忙。
答案 0 :(得分:1)
不知道你是否也在这里问same question,但看起来非常相似: -
我在尝试创建独立测试程序时发现了这一点。 我在我认为的数据库上创建了我的存储过程 我连接的用户的默认数据库。默认 结果是数据库被设置为其他东西,并且该数据库 还有一个具有相同名称的存储过程,但没有任何存储过程 select语句(结果集)。所以我错误地认为存储了 procedure正在执行select语句,但它不可用 OLEDB计划。
所以简而言之,问题可能在你自己的最终! :)
答案 1 :(得分:0)
SQL Server存储过程可以具有整数返回码和输出参数。返回代码和输出参数在服务器的最后一个数据包中发送,因此在完全释放行集之前,应用程序无法使用它们。
如果该命令返回多个结果,当IMultipleResults :: GetResult返回 DB_S_NORESULT (到达结果的结尾)或IMultipleResults接口完全释放时,输出参数数据可用,以先到者为准。