Oracle 使用ADO而不是.net和VC++;

Oracle 使用ADO而不是.net和VC++;,oracle,visual-c++,stored-procedures,ado,Oracle,Visual C++,Stored Procedures,Ado,我正在将VC++/SQL server应用程序迁移到使用Oracle。数据库访问是使用ADO类实现的,我找不到一种方法来遍历Oracle返回的游标 存储过程类似于: create or replace PROCEDURE GetSettings ( cv_1 OUT SYS_REFCURSOR ) AS BEGIN OPEN cv_1 FOR SELECT KEY , VALUE FROM Settings; END;

我正在将VC++/SQL server应用程序迁移到使用Oracle。数据库访问是使用ADO类实现的,我找不到一种方法来遍历Oracle返回的游标

存储过程类似于:

create or replace PROCEDURE GetSettings
(
  cv_1 OUT SYS_REFCURSOR
)
AS
BEGIN
   OPEN  cv_1 FOR
      SELECT KEY ,
             VALUE 
        FROM Settings;
END;
      _CommandPtr pCommand;
      _ParameterPtr pParam1;

      HRESULT hr = pCommand.CreateInstance (__uuidof (Command));

      if (FAILED (hr))
           return;

      pCommand->ActiveConnection = m_pConn;
      pCommand->CommandText = "GetSettings";
      pCommand->CommandType = adCmdStoredProc;
      _RecordsetPtr pRecordset;
      hr = pRecordset.CreateInstance (__uuidof (Recordset));
      if (FAILED (hr))
           return;

      pRecordset = pCommand->Execute(NULL,NULL,adCmdStoredProc);
代码类似于:

create or replace PROCEDURE GetSettings
(
  cv_1 OUT SYS_REFCURSOR
)
AS
BEGIN
   OPEN  cv_1 FOR
      SELECT KEY ,
             VALUE 
        FROM Settings;
END;
      _CommandPtr pCommand;
      _ParameterPtr pParam1;

      HRESULT hr = pCommand.CreateInstance (__uuidof (Command));

      if (FAILED (hr))
           return;

      pCommand->ActiveConnection = m_pConn;
      pCommand->CommandText = "GetSettings";
      pCommand->CommandType = adCmdStoredProc;
      _RecordsetPtr pRecordset;
      hr = pRecordset.CreateInstance (__uuidof (Recordset));
      if (FAILED (hr))
           return;

      pRecordset = pCommand->Execute(NULL,NULL,adCmdStoredProc);
(实际上,它使用的是来自的ADO类)

返回的预编码集处于关闭状态,您无法对其执行任何操作。我想我应该为游标传递一些参数,但是如何使用这些ADO函数创建/使用/访问返回的游标呢?我看不到游标参数类型

我完全陷入困境,非常感谢您的帮助


感谢

终于找到了方法,您需要在连接字符串中指定特殊参数,告诉它返回结果集:

Provider=ORAOLEDB.ORACLE;用户ID=xxx;密码=xxx;数据源=tns_名称;OLEDB.Net=True;PLSQLRSet=True