【问题标题】:Filter DataSet for relational data过滤关系数据的数据集
【发布时间】:2012-01-03 22:50:48
【问题描述】:

我在数据库中有几个表,父表说 P 与某些子表具有 1:1 关系,而与其他子表具有 1:M 关系。

为此,我在设计时通过“添加 -> 新项目 -> 数据集 -> DataSet1.xsd”添加了数据集
因此,我拥有所有必需的表格以及它们的 1:1 或 1:M 关系。

我在主表适配器上应用了一些过滤器,以便仅将父表中的选定记录及其相关子记录填充到数据集中。最后,我想将这些数据从 DataSet 写入 Xml 文件。

但是,我遇到了一个问题——我得到的最终数据集包含子表中的所有记录。相反,它应该只有那些父表具有相关记录的子记录。

我正在使用以下代码 -

ParentDataSet parentDataSet = new ParentDataSet();
 ParentTableAdapter parentTableAdapter = new ParentTableAdapter();
 parentTableAdapter.Fill(parentDataSet.ParentTable, column1Value); // All fine until here as I have applied filter in tableAdapter SQL

 ChildTableAdapter childTableAdapter = new ChildTableAdapter();
 //returns all rows in the child table -- shouldn't it return only those child records for which parent dataset table is having records??
 childTableAdapter.Fill(parentDataSet.ChildTable);  

 parentDataSet.WriteXml(xmlFilePath);

请指导我在这里缺少什么?

谢谢!

【问题讨论】:

    标签: c# .net dataset


    【解决方案1】:

    你见过this article吗?作者是这么说的

    默认情况下,DataSet 设计器将DataRelations 设置在 父子表为“仅关系”。这意味着DataSet 不会对客户端强制执行外键约束,只是您的 数据库...

    尝试将父子关系的类型更改为外键约束。然后,检查ChildTableAdapterSelectCommand 属性。它以您期望的方式过滤数据。

    【讨论】:

    • 感谢您的回复。它没有解决问题 - 所以看来我必须为相关表添加过滤器以及为父表添加过滤器。
    • 我最终为父表和相关子表添加了过滤器:-)
    • @iniki 由于我的回答并没有真正解决问题,您应该将您的解决方案作为单独的答案发布并接受它。 (您可以接受自己对您提出的问题的回答。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 2021-08-07
    • 1970-01-01
    • 2021-04-10
    • 2021-03-09
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多