如何遍历具有多个相关表的大型SQL结果集

时间:2012-04-01 15:22:27

标签: .net ado.net dataset sqldatareader datareader

我正在使用SQL Server中的多个结果集检索非常大量的记录到我的.NET 3.5项目中。

我不能将它们全部放入DataSet并对它们进行处理,因为它会占用太多内存。我不需要将所有记录拉为一次,而只需将父记录中的一条记录拉出,然后再将相关的子记录拉出来。

我可以使用DataReader完成此任务,但我关注的是迭代所有记录的过程需要花费很多时间。这意味着DataReader将在所有那些我认为不可能的时间保持开放状态。

如果将数据集中的所有记录检索到,由于数量很大,但是如果使用DataReader需要将其打开数小时,那么如何处理记录?

1 个答案:

答案 0 :(得分:2)

解决此问题的一种方法是拆分数据并将其处理成块,同时保留有关上次处理记录的信息。

这样,如果数据库连接丢失,你就不需要重新开始了,但你可以继续在最后一个“检查点”(如果有意义的话,你可以在每个记录之后保存检查点)。

如果每个加载记录的处理时间很长,那么使用DataTable将一小块数据下载到内存中,处理并继续(这样可以提高数据库资源的使用率)是有意义的。但是如果处理速度很快并且大部分时间花在从数据库下载数据上,那么使用DataReader(节省内存)会更有意义。