解决DataReader对象被占用问题

3 篇文章 0 订阅

摘自:http://blog.sina.com.cn/s/blog_14ecbd9250102wuz7.html

对于手动查询的界面可以在该界面类里单独打开一个连接

最近在软件开发过程中遇到了一个比较棘手的问题———“已有打开的与此命令相关联的 DataReader,必须首先将它关闭”,花了我一整晚时间才将它调试好,在这个期间我上网搜索了许多相关的解决方案,也做了相关的尝试,结果都是以失败告终,但是功夫不负有心人,总于在我百思不得其解的情况下,奇迹发生了!!!!

问题的由来:程序中有一个Timer控件用来实时判别数据库连接是否正常,如果不正常就得跳出一个对话框,告诉用户网络连接不正常,请重新配置,并停止用户当前的操作,这样就涉及到频繁连接数据的情况,那么当程序中还有另一个事件过程,当您触发该事件过程时,它同样也会不间断地连接数据库——如打印报告(word格式输出),这时就可能出现以上说的棘手问题,尤其是在程序中使用了DateReader 和 Command 对象 ,大家都知道这两个对象在连接数据库时,是不间断的,只有在数据操作完后才允许断开Connection对象,而且Command每次执行ExecuteNonQuery()方法之后,内部会生成一个空的DataReader对象,该对象只有在数据库连接关闭之后,才会被释放掉(这个我占时也不知道怎么解释,但事实证明,确实产生了)。

由于这个原因,当程序中只创建了一个公开变量Connection,那么当程序有两个线程同时占用它时,就会报错————“已有打开的与此命令相关联的 DataReader,必须首先将它关闭”,但是通过认真检查程序,你可能会发现程序中并未用到DateReader对象,而问题就是产生了!!!怎么办?????

思考了一下,难道和前面说的那样Command对象在运行期间生成了DateReader对象。。。。我自以为是这样,这也就算是找到了“祸源”了吧。这里有点小激动!!!!

归纳问题产生原因如下:

(1)       一个公开变量Connection;

(2)       同时以非断开式访问数据库;

(3)       Command对象产生了Datereader对象;

解决方案也简单:创建两个及以上公开对象(也可以是不公开的)Connection,然后让涉及到同时操作数据库的Command对象分别调用各自的Connection,这样问题已经就可以解决了,不行试试!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值