Correct way to return _RecordsetPtr from a Class method...

Hi guys,
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...
[1957 byte] By [EonStrife] at [2007-11-19 22:30:13]