Sql server 2008 SQL CE 3.5 SP 2,SqlCeEngine.Compact()同步错误

Sql server 2008 SQL CE 3.5 SP 2,SqlCeEngine.Compact()同步错误,sql-server-2008,compact-framework,sql-server-ce,microsoft-sync-framework,.net-cf-3.5,Sql Server 2008,Compact Framework,Sql Server Ce,Microsoft Sync Framework,.net Cf 3.5,我有一个坚固的设备应用程序(.NET CF),使用SQL CE 3.5 SP 2数据库,当设备对接到支架中时,该数据库通过USB与使用Microsoft Sync Framework 2.1的SQL Server 2008同步 最近,设备应用程序在SDF中遇到一些数据库损坏问题,因此我实现了一些在启动时运行的维护代码,这些代码使用SqlCeEngine验证、修复和压缩方法。基本上,应用程序使用验证方法检查SDF,修复它(或失败),然后在启动应用程序之前压缩它 从那以后,一切都运行得很好,所以我只

我有一个坚固的设备应用程序(.NET CF),使用SQL CE 3.5 SP 2数据库,当设备对接到支架中时,该数据库通过USB与使用Microsoft Sync Framework 2.1的SQL Server 2008同步

最近,设备应用程序在SDF中遇到一些数据库损坏问题,因此我实现了一些在启动时运行的维护代码,这些代码使用SqlCeEngine验证、修复和压缩方法。基本上,应用程序使用验证方法检查SDF,修复它(或失败),然后在启动应用程序之前压缩它

从那以后,一切都运行得很好,所以我只是实现了每次同步设备时都执行相同例程的代码,当我从Microsoft找到这篇KB文章时:

对同步到中央数据库服务器的SQL Server Compact 3.5客户端数据库执行SqlCeEngine.Compact方法后,可能无法上载对客户端数据库的某些更改-

这篇文章相当含糊,没有提供关于为什么会发生这种情况的信息,也没有提供SQL CE 3.5 SP 2中是否已修复这种情况的信息。有人能提供更多关于为什么会发生这个问题的信息吗

另外,文章建议的解决方法是使用收缩方法,但是考虑到它们(本质上)执行相同的功能,为什么我们可以使用收缩而不是压缩

我知道这篇文章提到的是Microsoft Synchronization Services for ADO.NET,而不是Sync Framework 2.1,但我只是想看看这个问题是否适用于我的情况。我的理解是,ADO.NET的同步服务构建在同步框架之上,它允许使用WCF服务进行同步

我已经运行了一些测试,在这些测试中,我在客户端和服务器上都进行了更改(双向同步),压缩SDF,然后与服务器同步,所有内容似乎都在正确同步,但我想确定一下

如果有人能提供一些这方面的信息,我们将不胜感激。

Compact()方法会创建一个新的数据库,有时同步锚会被重置

见:


如果您在Windows Mobile设备上使用它,这就是您正在使用的ADO.NET(设备)服务的同步。

感谢您的回复。链接中的修补程序已应用于我正在使用的SQL CE 3.5 SP2。这是否意味着我可以使用Compact()呢?而且,我的同步完全是在“服务器”机器上完成的,客户机不知道。这些步骤是:将SDF从设备复制到服务器、与SQL server同步、复制回设备。同步和数据库配置使用同步框架2.1 API完成。我假设这意味着我没有实际使用ADO.NET的同步服务?您使用的是哪个提供程序?客户端是Microsoft.Synchronization.Data.SqlServerCe.SqlCeSyncProvider,服务器是Microsoft.Synchronization.Data.SqlServer.SqlSyncProvider。然后,您使用的是最新的同步提供程序,而不是ADO.NETOk的同步服务,这意味着我的问题中关于KB中的bug的文章不适用于我的情况,我可以安全地使用Compact()方法吗?