ADO Connection to oracle with c++

rahulonly4u's Avatar, Join Date: Sep 2010
Go4Expert Member
Code:
# include "stdafx.h"
#include "MyDBConnection.h"

_ConnectionPtr m_pConn;
_RecordsetPtr pRecordset;
_CommandPtr pCommand; 
_ParameterPtr pParam1;
MyDBConnection::MyDBConnection()
{
	m_pConn = NULL;
}
void MyDBConnection::Connect()
{ 
	// COM initialization
	CoInitialize (NULL);
	 
	// Stablishing a connection to the datasource
	try	
	{
		HRESULT hr = m_pConn.CreateInstance (__uuidof (Connection));

		if (FAILED (hr))
		{
			AfxMessageBox (_T("Can't create intance of Connection"));
		}	
		if (FAILED (m_pConn->Open (_bstr_t ("Provider=OraOLEDB.Oracle;PLSQLRSet=1; Data Source=NZWRHK;"),
                                           _bstr_t ("scott"), _bstr_t ("tiger"), adModeUnknown)))
        {
                AfxMessageBox (_T("Can't open datasource"),0,0);
        }

	 
	}
	catch ( _com_error &e )
	{
		_bstr_t bstrSource (e.Source());
		_bstr_t bstrDescription (e.Description());
		TRACE ( "Exception thrown for classes generated by #import" );
		TRACE ( "\tCode = %08lx\n", e.Error ());
		TRACE ( "\tCode meaning = %s\n", e.ErrorMessage ());
		TRACE ( "\tSource = %s\n", (LPCTSTR) bstrSource);
		TRACE ( "\tDescription = %s\n", (LPCTSTR) bstrDescription);

		AfxMessageBox ((LPCTSTR) bstrDescription);
	}
	catch (...)
	{
		TRACE ( "*** Unhandled Exception ***" );
	}
	return ;
}

long MyDBConnection::DBGetRS(CString* strText, CString& strRS, int intDBType)
{
	// TODO: Add your control notification handler code here
	
	if (m_pConn == NULL)		Connect();

	try	
	{
		variant_t vt;
        vt.SetString("2");  
		
		_CommandPtr pCommand;
		
		strRS = _T("");
		HRESULT hr = pCommand.CreateInstance (__uuidof (Command));
         
		if (FAILED (hr))
		{
		//	printf("\n this is return 1===%s\n",strText);
			CString strInfo;
			AfxMessageBox(  _T("Can't create an instance of Command"));
			//OnInfoError(&strInfo);
			return 1;
		}
		
        AfxMessageBox(_T("command created"));
		
		 pCommand->ActiveConnection = m_pConn;
		 //pCommand->Properties->GetItem("PLSQLRSet")->Value = true;
         CString strCommandText,strQuery;
		 strQuery = CString(*strText);
		
    //###########################################################################
	     

  	 pParam1 = pCommand->CreateParameter( _bstr_t ("pParam1"),adSmallInt,adParamInput, sizeof(int),( VARIANT ) vt);
    pCommand->Parameters->Append(pParam1); 
    pRecordset.CreateInstance (__uuidof (Recordset));

 


  pCommand->CommandText = "CALL GetEmpRS1(?)";
  strCommandText.Format(_T("%s"),  strQuery);	  
 pRecordset = pCommand->Execute(NULL, NULL, 
							 adCmdStoredProc | adCmdUnspecified ); */
       

 CString strContent;
 while( pRecordset !=NULL ) 
 {
		
    while( !pRecordset->GetadoEOF() )
    {
	//traverse through all the records of current recordset...
				 
       strContent = (char *)(_bstr_t)pRecordset->Fields->GetItem("item")->Value.bstrVal;
      AfxMessageBox(strContent);
    if(strContent.IsEmpty())
		 AfxMessageBox(_T("no data"));
   else
	strRS += strContent;
	 AfxMessageBox(strContent);					 
	 pRecordset->MoveNext ();
   } 
		
     long lngRec = 0;
     pRecordset = pRecordset->NextRecordset((VARIANT *)lngRec);
   } 
    pRecordset->Close ();
}
  
		 
	catch( _com_error &e )
	{
		_bstr_t bstrSource(e.Source());
		_bstr_t bstrDescription(e.Description());
		CString strInfo;
		strInfo.Format(_T("%s %s"),bstrSource,bstrDescription);
		AfxMessageBox(strInfo);
		//OnInfoError(&strInfo);
		return 1;
	}
	catch (...)
	{
		CString strInfo;
		strInfo.Format(_T("Unhandled Exception in OnQuery"));
		//OnInfoError(&strInfo);
		return 1;
	}
	return 0;
}





AND THID Is MY SP IN ORACLE DB



create or replace
PROCEDURE GetEmpRS1 (ResultSet_Cursor1 OUT SYS_REFCURSOR,
ResultSet_Cursor2 OUT SYS_REFCURSOR,
PARAM IN STRING) AS
BEGIN
open ResultSet_Cursor1 for
SELECT empname "item" FROM employee@MYDB;

open ResultSet_Cursor2 for
SELECT empadd "item" FROM employee@MYDB;

END GetEmpRS1;






I am getting error " bstrDescription {"ORA-06553: PLS-306: wrong number or types of arguments in call to 'GETEMPRS1'" (1)}
" what may be the cause other sp which dont have reffrence cursor is working fine even with this same sp if i remove this rdfcursor work fine

Last edited by shabbir; 11Jan2011 at 18:37.. Reason: Code blocks
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
Which version of OraOLEDB are you using? (Use the Oracle Installer - click Installed Products, and don't forget to check for any patchsets installed. Do not rely on DLL version strings; these are not accurate. And give the full version number, e.g. 9.2.0.7.0, not just a family name, e.g. "9i")