2009-10-30 21 views
0

我的asp.net 3.5應用程序中有一個本地數據緩存。我注意到有一段時間,特別是在開發我的本地數據庫將與服務器不同步的時候。我明白爲什麼,我可以通過以下步驟重現:本地數據緩存 - 如何強制與數據庫完全同步?

1- Start the app 
2- Make a change 
3- Sync changes with server 
4- Start the app again, thus forcing the app to use a new copy of 
the local .SDF file. 

我做了以前顯然走了變化,但是當我與服務器同步,它們不會拉下。我的猜測是,應用程序沒有檢測到數據庫不同步。

我在想什麼是如果有一種方法來編程告訴我的應用程序與服務器完全同步。有人知道嗎?

+0

Retag。沒有C#3.5(請參閱http://stackoverflow.com/questions/247621/what-are-the-correct-version-numbers-for-c) – Vaccano 2009-11-02 22:54:04

+0

我不清楚第4步。爲什麼要重新啓動應用程序強制SQLCE數據庫的「新副本」?您是否正在使用Visual Studio運行應用程序,在SDF上將「複製到輸出目錄」設置爲「始終複製」? – Aaronaught 2009-12-27 22:53:01

+0

主要是亞倫...雖然它沒有設置爲總是複製。這是在變化的副本 - 並且它已經足夠長了,我不記得什麼類型的變化會強制重新複製.. :) – bugfixr 2010-01-04 13:18:45

回答

1

我在Microsoft論壇中獲得的answer可能會爲您的問題提供解決方案。

如果通過將主鍵設置爲自身來更新有問題的表,那麼記錄的版本將增加,並且它們將包含在下一次同步中。您可以使用類似於以下的SQL語句來執行此操作。

update MyTable set Id = Id; 

請注意,您的方案存在一些差異。

  1. 你會增加版本,而不是像我的情況下初始化它。
  2. 您將在服務器上操作更改跟蹤,而不是在Compact Edition數據庫中操作。

沒有經過測試,我認爲這個解決方案應該爲你工作 - 讓我們知道你的方式!

0

正如我在評論中指出的那樣,我不確定爲什麼您的本地數據庫會被頻繁覆蓋,但如果它被覆蓋,並且不會重新同步以前發送到服務器的更改,那麼問題很可能是錨點存儲在服務器上。即使客戶端數據庫已經「回滾」到以前的版本,服務器並沒有意識到這一點,並且無法找到。

當然,完全取決於個人如何實際實現同步和定位邏輯,所以我只能猜測的具體問題,但爲了解決這個問題,您需要做一個兩件事情:

  • 有一個腳本,您在服務器上運行,重置您使用的開發客戶端ID的客戶端錨點;或
  • 將項目中SDF的構建副本屬性(「複製到輸出目錄」)更改爲「不要複製」,以免本地數據庫被覆蓋。

希望有幫助。

0

如果SQL Services中的跟蹤更改間隔選項太小,您還會錯過更新。

例如如果它設置了2天,那麼發生了變化,那麼在同步嘗試前3天,您將錯過這些更改。

雖然通過更改上面的記錄來確保更新,但我發現對於我來說最好的方法是將每個同步表的上次同步日期存儲在單獨的同步表中,並讓該表完全下載時間。

然後允許同步發生。

然後,對於未通過同步進行更新的每個表,請檢查日期是否大於Track Changes時間間隔之前。如果是,請更改該表的同步選項以完成下載並再次同步。

有點浮腫,我知道...

相關問題