像往常一樣,一些背景信息優先:如何使用DataSet將數據從一個數據庫傳輸到另一個數據庫?
數據庫A(Access數據庫) - 持有一個表,只有我需要從兩列的信息。來自這兩列的信息對於那些不能訪問數據庫A的用戶將使用的應用程序是必需的。
數據庫B(Access數據庫) - 包含僅包含兩列的表(表中列出了我們需要的鏡像一個)。數據庫B可供應用程序的所有用戶訪問。一個問題是,列名稱與數據庫A中的表名不一樣。
我需要做的是通過一個將自動運行的實用程序傳輸必要的數據,例如每週一次(兩個數據庫不需要完全同步,只需關閉即可)。轉移實用程序將從可以訪問這兩個數據庫的用戶帳戶運行(顯然)。
下面是我採取了(如果再有一個更好的辦法,請建議的距離)的方法:
抓住從數據庫A的數據只有在必要的表中的兩列。
使用DataReader對象和WriterStream對象將數據寫出到[tablename] .txt文件。我已經這樣做了,因此我可以使用schema.ini文件並強制數據列與數據庫B中的數據列具有相同的名稱。
創建一個DataSet對象,其中包含一個DataTable,用於將表數據庫B.
使用具有文本擴展屬性hdr = yes和fmt =分隔符的Microsoft.Jet.OLEDB.4.0提供程序將.txt文件中的信息吸收到DataTable中(以匹配具有模式的方式.ini文件設置和.txt文件設置)。我正在使用DataAdapter填充DataTable。
創建另一個數據集對象,含有一個反映從數據庫B.
吸在從數據庫B中的信息的表,以便它包含了所有在需要被更新的表中找到的當前數據的DataTable從數據庫A.再次,我使用DataAdapter來填充此DataTable(從步驟5,因爲他們都使用不同的數據源不同的一個)。
合併包含來自數據庫A(或.txt文件,技術上)的數據的DataTable。
更新數據庫B的表中的變化。
我已經寫了更新,刪除和手動INSERT命令因爲這是repsonsible的交談數據庫B.然而DataAdapter的,這個邏輯是從未使用過,因爲數據集 - 從 - 數據庫 - B.Merge(數據集-From-TxtFile [tableName])不會翻轉HasChanges標誌。這意味着DataSet-From-Database-B.Update不會觸發任何命令。
那麼有沒有什麼辦法可以從DataSet-From-TxtFile中獲取數據來合併並使用我正在使用的方法應用到數據庫B?我錯過了關鍵的一步嗎?
我知道我總是可以從數據庫B的表中刪除所有記錄,然後插入文本文件中的所有記錄(即使我必須遍歷DataSet中的每條記錄並應用row.SetAdded以確保觸發器HasChanges標誌),但我寧願它只應用每次更改。我正在使用c#和2.0框架(我意識到我意味着我可以使用DataTables和TableAdapters而不是DataSets和DataAdapters,因爲我只處理單個表,但無論如何)。
TIA
該文件是因爲兩個數據庫中的列名不同,所以我不確定DataAdapter會如何反應。通過使用該文件,我可以將數據強制轉換爲具有匹配列名的DataSet(通過使用schema.ini文件並在文本文件中寫出列標題)。 – 2008-10-24 17:13:13