数据表与数据集

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

但是,Web上的很多示例使用DataSet来代替,并通过collections方法访问表。

使用DataSets或DataTable作为SQL结果的存储方法是否有任何明智或性能优势?

0
额外 编辑
意见: 1
额外 作者 GernBlandston,

6 答案

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

0
额外
您还可以在一个SQLCommand中运行多个SQL选择查询并访问数据集中的每个结果集。表[i]
额外 作者 Jan,

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

性能方面,你更可能从比从.NET构建的“错误”的选择未经优化的查询得到的低效率。至少,这是我的经历。

0
额外

在1.x中曾经有过DataTables无法完成的事情,哪些DataSets可能(不记得到底是什么)。所有这些都在2.x中改变了。我的猜测是这就是为什么很多示例仍然使用DataSets。数据表应该更快,因为它们更轻量。如果你只是拉动一个结果集,那么这是你在两者之间的最佳选择。

0
额外
AFAIK的一大问题是DataTable无法序列化,并且无法通过WebService返回。
额外 作者 Martin Clarke,

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

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

0
额外

当你只处理单个表时,我发现的最大的实际区别是DataSet有一个“HasChanges”方法,但DataTable没有。两者都有一个“GetChanges”,所以你可以使用它并测试null。

0
额外

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

0
额外