_ConnectionPtr pConnection = NULL;    if(FAILED(::CoInitialize(NULL)))
        return;
    try {
        TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
        pConnection->Open("provider=SQLOLEDB;DATABASE=db;UID=sa;PWD=a;", "", "", adConnectUnspecified);
        if(pConnection) {
            if(pConnection->State == adStateOpen) {
                pConnection->Close();
            }
            pConnection = NULL;
        }
    }
    catch (_com_error err) {
    }
    ::CoUninitialize();上述代码会造成handle数加1,请问各位这个问题如何解决阿?

解决方案 »

  1.   

    那么如果
    pConnection.Release()
    呢,
    不过按理说是不要用这个的,用了应该是会出错的
    你试试呢,我已经晕了
      

  2.   

    handle由系统维护,如果要使用,必然会增加,不想增加,只能不释放数据库连接。
    增加有什么关系呢!没有资源泄漏的!
      

  3.   

    ADO有连接池功能,你关闭了但ADO实际内部并没有关闭.
      

  4.   

    可以在连接字符串里指定不使用连接池,好象是pooled=false吧忘记了,就不会handle+1了.
      

  5.   

    使用 Close 方法可关闭 Connection 对象或 Recordset 对象以便释放所有关联的系统资源。关闭对象并非将它从内存中删除,可以更改它的属性设置并且在此后再次打开。使用Release()删除对象。
    好像只有在.net中才可以指定不使用pooling.
      

  6.   

    violin712(violin712) ( ) 信誉:100  2006-04-17 17:32:00  得分: 0  
     
     
       资源句柄数会不断增加,造成资源泄漏,因此为程序是服务程序,有可能大半年的连续运行,恐怕句柄数会增加到不可想象的地步
      
    =====================================================你反复创建干嘛?
    一次创建,反复使用才是啊
      

  7.   

    我是过路的,请问一下打开连接时的adConnectUnspecified代表什么?没有查到啊