2010-09-01 48 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

相關問題