数据表与数据集


129

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

但是,网络上的许多示例都显示了使用DataSet并通过collections方法访问表的情况。

使用数据集或数据表作为SQL结果的存储方法是否有任何优势(无论是性能还是其他方面)?



最终,DataTable和DataSet是从2002年的ADO RecordSet过渡而来的有用的过渡。最近,您不应该将它们当作主要的数据隐喻。
马克·格雷夫

@MarcGravell这些天,您对主要数据隐喻有何建议?
m_a_s

@m_a_s显式t-类,通常;也许是“记录”在C#vNext
马克·Gravell

Answers:


94

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

在性能方面,未优化的查询比.NET构造的“错误”选择更有可能导致效率低下。至少,这是我的经验。


29

一个主要区别是数据集可以容纳多个表,并且您可以定义这些表之间的关系。

如果您只返回一个结果集,尽管我认为DataTable会更优化。我认为要提供DataSet的功能并跟踪多个DataTable,必须有一些开销(小额)。


8

在1.x中,DataTables曾经做不到DataSets可以做的事情(不记得确切是什么)。在2.x中所做的所有更改。我的猜测是这就是为什么许多示例仍使用数据集的原因。DataTables应该更快,因为它们更轻巧。如果仅提取单个结果集,则这是您在这两者之间的最佳选择。


4
AFAIK的一大优点是,DataTable无法序列化,并且无法从WebService返回结果。
Martin Clarke

6

DataSet的一项功能是,如果您可以在存储过程中调用多个select语句,则该DataSet将为每个存储一个DataTable。


您还可以在一个SQLCommand中运行多个SQL选择查询,并访问数据集中的每个结果集。Tables[i]
1

3

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


1

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


0

DataTable对象将表格数据表示为行,列和约束的内存表格缓存。DataSet由DataTable对象的集合组成,您可以使用DataRelation对象将它们彼此关联。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.