【问题标题】:Convert SQL Datareader to Dataset in C#在 C# 中将 SQL Datareader 转换为数据集
【发布时间】:2011-09-23 07:27:49
【问题描述】:

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

【问题讨论】:

  • 你有没有想过使用SqlDataAdapter.Fill(DataTable)?
  • 目前我只使用 DataAdapter 将记录填充到数据集!
  • 我明白了,您是想从表中获取所有数据还是只获取符合特定条件的记录?
  • 只有符合指定搜索条件的记录
  • 那么返回多少条记录呢?

标签: c# .net winforms dataset datareader


【解决方案1】:

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

【讨论】:

  • 我正在尝试使用 DataReader 而不是 DataAdapter 获取数据,因为我需要处理大量数据。使用 ExecuteReader() 后,我将其加载到数据表中。那么这是否是一个好方法。 ?
  • @Harie - 我建议使用 Load() 方法。 Fill() 特别用于填充 DataSet(添加一个或多个表)、创建关系等。看看 Scott Mitchell 的文章-4guysfromrolla.com/articles/050405-1.aspx
【解决方案2】:

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

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

【讨论】:

  • +1 因为我同意 - 通过数据阅读器如何帮助减少内存使用?据推测,尽管有可能对一个看起来像 DataTable 但实际上在其中有一个 ienumerabe 以返回行数据的对象做一些疯狂的事情。这样做会很棘手,但可以防止重新编码 BL 出现问题。
猜你喜欢
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多