Memory leak ADO-MSDAORA

From: Charles Edouard <cemd_at_ping.be>
Date: Thu, 08 Jul 1999 13:47:16 +0200
Message-ID: <37848FC4.C5373631_at_ping.be>



ADO Memory leak.

---------------
The following problem occurs with MSDAORA OleDB provider only, not
with other providers like MSDASQL or Microsoft.Jet.OLEDB.4.0;
The following program leaks if the CString SELECT is joining 2 tables.

SELECT -->  SELECT DISTINCT A.id, B.type
   FROM A,B
   WHERE A.id = '19990610-0007'

if SELECT is a simple query on one table the program does not leak.

SELECT -->  SELECT id
   FROM A
   WHERE A.id = '19990610-0007'

//////////////////////////////////////////////////////////////////////
#import <msado15.dll> rename ("EOF", "adoEOF")
void CTestAdoLeakDlg::OnGo()
{
 ::CoInitialize(NULL);
 _bstr_t Connect("Provider=MSDAORA.1;Data Source=CTMC;User ID=DRO; Password=RSQ;");

 ADODB::_ConnectionPtr cn;
 HRESULT hr = cn.CreateInstance (__uuidof (ADODB::Connection));
 cn->Open (Connect, "", "", -1);
 CString SELECT;
 SELECT.Format("SELECT DISTINCT A.id, B.type FROM A,B WHERE A.id = '19990610-0007'");
 );
 _bstr_t Source(SELECT);

 do{
  ADODB::_RecordsetPtr rst = NULL;
  hr = rst.CreateInstance(__uuidof(ADODB::Recordset));
  rst->CursorLocation  = ADODB::adUseServer;
  rst->CursorType  = ADODB::adOpenForwardOnly;
  rst->LockType  = ADODB::adLockReadOnly;
  rst->CacheSize  = 1;

  hr = rst->Open(Source, cn.GetInterfacePtr(), ADODB::adOpenDynamic,ADODB::adLockOptimistic,-1);
  do{
   hr = rst->MoveNext();
  }while(!rst->adoEOF);
  hr = rst->Close();
  hr = rst->Release();   // Leaks
 }while(true);

 ::CoUninitialize();
}

Thank you for any solution you can provide
Charles.
 
 
 
 
  Received on Thu Jul 08 1999 - 13:47:16 CEST

Original text of this message