2011-09-17 147 views
0

我有一個使用Visual Studio 2010的配置嚮導創建的具有兩個TableAdapter(1對多關係)的DataSet。DataSet TableAdapter填充方法

我打電話給外部來源,然後用結果填充字典。這些結果應該是數據庫中的所有條目。要同步數據庫,我不想只清除所有的表,然後重新填充它們,比如刪除表並使用sql中的新數據創建它們。

有沒有一種乾淨的方式可能使用TableAdapter.Fill()方法,或者我必須循環遍歷兩個表,並決定它是否保留或被刪除,然後添加新的條目?使字典中的數據成爲DataSet中兩個表中唯一的數據的最佳方法是什麼?

回答

0

第一個問題:如果它是相同的數據庫爲什麼你有2個表具有相同的信息?

對於手頭的問題:該largley取決於大小。如果表不大,那麼使用事務,清除表(DELETE * FROM TABLE或其他),然後再在那裏寫入數據。 如果表格很大,問題是:你可以將所有這些加載到你的字典中嗎?

當然,你要問自己會發生什麼不一致的數據(其他用戶/應用程序更改的數據,而你在你的字典裏有它)。

如果這需要長期,你可以記住你所做的數據是什麼 - 這意味着:標誌更改的數據並記住刪除鍵和新插入的行,並根據您的更新。

兩者都可以通過記住Filled DataTable並將其用作後臺字段或實現自己的機制來實現。

以任何方式,我會建議想想問題:你真的需要字典嗎?爲什麼不對數據庫進行查詢以獲取數據?或者只緩存一部分數據以便快速訪問?

PS:在你的更新方法的DataAdapter會做所有的工作(改變改變,刪除已刪除和插入新的數據行,但它會更新數據表/設定所以這隻能使用一次)

+0

我只能訪問我正在修改的數據庫。另一個數據庫是在Active Directory中的某處,我只能通過System.DirectoryServices api訪問,所以我將結果存儲在散列數據結構中。如果我只能訪問DataSet,是否有直接使用sql的方法? – Ben

+0

你可以寫入AD數據庫嗎?如果是這樣,爲什麼要使用你的onw數據庫(性能?)也許你可以找到一種方式與AD的數據庫專家合作? – Carsten

+0

我只能從AD讀取。主要是因爲表現,我需要我的老闆使用我自己的數據庫。它是存儲在AD中的一小部分數據,但我不想寫入它,因爲AD就像主數據庫,我模仿它的一小部分。 – Ben

0

它可能是重新填充整個表比重複遍歷整個表更快,並決定記錄的保留/停留。你可以不通過sql語句來決定是否刪除記錄嗎? (如果你希望他們留在數據庫中,但不在數據集中,則從表中刪除其中active = false的表)

你可以有一個日期字段並選擇所有記錄自從你遲到'彙集'數據庫的日期之後添加(從*表中選擇*,其中active = true和date-added>#12:30#)

+0

我在想,用DataTable和DataRow類創建一個新表可能更容易,然後將它傳遞給Fill方法?我一直在想一個能夠爲我做這件事的sql語句,但這會比查看活動列更復雜。我有一張表格,然後是一張帶有fk的成員表格,表格歸屬於他們所屬的組織。 – Ben

+1

@Ben SQL是一種強大的數據操縱語言,您可以輕鬆地從選定的字段創建臨時表,甚至可以將其他表彼此附加...也許您需要退後一步,看看更大的圖片? – spacemonkeys

+0

希望我能......老闆和其他團隊成員要求我這樣做。 – Ben