0

我有一个坚固的设备应用程序 (.NET CF),它使用 SQL CE 3.5 SP 2 数据库,当设备插入底座时,它通过 USB 使用 Microsoft Sync Framework 2.1 与 SQL Server 2008 同步。

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

从那时起,一切都运行良好,所以我刚刚实现了每次设备同步时执行相同例程的代码,当我发现这篇来自 Microsoft 的知识库文章时:

对同步到中央数据库服务器的 SQL Server Compact 3.5 客户端数据库执行 SqlCeEngine.Compact 方法后,可能无法上传对客户端数据库的某些更改- http://support.microsoft.com/kb/967502#适用于

这篇文章很模糊,没有提供关于为什么会发生这种情况的信息,或者它是否已在 SQL CE 3.5 SP 2 中修复。任何人都可以提供更多关于为什么会发生这个问题的信息吗?

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

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

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

如果有人可以提供一些有关这方面的信息,将不胜感激。

4

1 回答 1

2

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

见: http: //support.microsoft.com/kb/969858

if you're using it on Windows Mobile devices, that's the Synchronization for Services for ADO.NET (Devices) that you're using.

于 2013-03-13T11:56:10.947 回答