问个Access数据库连接的问题

hufeikong 2011-03-27 05:01:05
封装了一个函数

void XXXXXXX::UpdataRemoteDB(CString sql)
{
try
{
//创建数据库连接
_ConnectionPtr m_pConnection;
//记录集
_RecordsetPtr m_pRecordset;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=cccc.mdb","","",adModeUnknown);
m_pRecordset->Open(sql, m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);//adOpenDynamic
if(m_pRecordset->State)
m_pRecordset->Close();
if(m_pConnection->State)
m_pConnection->Close();
}
catch(...)
{
}
return ;
}



这个函数就是向数据库执行sql语句

我开了一个线程,先再线程初始化com
if (!AfxOleInit())
{
return 0;
}

然后在程序中频繁调用UpdataRemoteDB(CString sql)函数.

这样做频繁创建数据库连接,也是不得已,因为我在程序中调用svn的函数,只要使用com连接了数据库,那么svn读取的时候就会发生运行时(runtime error)错误.

目前症状:
刚开始的数据是正常的.
运行一会就错误了.

这个是什么原因呢?
...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
羽飞 2011-05-20
  • 打赏
  • 举报
回复
COM连接次数再多也是没有问题的,系统只是增加一个引用计数,在程序退出时会减掉程序对COM的引用计数
hufeikong 2011-03-28
  • 打赏
  • 举报
回复
无效 的指针,

这是典型的com没有初始化的反应,难道是连接数多了,都没有释放?

羽飞 2011-03-27
  • 打赏
  • 举报
回复
异常里面怎么说?
hufeikong 2011-03-27
  • 打赏
  • 举报
回复
0x7c80bee7 处最可能的异常: Microsoft C++ 异常: 内存位置 0x3252e710 处的 long。
0x7c80bee7 处最可能的异常: Microsoft C++ 异常: 内存位置 0x3252e994 处的 _com_error。


这样的错误太多了...调试时发现是在初始化数据库连接的时候死掉了.

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧