多线程操作数据库

ieyhli 2006-06-16 07:42:59
vc6.0连接SQLServer2000,初始化com接口用的 ::CoInitializeEx(NULL,COINIT_MULTITHREADED);
其中有个表主线程和另一个线程(管他叫2吧)都要不断读取,其中线程2是要往表里写东西,主线程是只读,所以主线程中打开记录集时我传的参数是:hr = recordset->Open(m_CommandString,vNull,adOpenKeyset, adLockReadOnly, adCmdText);,而线程2打开时传的参数为:hr = recordset->Open(m_CommandString,vNull,adOpenKeyset, adLockOptimistic, adCmdText);,但是程序运行时仍会有报错,有时会说被另一个线程占用 hsmt什么的,有时会说ODBC不支持此种类型的操作,而有时候又会成功(猜想是没有同时读取),请问这是怎么回事?该怎么样解决呢?非常感谢!!
...全文
186 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ieyhli 2006-06-19
  • 打赏
  • 举报
回复
不是互斥的,可能同时去打开那个表的记录集。
to kenlistian :“commandptr调用参数方式在后台写”,这样会不会很麻烦?数据库打开时只读为什么会有问题呢?谢谢
Stefine 2006-06-17
  • 打赏
  • 举报
回复
两个线程互斥的吗?
kenlistian 2006-06-17
  • 打赏
  • 举报
回复
我告诉你一个方法,一个线程读,采用recordsetptr的 open,另一个线程写,采用commandptr调用参数方式在后台写,这样问题应该不会用。
而且读的频率不要太快,每1秒读一批记录,处理一条,就在另一个线程通过在存储过程中updata,或删除该条。
读线程采用一个线程读既可,读出来放在缓冲区。
处理线程不妨搞n条,就像一个生产者和多个使用者的关系。
这个最好通过线程池方式管理。
ieyhli 2006-06-16
  • 打赏
  • 举报
回复
高手快出现啊!!!

4,018

社区成员

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

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