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.

我之前所做的更改显然已经消失了,但是当我与服务器同步时,它们并没有被拉下来。我的猜测是应用程序没有检测到数据库不同步的地方。

我想知道是否有办法以编程方式告诉我的应用程序与服务器进行完全同步。有人知道吗?

4

3 回答 3

1

我在 Microsoft 论坛中获得的答案可能会为您的问题提供解决方案。

如果您通过将主键设置为自身来更新相关表,则记录的版本将递增,并且它们将包含在下一次同步中。您可以使用类似于以下的 SQL 语句来执行此操作。

update MyTable set Id = Id;

请注意,您的方案存在一些差异。

  1. 您将增加版本而不是像我的情况那样对其进行初始化。
  2. 您将在服务器上而不是在 Compact Edition 数据库中操作更改跟踪。

未经测试,我认为该解决方案应该适合您-让我们知道您的进展情况!

于 2009-12-27T22:46:01.807 回答
0

如果 SQL Services 中的 Track Changes Interval 选项太小,您也会错过更新。

例如,如果它设置为 2 天,然后发生更改,那么在尝试同步前 3 天,您将错过这些更改。

在确保通过更改上述记录进行更新的同时,我发现对我来说最好的方法是将每个同步表的上次同步日期存储在单独的同步表中,并每次都完全下载该表。

然后让同步发生。

然后,对于每个未被同步更新的表,检查日期是否超过了 Track Changes 间隔之前。如果是,请更改该表的同步选项以完成下载并再次同步。

有点花哨,我知道...

于 2010-01-24T01:05:02.003 回答
0

正如我在评论中指出的那样,我不确定为什么您的本地数据库会如此频繁地被覆盖,但如果它确实被覆盖,并且不会重新同步先前发送到服务器的更改,那么问题就出在锚点可能存储在服务器上。即使客户端数据库已经“回滚”到以前的版本,服务器也没有意识到这一点,真的没有办法找到。

当然,如何实际实现同步和锚逻辑完全取决于个人,所以我只能猜测问题的具体情况,但为了解决它,你需要做以下两件事之一:

  • 拥有一个您在服务器上运行的脚本,该脚本会为您使用的开发客户端 ID 重置客户端锚点;或者
  • 将项目中 SDF 的构建副本属性(“复制到输出目录”)更改为“不复制”,这样本地数据库就不会被覆盖。

希望有帮助。

于 2009-12-27T23:06:22.160 回答