本人初来乍到,没有积分送,友情赞助,帮解答下。等有积分后,补上。不胜感激。谢谢!。
求助:vc6.0 采用ADO访问,Oracle数据库,每次在用ADO方式向Oracle数据库插入新的数据时,内存就不断在增加?为什么?请指教。下面是程序:BOOL COracleDBDlg::OnInitDialog()
{
// TODO: Add extra initialization here
SetTimer(1,1000,NULL);

return TRUE;  // return TRUE  unless you set the focus to a control
}
//连接数据库
void COracleDBDlg::ConnectDB()
{ try
{
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection->Open("Provider=MSDAORA.1;Data Source=mike;user=system;password=manager;", "" ,"" ,adModeUnknown); }
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}}//断开数据库连接
void COracleDBDlg::ExitDB()
{
m_pRecordset->Close();
m_pRecordset.Release();
m_pConnection->Close();
m_pConnection.Release();
}//插入数据到数据库中
BOOL COracleDBDlg::InsertDB(CString aa, CString bb, CString cc)
{
//插入数据到数据库
try
{
CString sql0;
sql0.Format("insert into JIUZHOU.water(JHSJ , BDWZ , FIRE) values('%s','%s','%s')",aa, bb, cc);
m_pConnection->Execute((_bstr_t)sql0, NULL , adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
return false;
}
}void COracleDBDlg::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
ConnectDB(); //连接数据库 m_strJhsj = "2010-10-3";
m_strBdwz = "北京";
m_strFire = "hospital";
//插入数据到数据库
InsertDB(m_strJhsj, m_strBdwz, m_strFire); ExitDB(); //断开数据库连接
break;
default:break;
} CDialog::OnTimer(nIDEvent);
}

解决方案 »

  1.   

    最好不要每次timer都连接再插入。连接数据库在start timer的时候做一次就行了,断开连接写在程序的析构函数当中或是抛出异常处理的代码中。timer里面只执行插入操作
      

  2.   

    job82824,按你的方法试了,内存的增长速度没有那么快了,但是还在增加。
    添加析构函数,只在定时器里加入插入操作。
    连接操作放在
    BOOL COracleDBDlg::OnInitDialog()
    {
    ConnectDB(); //连接数据库
    }析构函数里放断开数据库操作
    COracleDBDlg::~COracleDBDlg
    {
    m_pRecordset->Close();
    m_pRecordset.Release();
    m_pConnection->Close();
    m_pConnection.Release();}
    方法是这样的,看还有什么需要改进的,请指教?
    高手们希望给予指教,谢谢!