我正在使用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