繁体   English   中英

SQL Server内置的更改跟踪与Sync Framework的C#/ VB库

[英]SQL Server built-in Change Tracking vs Sync Framework's C#/VB libraries

在Windows XP 32位/ SQL Server Express 2008(x86)上还原的数据库上,使用以下代码未更改数据库中Sync Framework 2.1元素的副本密钥映射和scope_info表中的scope_id值时,我遇到了一个问题)。 它可以在我的其他Windows 7 64位/ SQL Server Express 2008(x86)客户端上运行:

SqlSyncStoreRestore databaseRestore =新的SqlSyncStoreRestore(clientConn); databaseRestore.PerformPostRestoreFixup();

子问题1:它不起作用,但也不会引发任何异常,这使得故障排除变得更加困难。 它是从我在x64计算机(使用Visual Studio x86)上构建的小型控制台应用程序(目标x86)执行的。 我不知道32/64位是不是罪魁祸首。 有任何线索吗? 但是,这让我感到奇怪:

子问题2:“是否存在一个与使用Sync Framework的C#的PerformPostRestoreFixup()等效的SQL查询?”

我是Sync Framework的新手,但是我还没有完全看到Microsoft SQL Server数据库同步的全部情况。 引起我注意的是SyncOrchestrator / SqlSyncProvider组合不使用内置的SQL Change Tracking东西。 令我惊讶的是! 现在,这让我为一个更痛苦的问题困扰:

子问题3:内置SQL Server更改跟踪和同步框架是否是两个完全独立的平台,可在此平台上构建我们的同步方案? 我希望我使用正确的英语单词。 换句话说,他们每个人都完全不知道对方吗?

在此先感谢您的帮助! 我真丢了大声笑!

亲切的问候,

Zyxy

问题1-您是否尝试过启用同步fx跟踪?

VS项目属性->生成选项卡下的平台目标应与已安装的Sync Fx平台匹配。 例如,x86平台目标应具有Sync Fx x86

如果x86 / x64东西不匹配,通常会引发COM异常。

问题2-您可以运行SQL事件探查器以查看PerformPostRestoreFixup。 但是我会坚持使用框架,因为其中涉及一些同步元数据处理。

问题3-SQL更改跟踪只是更改跟踪。 您仍然需要一个同步应用程序才能使用它。

SQL CT跟踪已更改的内容,并允许您查询已更改的内容。 它本身不是一个同步平台。

您需要一个同步应用程序来查询它,就像Sync Fx。 或者,您可以手工编写自己的SQL查询来查询更改。

Sync Fx较旧的SQLCeClientSyncProvider / DBServerSyncProvider / Sync代理(在本地数据库缓存项目项中使用的一种)可以使用SQL CT。

更新:为什么它没有更改值但也没有引发异常的原因? 以下是最有可能的解释。 它没有完全回答关于为什么scope_id无法更新的问题,但是它确实提供了其他提示:

PerformPostRestoreFixup()适用于数据库中的所有范围。 我在数据库中定义了另一个(有效)范围,该范围已成功更改其scope_id值。 但是,我的第二个作用域(我不能更改scope_id的作用域)存储在另一个模式(不是默认的.dbo)中。 我想它只是没有看到范围,或者认为它无效,因此没有理会我。 我试图取消设置第二个范围,并收到以下错误:


在表“ [scope_info]”中找不到名称为“ syncScope”的有效范围。 确保此作用域存在,并且在配置表'[scope_config]'中具有相应的有效配置。

因此,这两个问题可能具有相同的根本原因。

第二个作用域的确存在,我可以使用select语句查看该目标范围的ID。 现在如何判断配置是否有效? 成功还原后,为什么突然变成无效? 我认为范围缩小,但还不够我嘿嘿;-)我会继续张贴我的调查结果和解决方案,以防有人曾经给一个该死的LOL! 只是开个玩笑,但是有一天,whow知道这可能对谁有帮助(或造成混淆),这取决于我想那一天的心情;-)干杯!

好的,感谢JuneT向我介绍了Sync Fx 2.1 SDK的文档(在这里还是在另一个讨论线程上阅读它?),我意识到我有一个尚未尝试的属性。 在线阅读Sync Fx 2.0(及其他?)存在非dbo模式问题以及多范围数据库问题,我想尝试一下。 只需在我的控制台应用程序中添加以下C#行即可解决该问题!

databaseRestore.ObjectSchema =“ syncSchemaName”;

最终,许多JuneT指出了我一些不错的阅读材料,因此,我将其标记为答案。 非常感谢!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM