2011-09-23 14 views
0

我将大量记录从数据库导出到数据集,这可能是导致System.OutofMemory异常的原因。为了防止这种情况,作为第一步,我决定使用SQL Datareader。我担心的是演示文稿不应该改变,并且BL中应该有最小的代码更改,我应该在DL中编写一个方法,它应该使用SQL读取器检索数据并填充数据集并返回BL。将SQL Datareader转换为C#中的数据集#

+0

你有没有想过使用SqlDataAdapter.Fill(DataTable)? – Dani

+0

目前我只使用DataAdapter来填充记录到数据集! – banupriya

+0

我明白了,您是想从表格中获取所有数据还是仅记录符合特定条件的记录? – Dani

回答

2

您可以使用DataTable.Load()方法。

+1

我试图使用DataReader获取数据,而不是的DataAdapter,因为我需要处理大量的数据。在使用ExecuteReader()之后,我将它加载到数据表中。所以这是否是一个好方法。 ? – kbvishnu

+0

@哈里 - 我建议Load()方法。 Fill()特别用于填充DataSet(添加一个或多个表),创建关系等。看看Scott Mitchell的文章 - http://www.4guysfromrolla.com/articles/050405-1.aspx – adatapost

1

无论你还是框架填充DataSet,都会产生OutOfMemoryException。 你必须return an IEnumerable并更改BL代码来处理它。

或者,您可以尝试设置DataTable.MinimumCapacity以避免内存碎片。

+0

+1,因为我同意 - 通过数据读取器进行如何帮助减少内存使用量?据推测,虽然可能会用一个看起来像DataTable的对象做一些疯狂的事情,但实际上它内部有一个ienumerabe来返回行数据。这将是棘手的,但可以防止重新编码BL的问题。 – Chris