ado调用oracle存储过程输出结果集

imlmy 2013-04-26 04:48:33
之前做的SQL Server数据库需要迁移到oracle数据库上,发现差异之大真是坑爹啊。
我写了个数据库模块封装ado操作,调用oracle存储过程。
oracle存储过程定义如下
create or replace procedure sp_GetAllDataDefine
(p_recordset1 OUT SYS_REFCURSOR)
is
begin
OPEN p_recordset1 FOR
SELECT *
FROM PQDATADEFINE;
end sp_GetAllDataDefine;

用pl/sql测试执行是能够拿到数据的。但是用ado执行能成功,但是得到的结果集状态时adStateClosed。ado调用代码如下
char* strProcName="SP_GETALLDATADEFINE";
char sql[512];
sprintf_s(sql, 500, "{CALL %s(?)}", strProcName);
_CommandPtr pCmd = (_Command *)pParameters->GetCommand();
pRs.CreateInstance (__uuidof (Recordset));
pCmd->ActiveConnection = m_pConnection;
pCmd->CommandText = sql;
int lt = pRs->LockType;
int ct = pRs->CursorType;
pRs = pCmd->Execute(NULL, NULL,
adCmdStoredProc | adCmdUnspecified);

求高人指点,项目很急啊
...全文
146 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
imlmy 2013-05-07
  • 打赏
  • 举报
回复
终于解决这个问题了。是由于连接oracle数据库的时候少了一个扩展属性,导致无法获取游标输出参数。解决方案在http://blog.csdn.net/imlmy/article/details/8894442
imlmy 2013-05-03
  • 打赏
  • 举报
回复
引用 3 楼 zyq5945 的回复:
ADO助手先测试看。选了adCmdStoredProc 后不需要在存储过程前面加CALL了。
谢谢!我用你的工具发现和我的情况一样,都没有结果集返回。后来发现我的那种执行存储过程方法即使存储过程名称写错也能执行成功。所以之前那种情况根本没有执行到那个存储过程,也就没有记录集返回。看来要修改存储过程执行方法。
zyq5945 2013-04-27
  • 打赏
  • 举报
回复
ADO助手先测试看。选了adCmdStoredProc 后不需要在存储过程前面加CALL了。
imlmy 2013-04-26
  • 打赏
  • 举报
回复
引用 1 楼 u010412956 的回复:
不懂帮顶。。 不过你这个ADO是属于哪块的知识啊?感觉跟oracle没啥关系。。。
我也觉得可能懂oracle的人不一定用过ado,不过csdn不给改了
u010412956 2013-04-26
  • 打赏
  • 举报
回复
不懂帮顶。。 不过你这个ADO是属于哪块的知识啊?感觉跟oracle没啥关系。。。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧