阅读器关闭时尝试调用 HasRows/Read无效 解决思路

本文详细阐述了在执行数据库操作时遇到的SqlDataReader异常,解释了原因并提供了两种解决方案:保持连接打开或使用DataSet缓存数据。同时讨论了这两种方法的优缺点和适用场景。

执行数据库操作时,出现阅读器关闭时尝试调用 HasRows无效或者阅读器关闭时尝试调用 Read无效的问题,

经查都是因为操作数据库时,数据库连接已关闭造成的。。

究其原因是因为使用了SqlDataReader返回数据库查询的数据。SqlDataReader的数据保存在数据库服务器中,

当数据库连接关闭/断开后自然无法再调用其方法访问数据库内容然后报错。

解决方法分2种思路:

1、数据库查询返回SqlDataReader时,保证数据库连接不断开。因此代码设计中就要避免使用Using去申请数据库连接对象,因在其作用域之外,连接会自动释放。

   此思路当访问量过大时,连接池面临暴涨的风险,需要着重考虑探讨;使用完SqlDataReader的方法访问完数据后需要关闭数据集,建议使用**SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)**来定义,CloseConnection定义“在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。”

2、使用DataSet等类型返回数据库查询数据,DataSet对象在一个暂存区(Cache)保留了数据库中查到的数据,将数据保存在本地内存中。此思路当访问数据量过大时又面临对本地内存的极大要求,需要权衡考虑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值