2011-09-09 76 views
0

我一直在這個問題上幾天,希望有人可能有一個答案。我想對這個問題的更一般的描述是,多個用戶將從一個應用程序的多個實例中訪問一個數據庫,並且我想盡可能保持當前數據的副本。這是我目前的嘗試,但我願意保證本地副本與數據庫同步。更新本地數據表,從數據庫

我有兩個數據表:
dtOriginal被加載在應用程序的啓動和允許用戶對其進行編輯。

dtFromDb是在用戶更改窗體上顯示的記錄並僅包含更改後顯示的記錄的當前值時加載的。

我試圖從dtFromDb只有在dtOriginal該行沒有被標記爲「修改」的值更新dtOriginal表。

我已經與System.Data.DataTable類的合併方法嘗試此。

StronglyTypedDataTable dtOriginal = StronglyTypedDataTableAdapter.GetData(); 
// User modifies one record through collectionview... 
// displayed record is then changed and the following occurs 
StronglyTypedDataTable dtFromDb = StronglyTypedDataTableAdapter.GetDataByID(currentID); 
dtOriginal.Merge(dtFromDb, true); 

我本來期望的是其標記爲「未被改變」的任何行會被更新與數據庫中的任何新的本地值,如果他們在程序的另一個實例已經改變並傳播回數據庫, 但這種情況並非如此。它看起來像dtFromDb確實從數據庫獲取更新的值,但我不能正確使用合併方法,因爲更新的值不會傳播到本地副本。

任何想法將不勝感激。

感謝,

泰勒

+0

要更新dtFromDb的價值dtOriginal或數據庫?並且還告訴你如何使用任何循環來更新數據庫中的記錄? –

回答

0

我看到你吃試圖解決手工的東西,不屬於你的應用:數據併發性!

當你想要保存改變只發送到數據庫中,如果您的設計和數據層是好的或者保存會失敗,如果有人改變的東西,否則會走就好了。

或者你能想象到的刷新按鈕添加到您的網頁或網格,如果用戶點擊刷新通常本地更改將丟失。被分配的應用程序讓它分配和誰先保存將贏。我不認爲你應該加載兩次,並同步這兩個表客戶端。

+0

這實際上是一個非常好的主意。我不知道爲什麼我以前沒有考慮過刷新按鈕。現在保存工作,但只是覆蓋數據庫中無論用戶在表單中的任何內容,所以沒有樂觀​​的併發檢查。我猜如果我把樂觀的貨幣檢入,刷新按鈕會更有意義。謝謝您的幫助! – user937180

+0

無論如何,如果您手動合併本地更改,除非您在正確實施最後一個細節時做出了非常大的努力,那麼您將如何決定哪些更改必須覆蓋哪些其他更改?讓數據庫處理併發,誰點擊保存第一勝,其他人將基於舊記錄過時更改,並且在保存失敗的情況下有意義刷新數據... –