Database Programming ATL

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

How to use ATL OLE/DB code with an ADO connection

.

Environment: VC++ 6, Windows 2000

This article is for Visual C++ — OLE/DB programmers that are using ATL but must interact with components or code (from VB or even Visual C++) using ADO. Some time ago was really a problem for me to use such components without changing my code that was using ATL OLE/DB style for accessing a database.

The key code is where the ADO.s Connection is used to get a CSession:

.  .  .

GUID
IID_ACC={0x00000516,0x0000,0x0010,0x80,0x00,
         0x00,0xAA,0x00,0x6D,0x2E,0xA4};
   HRESULT hr;

   try
   {

      if(!m_pADOconnection->CreateDispatch(
         _T("ADODB.Connection"), e))
             throw e;

      CString strConnection;
      strConnection.Format("Provider=Microsoft.Jet.OLEDB.4.0;
                           DataSource=db.mdb;");

      m_pADOconnection->Open(strConnection,"admin","", 0);

      propd=m_pADOconnection->m_lpDispatch;
      hr=propd->QueryInterface(IID_ACC,(void**)&pUnk);
      if(FAILED(hr)) return hr;
      hr=((ADOConnectionConstruction15*)pUnk)->
                      get_Session(&pSession);
      if(FAILED(hr)) return hr;

      hr=pSession->QueryInterface( IID_IOpenRowset,
                                   (void**)&pOpenRowset);
      if(FAILED(hr)) return hr;
      m_pSession->m_spOpenRowset.Attach(
                           (IOpenRowset*)pOpenRowset);
   }
   catch(...)

   . . .

Downloads

Download source – 35 Kb

More by Author

Get the Free Newsletter!

Subscribe to Data Insider for top news, trends & analysis

Must Read