2013-04-18 45 views
0

我正在將VC++/SQL服務器應用程序遷移到使用Oracle。數據庫訪問是使用ADO類實現的,我無法找到通過Oracle返回的遊標的方法。使用ADO的Oracle存儲過程不是.net和VC++

的存儲過程是這樣的:

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類從http://www.codeproject.com/Articles/1075/A-set-of-ADO-classes-version-2-20#TheSample02

返回pRecordset是在一個封閉的狀態,你不能做任何事情。我想我應該爲光標傳遞一些參數,但是如何使用這些ADO函數創建/使用/訪問返回的光標?沒有遊標參數類型,我可以看到

我完全卡住,將不勝感激一些幫助

感謝

回答

1

終於找到了如何做到這一點,你需要在連接字符串中指定特殊參數告訴它返回結果集:

Provider = ORAOLEDB.ORACLE; User ID = xxx; Password = xxx; Data Source = tns_name; OLEDB.Net = True; PLSQLRSet = True;