2010-09-01 52 views
3

假设我有三个表格“Person”,“Area”和“Person_Area”。每个人都可以在很多地方工作,每个地区可以有很多人。 “person_Area”是一个桥表,它包含person_id和area_id我如何知道何时基于C#列表插入,删除或更新?

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

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

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

+0

您正在使用哪种数据库系统? – bobs 2010-09-01 21:22:47

+0

您是否考虑过使用一些跟踪数据集更改的技术?或者你是否使用计划对象或某些ORM? – MikeG 2010-09-01 21:53:54

+0

嗨迈克......我喜欢布拉德的第二个解决方案如下,但我对数据集追踪变化的能力感兴趣。我不知道这是可能的。你会碰巧有一个快速解释或链接? – Ashley 2010-09-02 08:02:47

回答

2

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

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

  1. 轨道“变化”的UI(增加了一个区域,去除的区域),然后执行相同的操作(删除行,加行)针对数据库。 (你必须考虑有人添加一个区域的情况,然后在触及SAVE之前将其删除,反之亦然。只需取消内部标志,不要执行INSERT然后删除)

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

第二个声音非常直截了当,可能是我会采取的第一种方法。

+0

布拉德我喜欢你发布的第二个答案。第一不是很多。我之前在代码中看到过它,它变得混乱。在我检查你之前,我对其他一些答复也很好奇,我会做一些测试。 – Ashley 2010-09-02 08:05:06

0

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

+0

嗨bobs ...我使用的是sql server 2008.我只是对合并命令进行了一些窥探,我将需要做更多的研究来了解它是否可以使用它。 – Ashley 2010-09-02 08:03:47

相关问题