我正在使用SQL CE 3.5,Microsoft.Synchronization.Data.SqlServerCe 3.1和MSSQL 2008,對於每次插入,我都會使用ApplyChangeFailed事件捕獲相同的異常在ServerSyncProvider上。同步錯誤:「SQL Server更改跟蹤已清理跟蹤...」
我得到這個錯誤爲每個插入同步:「SQL Server更改跟蹤已清理跟蹤信息爲 表'''%s''''。要從此錯誤中恢復,客戶端必須重新初始化其本地數據庫並嘗試再次同步。「
我插入行當獲得了此片SQL的:「IF CHANGE_TRACKING_MIN_VALID_VERSION(的object_id(N ''[TargetMetricValue] ''))> @sync_last_received_anchor RAISERROR(N''SQL服務器變化跟蹤已經清理爲 跟蹤信息''''%s''''要從這個錯誤中恢復,客戶端必須重新初始化它的本地數據庫並嘗試再次同步。'', 16,3,N''[TargetMetricValue]'')「和得到這個:「@ sync_last_received_anchor = 0」
CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N''[TargetMetricValue]''))返回146113,因爲它大於0,所以拋出上述異常。
在ServerSyncProvider類方法上調用ApplyChanges => serverSyncProvider.ApplyChanges(groupMetadata,dataSet,syncSession);
groupMetadata.NewAnchor = NULL,groupMetadata.TablesMetadata [0] = .LastReceivedAnchor.Anchor空,groupMetadata.TablesMetadata [0] = .LastSentAnchor.Ancor字節[] {127,35,6,0,0,0, 0,0}
我敢打賭LastReceivedAnchor有關sync_last_received_anchor,但我不打電話syncAgent.Synchronize後得到任何有效的值()
同樣在SqlCeClientSyncProvider方法GetTableReceivedAnchor我得到空和GetTableSentAnchor我得到的值的byte [] {} 127,35,6,0,0,0,0,0。
那麼,爲什麼我會得到這個值null(0)?
根據第一評論UPDATE:
我有初始CE數據庫文件xyz.sdf它的連接字符串中的app.config爲聲明: 「添加名稱=‘的localConnection’的connectionString =「數據源= | DataDirectory目錄| \ DATA \ xyz.sdf;最大數據庫大小= 3968" 的providerName = 「System.Data.SqlServerCe.3.5」」
它使用此代碼初始化:
public SyncAgent()
{
systemTables = new List<string> {"__syncArticles", "__syncSubscriptions", "__syncTransactions"};
ClientSyncProvider = new SqlCeClientSyncProvider(ConfigurationManager.ConnectionStrings["localConnection"].ConnectionString, true);
LocalProvider = ClientSyncProvider;
InitializeAllSyncTables();
}
你是如何初始化客戶數據庫的?你使用本地數據庫緩存嚮導來生成同步Fx代碼還是你手動編寫代碼? – JuneT 2011-05-02 14:33:42
它是預定義的sdf文件,更新後的更多細節。 – 2011-05-02 15:15:06
任何機會,你有沒有嘗試增加保留和清理窗口?你可能已經看過http://social.microsoft.com/Forums/en-US/syncgeneral/thread/cc3d49e0-f188-4d93-b2dd-473137ae9fc6和http://www.sqlmonster.com/Uwe/Forum。 aspx/sql-server-ce/3911/MSFT-Client-must-reinintialize-database-error – 2011-05-02 16:19:16