我要用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()
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()
(2),如果你用的是如你所写那样的智能指针的话,不必考虑释放资源的问题,系统会帮你做到这一点..就是说一般情况下你不用Release(),而Close()只是关闭和数据库的联接,当然这一步不可少
select * from table1@dblink1;
关闭数据库最好使用完就关闭 你不使用还保持连接 并且还保持10个连接 会对数据库资源造成很大浪费!