在VB.NET中使用DataAdapter和关系(Compact Framework)

时间:2013-01-16 23:24:26

标签: database vb.net compact-framework sql-server-ce

我一直在寻找这个问题的解决方案好几个小时但我还没有。

我有一个包含4个数据表的数据集:

    DS
    +Parent
    ++Child1
    ++Child2
    ++Child3

我在数据集上定义了关系,使用pk将父项链接到子项。

问题是当我填充(使用dataadapter.fill方法)子表时,数据库返回所有记录,而不仅仅是与父项相关的记录,因此我的数据表大于它们需要的数据并正在采取加载一段时间,因为移动设备的代码,这是一个溢价。

我不能像对待父对象一样对孩子使用WHERE过滤器,因为这取决于父数据。

在填充子表时,是否有某种方法只返回与父项相关的记录?

我必须在这里看一些东西,因为我觉得这会很简单吗?!?

谢谢你们。

编辑:构建SELECT命令时唯一已知的ID是父表的单个公共标识符。过滤子表并不好,因为只有父PK才存在这些数据,这是未知的。

2 个答案:

答案 0 :(得分:0)

您已经说过使用父PK = child fk链接到子表,因此您将在子表中有一个parentid列。 因此,填充父表的查询的格式为SELECT * FROM parent WHERE parentid = @parentid,填充子表的查询格式为SELECT * FROM child1 WHERE parentid = @parentid

答案 1 :(得分:0)

如果您只知道父ID,并且这不足以确定子表中需要哪些记录,那么您可以尝试使用封装业务逻辑的嵌套选择:

SELECT * 
FROM child1 c
WHERE c.myforeignkey in 
    (
    select p.myforeignkey
    from parent p
    where p.parentid = ...
    )

或许是LEFT JOIN?

SELECT c.* 
FROM child1 c
LEFT JOIN parent p on c.commonid = p.commonid
WHERE p.parentid = ...