Correct way to return _RecordsetPtr from a Class method...
I'm creating my own ADO class (to make it simple). There's something I want to ask about returning Recordset in Select command...
Here's my class :
--------
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")
using namespace ADOCG;
void MyADO::Connect(char *str)
{
pConn.CreateInstance(__uuidof(Connection));
pConn->Open(str,"","", adOpenUnspecified);
}
void MyADO::Insert(char *cSQL)
{
pConn->Execute(cSQL,NULL,adCmdText);
}
void MyADO::Update(char *cSQL)
{
pConn->Execute(cSQL,NULL,adCmdText);
}
void MyADO::Delete(char *cSQL)
{
pConn->Execute(cSQL,NULL,adCmdText);
}
_RecordsetPtr MyADO::Select(char *cSQL)
{
_RecordsetPtr pRs;
pRs.CreateInstance(__uuidof(Recordset));
pRs->Open(cSQL,pConn.GetInterfacePtr(),adOpenStatic,adLockReadOnly,adCmdText);
return pRs;
}
void MyADO::Close()
{
pConn->Close();
pConn.Release();
}
void MyADO::BeginTrans()
{
pConn->BeginTrans();
}
void MyADO::CommitTrans()
{
pConn->CommitTrans();
}
void MyADO::RollBack()
{
pConn->RollbackTrans();
}
-----
In my program, I do it this way :
------
_RecordsetPtr pRs;
mADO.BeginTrans();
pRs=mADO1.Select("/* Select Query */");
if(!pRs->EndOfFile)
{
//whatever here
}
pRs->Close();
pRs.Release();
mADO1.CommitTrans();
--------
My question is, is it correct to do this way ? I create a _RecordsetPtr which is a local scope (inside ::Select), return it without releasing it, and delete it in the main program (but the _RecordsetPtr in main loop doesn't call CreateInstance(__uuidof(Recordset));) ? Any better alternatives ?
Thanks...

