在 C# 中将 SQL Datareader 转换为数据集

Posted

技术标签:

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

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

【问题讨论】:

你有没有想过使用SqlDataAdapter.Fill(DataTable)? 目前我只使用 DataAdapter 将记录填充到数据集! 我明白了,您是想从表中获取所有数据还是只获取符合特定条件的记录? 只有符合指定搜索条件的记录 那么返回多少条记录呢? 【参考方案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 出现问题。

以上是关于在 C# 中将 SQL Datareader 转换为数据集的主要内容,如果未能解决你的问题,请参考以下文章

C# DataReader:Sql 批处理命令并返回结果

C# - 将 DataReader 转换为 DataTable

在 C# 中将 SQL 查询转换为 LINQ 方法语法

在 C# 中将字符串转换为 DateTime 并写入 SQL

如何在 SQL Server 或 C# 代码中将行转换为列

在 C# 中将十六进制值从 SQL Server 转换为日期时间