【问题标题】:ADO.NET DataSet usageADO.NET 数据集使用
【发布时间】:2011-01-06 23:28:51
【问题描述】:

我目前正在尝试在 C# 中使用带有 DataGridView 的 SQLite 数据库。

我看过一个示例程序,它执行以下操作:

DataSet combinedDataSet = new DataSet();
DataTable ContactsTable = CombinedDataSet.Tables.Add("contacts");
DataTable FoodTable = CombinedDataSet.Tables.Add("food");

SQLiteDataAdapter ad = new SQLiteDataAdapter(command)

ad.Fill(FoodTable);
ad.Fill(ContactsTable);

此数据表随后用作数据网格视图的源。

我的问题是这样的:

为什么使用数据集?为什么不直接使用 DataTable?

我确信有一个很好的理由,但是从代码中取出它后,它仍然看起来运行良好。

【问题讨论】:

    标签: c# datatable dataset


    【解决方案1】:

    DataSet 是关系数据的内存表示。特别是,它可能包含多个 DataTables,以及它们之间的关系。


    请参阅“DataSets, DataTables, and DataViews (ADO.NET)”以获得一组很好的概述文章。您将看到 DataSet 如何维护 DataRelation 对象的集合,以及每个 DataTable 如何维护它自己的父子关系集合。

    【讨论】:

    • 这是您购买的数据表与数据集之间的关系。如果不需要相关的数据表函数,可以跳过使用数据集。
    • 他们有什么样的关系需要DataSet?
    • 父子关系或任何其他外键关系中的关系。客户->订单->订单详情->产品。与实际数据库相同。
    • 我明白了。如果没有 DataSet,这是不可能的,还是只是将它们很好地打包在一起?
    • @Mark:他们都必须一起工作,所以他们必须一起成为。当 Order 表中没有父行时向 OrderDetails 表中添加一行必须引发异常(参照完整性),但这只有在两个表以及它们之间的关系同时存在时才有效。
    【解决方案2】:

    我同意这里没有特别的理由将 DataTables 放入 DataSet。 DataSet 只是一个方便的容器,用于传递 DataTables,包括可能传递给 Session。

    如果您认为根据需要单独调用 DataTables 并且不将它们在 DataSet 中相互关联起来更简单、更清晰,那将可以正常工作。

    【讨论】:

      【解决方案3】:

      从实际的角度来看,如果您使用DataAdapter 对象执行更新,则可能需要使用DataSet 对象。例如,如果要使用DataAdapter.Update 方法,则必须将DataSet 对象传递给它。

      【讨论】:

      • 感谢您的回复,但我正在将该方法传递给 DataTable 并且它似乎可以工作..(如上)
      • Update 方法接受 DataTable?有趣的。我没有意识到这有效。
      【解决方案4】:

      只有 DataTables 没有 DataSets 是完全可以的

      除了@John Saunders 所说的关系之外, 我还能想到另外两个好处

      使用类型化数据集(从 xsl 生成)时,您通常在数据集级别上工作,因为类型化数据表嵌套在 DataSet 中。

      数据集对于调试很有用。在中间窗口中,您可以调用combinedDataSet.GetXml() 进行查看或将其保存到文件中以便更好地分析内容。我不确定新的 dotnet-4 是否允许 Table.GetXml() 但不存在 dotnet-3.5 table.GetXml()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-08
        • 2011-11-19
        • 2012-02-01
        • 2011-01-06
        • 1970-01-01
        • 2010-10-15
        • 2015-11-06
        • 2010-12-11
        相关资源
        最近更新 更多