C++中ADO多线程访问数据库为何不好用?

達魔 2006-10-08 11:00:21
按照普通单线程的方式编写多线程的代码,为何在读取数据库数据库时出现?
ADO组件不支持多线程吗?
有的资料说用CoInitializeEx(NULL, COINIT_MULTITHREADED),可我加上之后仍然不好用啊.
...全文
422 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘雨 2006-10-10
  • 打赏
  • 举报
回复
另外在连接读取数据的时候。cursorlocation=adUseClient,如果是读数据最好用只读向前游标
尘雨 2006-10-10
  • 打赏
  • 举报
回复
多个线程如果共享一个Connection对象实例或者recordset,command,肯定会出现冲突,所以要么做好互斥的处理,要么在每个线程里使用各自的connection实例

或者创建和维护一个全局的连接池。依靠ADO内部的线程协调,是不可能的
達魔 2006-10-10
  • 打赏
  • 举报
回复
上面说的内容我之前全试过了,在这部分不会报异常,而且这是属于COM的多线程部分,再深一层涉及ADO的时候,如果并发取数就会出现问题,产生系统异常
尘雨 2006-10-09
  • 打赏
  • 举报
回复
你如果在新的线程里使用ADO对象,必须在这个线程里CoInitialize(NULL);
每个涉及ADO操作的线程都必须
CoInitialize(NULL);
不建议AfxOleInit();
suchunyuan 2006-10-09
  • 打赏
  • 举报
回复
ADO初始化代码放线程函数中...
BHW 2006-10-09
  • 打赏
  • 举报
回复
在app文件中的InitInstance函数中加入
#if _WIN32_WINNT >= 0x0400
HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);
#else
HRESULT hRes = CoInitialize(NULL);
#endif

数据库指针在线程类中定义,使每个线程都可以访问数据库

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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