Datatable与Dataset的区别

142
我目前使用 DataTable 从数据库获取结果,以在代码中使用。然而,许多网上的示例显示使用 DataSet,通过集合方法来访问表格。使用 DataSets 或 DataTables 作为 SQL 结果的存储方法,在性能或其他方面是否有优势呢?

1
如果您正在使用Web应用程序,则可以考虑使用DataReader:http://aspnet.4guysfromrolla.com/articles/050405-1.aspx http://aspnet.4guysfromrolla.com/articles/051805-1.aspx http://www.devx.com/vb2themax/Article/19887/1954?pf=true - Chris Burgess
最终,DataTable和DataSet是从2002年的ADO RecordSet中有用的过渡。如今,你不应该把它们作为你的主要数据隐喻。 - Marc Gravell
@MarcGravell,您认为现在应该选择什么作为主要的数据隐喻? - m_a_s
@m_a_s 具体 t - 类,通常指 c# vNext 中的 "records"。 - Marc Gravell
7个回答

103

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

在性能方面,您更有可能因为未经优化的查询而产生低效,而不是因为选择了“错误”的.NET结构。至少这是我的经验。


34

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

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


9

在1.x版本中,DataTables无法完成的一些事情,DataSets可以(我不记得具体是什么了)。所有这些都在2.x中得到了改变。我的猜测是这就是为什么很多示例仍然使用DataSets的原因。DataTables应该更快,因为它们更轻量级。如果你只需要拉取单个结果集,那么它是两者之间最好的选择。


4
据我所知,其中一个主要问题是DataTable无法序列化,并且不能作为WebService的返回结果。 - Martin Clarke

6

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


您还可以在一个SQLCommand中运行多个SQL select查询,并在dataset.Tables[i]中访问每个结果集。 - Jan

3

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


1
当您仅处理单个表时,我发现最大的实际差异是DataSet具有“HasChanges”方法,而DataTable没有。但是两者都有“GetChanges”,因此您可以使用它并测试是否为null。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接