这样做的问题是,在返回之后,DataReader仍然“连接”到我的DataFactory中的Connection对象.所以,我必须确保调用GetDataReader的代码然后在返回的DataReader上调用Close(),否则,它将“锁定”Connection:
There is already an open DataReader associated with this Command which must be closed first.
在从GetDataReader发回DataReader之前,如何“分离”DataReader?要么是,要么克隆它并发回克隆?我不想让调用代码总是明确地关闭它.
这里必须有一个最好的做法.
更新:
谢谢各位的意见.最重要的是,我需要失去使用DataReaders并切换到DataTables的习惯.它们更易于管理.
另外,感谢有关连接池的说明.我知道它,但只是没有把两个和两个放在一起,并意识到我正在重新发明轮子.
解决方法
从.NET 2.0开始,如果您使用的是sql 2005或更高版本,则可以使用MARS(多个活动结果集),如here所述.这允许您为多个数据读取器使用单个连接,并且只需要更改为你的连接字符串.
但是,sqlDataReaders并不适合以您想要的方式传递代码.
或者(我认为你需要这样做),你可能想要使用一个断开连接的结果集,这是DataSet / DataTables的用武之地.你使用SqlDataAdapter用查询的所有结果填充DataSet / DataTable.然后,您可以将该连接用于任何其他目的,或关闭连接,它不会影响您的内存中结果集.您可以在代码周围传递结果集,而无需维护开放的数据库连接.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。