我要用ADO与数据库建立10个连接,并将连接保存在一个为全局LIST中。我的代码如下。
typedef CTypedPtrList <CPtrList,_ConnectionPtr> CConnectionList;
//...........
CConnectionList m_connectionList;//全局链表
//////////////////初始化
for(int i = 0;i<m_iPoolSize;i++)
{
     _ConnectionPtr tempPtr = NULL;
     tempPtr.CreateInstance(__uuidof(Connection));//创建10个连接
     tempP tr->Open("DSN=strong;UID=sa;PWD=admin;database=test","","",-1);
     m_connectionList.AddTail (tempPtr);//加入全局列表,以便在线程中
                             //访问,并取得一个连接,以操作数据库
}
////////////////////使用
_ConnectionPtr usePtr = m_connectionList.GetHead ();//到这里的时候就报错了
                             //是在AddRef函数中报访问出错
我想问一下,
(1)_ConnectionPtr不能与平常的指针部可以用一样的方法进行操作吗?
我该怎么做,才能实现将多个连接指针保存在链表中,并从链表中随意取出连接指针
(2)我对com 编程不熟悉,请问要怎样清除资源,什么时候调用_ConnectionPtr类型指针
的的Close(),尤其是Release()

解决方案 »

  1.   

    (1), 一般连接到一个数据库只用一个连接就够了,没必要多个连接,所以根本就用不上链表,_ConnectionPtr是智能指针,和平常的指针几乎一样使用
    (2),如果你用的是如你所写那样的智能指针的话,不必考虑释放资源的问题,系统会帮你做到这一点..就是说一般情况下你不用Release(),而Close()只是关闭和数据库的联接,当然这一步不可少
      

  2.   

    如果用Oracle,我都是建立一个连接,然后用Database link!举例:
    select * from table1@dblink1;
      

  3.   

    _ConnectionPtr 是个智能指针在超出他的作用域后自动释放!不用调用Release
    关闭数据库最好使用完就关闭 你不使用还保持连接 并且还保持10个连接 会对数据库资源造成很大浪费!
      

  4.   

    算了,我已经用windows api方法实现了ado的调用。在没有完全弄懂智能指针的机制之前,不会在用#import方式来实现ado了。另外,我不同意上面几位的那种说法,各位可能没有明白我的意思。我的服务器用网络从1000个客户端接来信息,并写入数据库,常常会有上百个线程同时做数据库操作,而且服务器软件与数据库不再一台机器上,访问数据库是我的程序中的费时操作,如果只有一个连接,岂不造成了瓶颈?我做了一下实验,如果保持10个连接并动态分配给需要的线程(类似连接池),性能可提高1/4以上,怎么能说没有意义呢?我结帖了,谢谢各位了