2010-09-01 85 views
0

我使用Visual Studio 2010c#DataSet与2个表,如何从一个行删除一行它会从另一行删除一行?

我有2个表

一个DataSet

酮(MainList)具有类型,名称,路径,参数 另一个(UpadteList)具有路径,散列,日期

我将文件添加到此列表中,并且它可以解决问题,现在我拥有以下内容:

当我添加文件类型“更新” 它将是“更新”,“我的程序”,“ .setup.exe“,”/ minimized“

,如果它是类型 “更新” 以下数据去(UpdateList) “PATH-TO-/ my.setup.exe”, “asdfwefwfgg3r34t34t34t”, “2010-09-01”

我想如果上述(MainList)的行删除,并在(UpdateList)相同路径的行exsist它会删除太

我应该使用循环或(我看到)的数据集属性使用关系

什么最好的办法?

带循环我进入了一些丑陋的错误,删除了Mainlist中的一切!

注:我使用XML来存储数据(数据不大)

+2

由于您使用的是DataSet,我假设您正在访问数据库,那么为什么不定义外键约束并利用ON DELETE CASCADE自动删除其他表中的匹配条目? – Dave 2010-09-01 13:58:50

回答

1

IMO,你有两个选择

  1. 使用DataTable的约束,如ForeignKeyConstraint与DeleteRule =级联设置。
  2. 在MainList数据表上使用RowDeleted/RowDeleting事件查找并删除其他表中的对应行。
+0

它是如何与一对多关系一起工作的? – miguelmpn 2018-01-31 18:04:46

+0

@miguelmpn,关系的基数并不重要......在一对多关系中,所有相关的子行都将在#1中删除。对于#2,您必须手动执行此操作。 – VinayC 2018-02-02 04:39:37

+0

谢谢你的回复。现在我了解Cascade,它总是从上到下。我试图删除一对多关系中的最后一个孩子,并自动删除父母(这将是孤儿),但它不会那样工作。 – miguelmpn 2018-02-02 09:32:37

0

我觉得代码可以说是放错了地方,处理数据的一致性。我会在数据库中执行该操作,无论是在存储过程中,还是在使用SQL Server时,都可能使用cascading deletes

+0

我使用XML来存储数据(数据不大) – 2010-09-03 10:34:55