我目前使用 DataTable 从可以在我的代码中使用的数据库中获取结果。
但是,网络上的许多示例显示使用 DataSet 并通过集合方法访问表。
使用 DataSets 或 DataTables 作为 SQL 结果的存储方法是否有任何优势,无论是性能方面还是其他方面?
这实际上取决于您要带回的数据类型。由于 DataSet(实际上)只是 DataTable 对象的集合,因此您可以将多个不同的数据集返回到单个对象中,因此更易于管理。
在性能方面,您更有可能从未优化的查询中获得低效率,而不是从 .NET 构造的“错误”选择中获得。至少,这是我的经验。
一个主要区别是 DataSet 可以包含多个表,并且您可以定义这些表之间的关系。
如果您只返回一个结果集,但我认为 DataTable 会更加优化。我认为必须有一些开销(授予小)来提供 DataSet 的功能并跟踪多个 DataTables。
在 1.x 中,曾经有 DataTables 无法做到的 DataSets 可以做到的事情(不记得具体是什么)。所有这一切都在 2.x 中发生了变化。我的猜测是这就是为什么很多示例仍然使用 DataSet 的原因。DataTables 应该更快,因为它们更轻量级。如果您只提取一个结果集,那么它是两者之间的最佳选择。
DataSet 的一个特性是,如果您可以在存储过程中调用多个 select 语句,则 DataSet 将为每个语句提供一个 DataTable。
在填充 DataTable 时可以使用一些优化,例如调用 BeginLoadData()、插入数据,然后调用 EndLoadData()。这会关闭 DataTable 中的一些内部行为,例如索引维护等。有关详细信息,请参阅本文。
无论如何,当您只处理单个表时,我发现最大的实际区别是 DataSet 有一个“HasChanges”方法,而 DataTable 没有。但是,两者都有一个“GetChanges”,因此您可以使用它并测试是否为空。
DataTable 对象将表格数据表示为内存中的行、列和约束的表格缓存。DataSet 由一组 DataTable 对象组成,您可以使用 DataRelation 对象将这些对象相互关联起来。