Re: OCL and ADO COM

From: sszelei <sszelei_at_softprossoftware.com>
Date: 6 Mar 2003 21:06:30 -0800
Message-ID: <65cd3805.0303062106.6056f46c_at_posting.google.com>


Never mind solved my own problem

Had to use the CoInitializeEx and CoCreateInstance to get it to work.

Steven

sszelei_at_softprossoftware.com (sszelei) wrote in message news:<65cd3805.0303061136.425c9002_at_posting.google.com>...
> I am attempting to write a dll external stored procedure that will
> extract data out of an oracle table and then write that data into a
> sql server table using. I used OCL to pull the data out. when I
> attempt to createinstace of a COM object in the dll it generates an
> access violation and crashes the database. I have to restart SQL
> Navigator.
>
> The C code compiles to a dll without any problems. The system runs
> and will query oracle for all the information I request and execute
> the CoInitializeEx with an hr of success. However when the
> Createinstace is run attempting to generate a connection object, dr
> watson pops up with a the access violation problem.
>
>
> code segments
>
> #ifndef _WIN32_DCOM
> #define _WIN32_DCOM
> #endif
>
> #import "C:\Program Files\Common Files\System\ado\msado15.dll"
> no_namespace rename("EOF", "adoEOF" ) // Correct place to import ADO.
> #include <Objbase.h>
>
> #include "ocl.h"
> #include "oci.h"
>
> #include <stdio.h>
>
> using namespace ocl;
>
>
> int BridgeData(OraQuery& rsCnfgInfo, OraQuery& rsData, OraQuery&
> rsConn)
> {
> int rtn = S_OK;
> char pszCols[500];
> char pszColNm[] = "SRC_DATA_TBL_COL_NAME";
> char sql[1000];
>
> // initialize COM
> HRESULT hr = CoInitializeEx (NULL, COINIT_MULTITHREADED);
> if(FAILED(hr))
> return E_FAIL;
>
> _ConnectionPtr pCnn;
> _RecordsetPtr pRs;
>
> // get the connection info from the rsConn recordset
> _bstr_t bstrCnnStr(rsConn.field("Connect_str").getString());
> _bstr_t bstrCnnUsr(rsConn.field("DBMS_USER").getString());
> _bstr_t bstrCnnPwd(rsConn.field("DBMS_PASS").getString());
>
> // put all this garbage in a try catch block
> try{
> // connect to the remote DBMS
> fails ==>> hr = pCnn.CreateInstance(__uuidof(Connection));
> if(FAILED(hr))
> _com_issue_error(hr);
>
> // called using
>
> OraQuery rsCnfgInfo(connection);
> OraQuery rsData(connection);
> OraQuery rsConn(connection);
>
> if(BridgeData(rsCnfgInfo, rsData, rsConn) == E_FAIL)
> return PTR_BRIDGE;
>
> Thanks in advance,
>
> Steven
>
> sszelei_at_softprossoftware.com
Received on Fri Mar 07 2003 - 06:06:30 CET

Original text of this message