如何将 DataSet a 转换为 DataReader?

Posted

技术标签:

【中文标题】如何将 DataSet a 转换为 DataReader?【英文标题】:How can I convert DataSet a to a DataReader? 【发布时间】:2011-04-01 13:54:57 【问题描述】:

如何将 DataSet 转换为 DataReader?

【问题讨论】:

你不能。如果您需要更多解释,请提供更多信息。 我觉得你正在尝试做的事情有缺陷。你想在更高的层次上做什么? 【参考方案1】:

您可以使用以下代码将数据集更改为DataReader

DataTableReader rd = ds.Tables[0].CreateDataReader();

【讨论】:

【参考方案2】:

DataSet 和 DataTable 都公开了一个 CreateDataReader 方法 创建一个 DataTableReader。 检查这些链接 -

http://msdn.microsoft.com/en-us/library/system.data.dataset.createdatareader.aspx

http://msdn.microsoft.com/en-us/library/system.data.datatable.createdatareader.aspx

【讨论】:

【参考方案3】:

DataSet 有一个名为CreateDataReader 的方法,它将创建一个DataTableReader,但我认为您不能创建一个DataReader

DataSet.CreateDataReader

【讨论】:

【参考方案4】:

如果您想通过 DataSet 进行迭代,则不需要 DataReader。 DataSet 是一个断开连接的内存对象,因此使用 for-each 遍历它:

foreach(var row in ds.Tables["YourTable"])

     var value = row.Field<int>("ID"); // etc

【讨论】:

【参考方案5】:

您不能将 DataSet 转换为 DbDataReader。

但是,您可以创建一个 DbDataReader,通过调用 DataSet 上的 CreateDataReader 方法从 DataSet 读取结果。

然而,这似乎是一件奇怪的事情。您可以使用 DataSet 的 Tables 属性和 DataTable 的 Rows 属性简单地遍历 DataSet 中包含的结果。使用 DbDataReader 将限制您仅转发对结果的访问。我可以从使用 DbDataReader 中看到的唯一好处是,如果您有一个 API 调用来进行需要一个作为参数的 API。

如果您的 DataSet 是来自数据库的 SELECT 命令的结果,您应该能够通过调用 DbCommand.ExecuteReader() 来获取 DbDataReader。这将完全删除 DataSet 并产生更高效的结果。

【讨论】:

【参考方案6】:

DataSet 是一个断开连接的内存对象。 DataReader 是一个连接的单向对象。

所以我想这是不可能的。

真的需要吗?

【讨论】:

msdn.microsoft.com/en-us/library/… - 从数据源读取只进的行流。没有说明“连接”到数据库。

以上是关于如何将 DataSet a 转换为 DataReader?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 List<T> 转换为 DataSet?

DataRead 和DataSet区别

C#中这样将DataSet转换为DataTable?

Scala - 如何将 Dataset[Row] 转换为可添加到 Dataframe 的列

聚合 C# 数据集时,如何将 DataSet 转换为 .Load() 的 DataTable 数组?

如何将具有 Decimal 的 spark DataFrame 转换为具有相同精度的 BigDecimal 的 Dataset?