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

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

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

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

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

解决方法分2种思路:

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

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

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

 

posted @ 2021-04-15 09:54  雪人学习  阅读(74)  评论(0编辑  收藏  举报