因本人有需求需要每隔5秒扫一次数据库然后进行数据处理,采用定时器的方式,每隔5秒创建与SQLSERVER2000的连接,在此过程中,我发现系统资源被逐渐耗尽
void CHttpClinetDlg::OnTimer(UINT nIDEvent) 
..........
_ConnectionPtr pMyConnect=NULL;
HRESULT hr=pMyConnect.CreateInstance(__uuidof(Connection));
_bstr_t strConnect="Provider=SQLOLEDB; Server=***.***.***.***;Database=SMS; uid=sa; pwd=*****;"; 
pMyConnect->Open(strConnect,"","",NULL);
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
..........
我想将_ConnectionPtr等变量定义为放在类中的PUBLIC中,无奈可能因为还没初始化的原因,不能申明这个变量.我现在分析是因为定时齐每5秒执行一次以上的代码,在创建变量的时候消耗了内存,但是,我又不知道如何解决,请大家指点一下吧,谢谢了

解决方案 »

  1.   

    _ConnectionPtr等变量定义为放在类中的PUBLIC中,无奈可能因为还没初始化的原因??为什么不能初始化,放在对话框的初试话中不行吗??还有,每5秒就连接一次数据库,晕了那些m_pRecordset在最后的时候关闭了吗,释放了吗
      

  2.   

    还有那个pMyConnect也关闭和释放了吗
    pMyConnect->Close(); 

    pMyConnect.Release();
      

  3.   

    谢谢handsomerun(毛毛) ,我按您的说法试试
      

  4.   

    1.stdafx.h中加入
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 
    2。app文件的InitInstance中加入
    if(S_OK!=OleInitialize(NULL))  //或者CoInitialize()
    {
    AfxMessageBox("初始化COM组件库错误");
    }
    下面就是数据库操作
    _ConnectionPtr pConn;
    _RecordsetPtr  pRs;
    CString strSQL;
    pConn.CreateInstance(__uuidof(Connection));
    pConn->CursorLocation=adUseClient;
    strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=SkillsBox;UID=sa;PWD=aaaaaaaa";
    pConn->Open(_bstr_t(strSQL),"","",-1);pRs.CreateInstance(__uuidof(Recordset));
    pRs->CursorLocation=adUseClient;
    pRs->PutActiveConnection(pConn.GetInterfacePtr());pRs1.CreateInstance(__uuidof(Recordset));
    pRs1->CursorLocation=adUseClient;
    pRs1->PutActiveConnection(pConn.GetInterfacePtr());strSQL="select * from catalog order by cataid";
    pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);