VC 多View连接mysql的发生CR_COMMANDS_OUT_OF_SYNC错误

hagx 2018-05-28 09:43:07
我的VC中有多个View,用了一个连接,每个view中都有查询mysql的可能,时间随机,现在发现一个问题,就是有时候查询时会出现CR_COMMANDS_OUT_OF_SYNC的问题,百度得知,这个是由于上一次的查询没有关闭时就去重新查询导致的,在多view中,确实可能会出现这样的问题,一个查询正在处理还未关闭的时候,另外一个view也有可能需要同一个链接做查询。那么这种情况如何避免呢?
1)我本来想采用消息,但是后来发现每个窗口都有自己的消息队列,即使发了消息过去,执行的时间也是随机的,没有办法同步。
2)对每个view采用不同的连接,这个的确可以避免,但是如果有4个view,还有主框架,那是不是要开5个链接?是不是要采用长链接,也就是开始运行时创建5个链接给不同的view,程序结束时断开?
3)可不可以采用短链接?也就是每次查询前创建链接,查询完后是释放数据集,关闭链接,下次再用再链接。这样链接就是“局部变量”了,不会冲突了吧?

4)以上说法对吗?或者大家有什么更好的办法,谢谢!
...全文
852 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2018-05-30
  • 打赏
  • 举报
回复
建议把数据部分单独做成一个类,并对操作用Mutex信号量 主框架中给View传递这个数据库类指针, View中通过指针访问
oyljerry 2018-05-29
  • 打赏
  • 举报
回复
引用 2 楼 hagx 的回复:
那象这样的话,我不同view之间通讯只能用PostMessage了,因为如果用SendMessage话,也有可能对方正在执行一个查询,而我却让它插入另一个查询,也会发生冲突的吧
PostMessage异步处理比较好
oyljerry 2018-05-28
  • 打赏
  • 举报
回复
2,3都可以。一般是用mysql的数据库连接池。分配一定数量的连接,用的时候到池里面取
hagx 2018-05-28
  • 打赏
  • 举报
回复
那象这样的话,我不同view之间通讯只能用PostMessage了,因为如果用SendMessage话,也有可能对方正在执行一个查询,而我却让它插入另一个查询,也会发生冲突的吧

4,012

社区成员

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

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