我怎么知道何时根据C#列表插入,删除或更新?

时间:2010-09-01 21:06:21

标签: sql insert listbox sql-delete

假设我有三个表“Person”,“Area”和“Person_Area”。每个人都可以在很多地方工作,每个地区都可以有很多人。 “person_Area”是包含person_id和area_id

的桥接表

在我的代码中,我有一个位于个人表单上的两个asp列表框。列表框1包含所有可用区域,列表框2可以根据用户选择填充列表框1中的区域。放入列表框2的区域是一个人所在的区域。

这一切都很简单,但当我决定保存到我的数据库时,我不确定如何插入,更新,删除“person_Area”表。我不想为一个人重新插入一个区域,如果它已经在表中,并且用户从列表框中删除了一个区域,那么当我回发到服务器时代码如何知道删除它?

仅删除特定人员的“Person_Area”表中的所有记录,然后重新添加所有当前用户选择是否合理?还是有更好的选择?我很难过。

2 个答案:

答案 0 :(得分:2)

没有理由删除并重新插入。当你甚至不确定这些行是否已经改变时,要做很多工作。

在我看来,有两个合理的选择:

  1. 跟踪UI的“更改”(添加区域,删除区域),然后对数据库执行相同的操作(删除行,添加行)。 (你必须考虑有人添加区域的情况,然后在点击SAVE之前删除它,反之亦然。只需取消你的内部标志,不要执行INSERT然后删除)

  2. 只需按某种逻辑顺序查询该用户的person_area表(与订购列表框的方式相同)。然后一次遍历记录集和列表框中的行。如果数据库有一行不在列表框中,请执行DELETE。如果列表框中有一个不在数据库中的条目,请执行INSERT。

  3. 第二种声音对我很直接,可能是我要采取的第一种方法。

答案 1 :(得分:0)

如果您使用的是具有MERGE命令的数据库系统,这将是一个很好的方法。 MERGE命令可以根据列表与表内容的比较,在单个命令中处理INSERTUPDATEDELETE个动作。