.net 如何遍历包含多个相关表的大型SQL结果集

.net 如何遍历包含多个相关表的大型SQL结果集,.net,ado.net,dataset,sqldatareader,datareader,.net,Ado.net,Dataset,Sqldatareader,Datareader,我正在从SQL Server中检索大量带有多个结果集的记录,并将其检索到我的.NET 3.5项目中 我不能把它们都放到一个数据集中去处理,因为这样会占用太多内存。我不需要一次提取所有记录,只需提取父表中的一条记录,然后再提取相关的子记录 我可以通过使用DataReader来实现这一点,但我在这里关心的是遍历所有记录的过程将花费很多小时。这意味着DataReader将在我认为不可能的所有时间内保持打开状态 当将所有记录检索到数据集中时,您如何处理这些记录?由于数据量很大,因此不可能执行此操作,但使

我正在从SQL Server中检索大量带有多个结果集的记录,并将其检索到我的.NET 3.5项目中

我不能把它们都放到一个数据集中去处理,因为这样会占用太多内存。我不需要一次提取所有记录,只需提取父表中的一条记录,然后再提取相关的子记录

我可以通过使用DataReader来实现这一点,但我在这里关心的是遍历所有记录的过程将花费很多小时。这意味着DataReader将在我认为不可能的所有时间内保持打开状态


当将所有记录检索到数据集中时,您如何处理这些记录?由于数据量很大,因此不可能执行此操作,但使用数据读取器需要将其打开数小时。

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

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


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

你能让DataReader打开多久?我认为没有任何限制。空闲连接可能有一定的时间限制,但如果您积极使用它,它应该一直工作,直到出现网络或数据库服务器错误。如果发生这种情况,您应该尝试打开新连接并继续。