使用ADO数据库打开操作时,线程会增加5个,句柄增加54个。这里增加无所谓,系统要使用嘛,
但我在关闭操作时,线程才减少3个,句柄更惨,才减少了8个,真不知是什么原因。
这问题可真让我头晕,不知是ADO的问题还是我自己的问题。下面是我的一些分析,还望大家多多帮手。
//打开操作
HRESULT hr;
try
{
//创建Connection对象
hr = m_pConnection.CreateInstance("ADODB.Connection");  //此句线程数加1 句柄数增加37
if (SUCCEEDED(hr))
{
//连接数据库
hr = m_pConnection->Open(sConnect,sUsername, sPasswd, adModeUnknown);  //此句线程数加4 句柄数增加17
if (SUCCEEDED(hr))
{
m_pCommand.CreateInstance("ADODB.Command");
m_pRecordset.CreateInstance("ADODB.Recordset");
}
}
else if (FAILED(hr))
return FALSE;
}
catch(_com_error &e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s", e.ErrorMessage());
TRACE("%s", errormessage);///显示错误信息
e.Error();
return FALSE;
}return TRUE;
//关闭操作
try
{
m_pConnection->Close();  //此句执行后线程数减3 句柄数减8
}
catch (_com_error &e)
{
CString errormessage;
errormessage.Format("关闭数据库失败!\r\n错误信息:%s", e.ErrorMessage());
TRACE("%s", errormessage);///显示错误信息
return FALSE;
}
return TRUE;

解决方案 »

  1.   

    数据库的连接比较费时, 打开一个连接后, ADO会将该连接保存起来, 以后用相同的连接字符串打开一个新连接时, 实际上并没有创建一个新连接, 而是从缓冲池返回可重复使用的连接.当然在程序里关闭连接时, 也不会实际关闭它, 不然就无法重用了. 大致原理就是这样,至于具体什么时候关闭, 我也不清楚.
      

  2.   

    我们公司的那位高手已经帮我解决,他也是这么告诉我的,谢谢 cheng_young