139

我目前使用 DataTable 从可以在我的代码中使用的数据库中获取结果。

但是,网络上的许多示例显示使用 DataSet 并通过集合方法访问表。

使用 DataSets 或 DataTables 作为 SQL 结果的存储方法是否有任何优势,无论是性能方面还是其他方面?

4

7 回答 7

100

这实际上取决于您要带回的数据类型。由于 DataSet(实际上)只是 DataTable 对象的集合,因此您可以将多个不同的数据集返回到单个对象中,因此更易于管理。

在性能方面,您更有可能从未优化的查询中获得低效率,而不是从 .NET 构造的“错误”选择中获得。至少,这是我的经验。

于 2008-08-05T13:12:15.873 回答
32

一个主要区别是 DataSet 可以包含多个表,并且您可以定义这些表之间的关系。

如果您只返回一个结果集,但我认为 DataTable 会更加优化。我认为必须有一些开销(授予小)来提供 DataSet 的功能并跟踪多个 DataTables。

于 2008-09-14T03:07:27.670 回答
9

在 1.x 中,曾经有 DataTables 无法做到的 DataSets 可以做到的事情(不记得具体是什么)。所有这一切都在 2.x 中发生了变化。我的猜测是这就是为什么很多示例仍然使用 DataSet 的原因。DataTables 应该更快,因为它们更轻量级。如果您只提取一个结果集,那么它是两者之间的最佳选择。

于 2008-08-05T13:10:26.487 回答
6

DataSet 的一个特性是,如果您可以在存储过程中调用多个 select 语句,则 DataSet 将为每个语句提供一个 DataTable。

于 2008-08-05T13:15:53.713 回答
3

在填充 DataTable 时可以使用一些优化,例如调用 BeginLoadData()、插入数据,然后调用 EndLoadData()。这会关闭 DataTable 中的一些内部行为,例如索引维护等。有关详细信息,请参阅本文

于 2008-09-14T02:55:38.773 回答
1

无论如何,当您只处理单个表时,我发现最大的实际区别是 DataSet 有一个“HasChanges”方法,而 DataTable 没有。但是,两者都有一个“GetChanges”,因此您可以使用它并测试是否为空。

于 2016-12-05T15:50:19.993 回答
0

DataTable 对象将表格数据表示为内存中的行、列和约束的表格缓存。DataSet 由一组 DataTable 对象组成,您可以使用 DataRelation 对象将这些对象相互关联起来。

于 2019-08-30T00:45:27.147 回答