多线程操作数据库(ado)问题

suisuibianbian 2004-06-17 12:25:12
全部数据库操作封装成DLL,数据库中有三个表。

主线程先调用DLL中的连接数据库函数后往表中写数据,
开了三个子线程每隔30秒从数据库三个表中分别取出数据,子线程中也调用DLL的连接数据库函数,取数据操作完成后就关闭数据库连接。

如果只开一个线程,就没有问题,开两个就老是出现异常。

ado是支持多线程的呀,高手帮忙,先谢了
...全文
169 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
suisuibianbian 2004-06-21
好像搞定了,多线程就是麻烦
回复
suisuibianbian 2004-06-20
挂了,出错的地方还是随机的,怎么搞啊
回复
九重霄 2004-06-18
关注
回复
大脚板 2004-06-18
另,能否判定是否CoInitialize(NULL)过了
回复
大脚板 2004-06-18
试了一下,果然如vcforever(霓裳羽衣) 所说
回复
大脚板 2004-06-18
我也碰到类似的问题,封装了一个类,主线程中一切正常,把对象传递到辅助线程里,连接的时候就出现问题了,感觉应该是 vcforever(霓裳羽衣) 说的问题
回复
suisuibianbian 2004-06-17
不好意思,没说清楚主线程中的写数据是调用的另一个DLL中的函数,这个函数调用了数据库操作DLL的连接函数和写数据函数,可以吗
回复
Kudeet 2004-06-17
除非你一个连接使用完了关闭之后,你才可以重新和数据库建立连接!
回复
Kudeet 2004-06-17
呵呵!你的数据库能支持多线程吗?几个线成同时对它进行操作!看你上面的介绍好象是不行的吧!主线程连接后,三个子线程对数据库操作,这个时候你的数据库是打开的了,而你的子线程又调用DLL的连接数据库函数,当然会有问题的啦!连接一个正在操作的数据库!会出问题的!
回复
suisuibianbian 2004-06-17
To aben456(相逢一笑) :
"传递这个连接过去就可以了",具体怎么操作我不太明白,能详细些吗
回复
aben456 2004-06-17
你可以保持这个连接
写数据的时候,传递这个连接过去就可以了
回复
suisuibianbian 2004-06-17
To vcforever(霓裳羽衣):
子线程中调用的DLL中的每个函数开始都有CoInitialize(NULL),结束是有CoUninitialize(),你的意思是否是子线程中也要加上,这样会否出错
回复
vcforever 2004-06-17
出现什么异常???

最好在每个线程中使用CoInitialize(NULL);都初始化一下COM库
线程结束后使用CoUninitialize()卸载COM库
回复
Kudeet 2004-06-17
是的!
回复
suisuibianbian 2004-06-17
那只有修改主线程中的那个DLL了,要写数据时连接,之后马上关闭了,是这个意思吧
回复
Kudeet 2004-06-17
同一个程序下连接两次就会引起错误!
回复
Kudeet 2004-06-17
尽量不要对一个已经连操作接的数据库再次建立连接!很容易出问题的!我以前遇到过!
回复
发动态
发帖子
数据库
创建于2007-09-28

3942

社区成员

VC/MFC 数据库
申请成为版主
社区公告
暂无公告