Dea*_*ane 6 c# sqlconnection sqldatareader
我有一个方法("GetDataReader,"让我们称之为)返回一个SqlDataReader.它位于Singleton DataFactory类中,用于维护与数据库的持久连接.
这样做的问题是,在返回之后,DataReader仍然"连接"到我的DataFactory中的Connection对象.所以,我必须确保调用GetDataReader的代码然后在返回的DataReader上调用Close(),否则,它将"锁定"Connection:
已经有一个与此命令关联的打开DataReader,必须先关闭它.
在从GetDataReader发回DataReader之前,如何"分离"DataReader?要么是,要么克隆它并发回克隆?我不想让调用代码总是明确地关闭它.
这里必须有一个最好的做法.
更新:
谢谢各位的意见.最重要的是,我需要失去使用DataReaders并切换到DataTables的习惯.它们更易于管理.
另外,感谢有关连接池的说明.我知道它,但只是没有把两个和两个放在一起,并意识到我正在重新发明轮子.
必须保持的DataReader的连接到数据库,直到你不再需要它们-这是使用DataReader所以你不能"断开"他们这样的性质.当你完成数据阅读器时,你应该关闭它(.Close())但是你不能再使用它了.
从.NET 2.0,如果你使用SQL 2005或更高版本,可以使用MARS(多个活动结果集)作为解释在这里.这允许您为多个数据读取器使用单个连接,只需更改连接字符串即可.但是,SqlDataReaders并不适合以您想要的方式传递代码.
或者(我认为你需要这样做),你可能想要使用一个断开连接的结果集,这是DataSet/DataTables的用武之地.你使用SqlDataAdapter用查询的所有结果填充DataSet/DataTable.然后,您可以将该连接用于任何其他目的,或关闭连接,它不会影响您的内存中结果集.您可以在代码周围传递结果集,而无需维护开放的数据库连接.