使用ADO连接数据库时,你在线程中每打开一个连接之后,在使用完成后要把这个连接所申请的所有资源都释放掉,由于你是使用多线程,所以通过COM库的操作都必须通过类工厂指针进行传递

解决方案 »

  1.   

    使用smart pointer省心多了! 要用时就申请,没用了会自动释放!
    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace , rename("EOF" , "adoEOF")_ConnectionPtr pAdoCnn;
    _CommandPtr pAdoCmd;
    _RecordsetPtr pAdoRst;pAdoCnn.CreateObject(__uuidof(Connection));
    pAdoCmd.CreateObject(__uuidof(Command));
    pAdoCmd->ActiveConnection = pAdoCnn;
    ....pAdoRst = pAdoCmd->Execute(&vtMissing , &vtMissing , adCmdText);_variant_t pValue = pAdoRst->Fields->Item["fieldname"]->GetValue();
      

  2.   

    在中App中建立一个连接,
    在每个线程里面从App的连接中再Query一个连接出来,用这个连接生成Recordset,Recordset 指针在局部清除,连接指针也要Release。
    到最后再把App中的连接指针给Release
    最安全。