首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >筛选MS Sync框架

筛选MS Sync框架
EN

Stack Overflow用户
提问于 2009-08-06 22:52:39
回答 3查看 2.5K关注 0票数 0

您好,已经说过,过滤适用于最新版本的Microsoft Sync Framework。因此,我使用了从客户端到服务器的过滤器传递

在服务器(启用了更改跟踪的sqlServer08)上,我有

SqlParameter filterParameter =新SqlParameter("@Institution_ID",SqlDbType.UniqueIdentifier);

代码语言:javascript
运行
复制
    string customerFilterClause = "Institution_ID=@Institution_ID";
    customerBuilder.FilterClause = customerFilterClause;
    customerBuilder.FilterParameters.Add(filterParameter);

在客户机上我有

部门=新部门(“TableCreationOption.DropExistingOrCreateNewTable;”);depsSyncTable.CreationOption = depsSyncTable SyncTable = SyncDirection.DownloadOnly;

代码语言:javascript
运行
复制
        this.Configuration.SyncTables.Add(depsSyncTable);
        this.Configuration.SyncParameters.Add(
             new SyncParameter("@Institution_ID", new Guid("248a1343-decb-45a5-906f-2fa4d17f8d76")));

但过滤并不像它预期的那样工作,它给我所有的数据,而不是按机构I过滤。我还发现它只在第一次同步时才会这样,所以当我手动添加新行并再次按同步时,它在客户端和过滤器上工作得很好。总之,我理解first time Sync创建了一些锚点,并将其用作基点,因此所有的prev数据都会加载到客户端上,但我会说这是错误的,因为我仍然希望我的过滤器工作正常。

你能帮我一下吗?谢谢

EN

回答 3

Stack Overflow用户

发布于 2010-07-10 05:13:59

我刚刚碰到了这个问题。它首先下载整个数据,然后按照预期进行过滤。但为时已晚,不想要的数据已经下载。

介意分享你是如何解决这个问题的吗?

执行sync-trace时,此select语句。(被替换的原始‘表名’和‘列/键’)具有'@sync_initialized=0' 第一次,并且在随后的同步中它被替换为'1‘,因此它被so到'else’块,因此过滤是工作的

下面是Trace文件的摘录:

VERBOSE,,1,07/09/2010 15:54:32:408,Using Command:"IF @sync_initialized =0 SELECT FROM ELSE BEGIN SELECT FROM JOIN CHANGETABLE(CHANGES,@sync_last_received_anchor) CT ON CT.keyId = .keyId WHERE (.[keyId[ in (select from where = @parm1)) AND (CT.SYS_CHANGE_OPERATION = 'I‘AND CT.SYS_CHANGE_CREATION_VERSION <= @sync_new_received_anchor AND (CT.SYS_CHANGE_CONTEXT IS NULL OR CT.SYS_CHANGE_CONTEXT <> @sync_client_id_binary));

IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'')) > @sync_last_received_anchor RAISERROR (N‘’SQL更改跟踪已清除表''%s'‘的跟踪信息。要从此错误中恢复,客户端必须重新初始化其本地数据库,然后再次尝试同步。‘,16,3,N'') END“

-上述查询中替换的参数取值-详细,,1,07/09/2010 15:54:32:408,参数:@sync_initialized值:0详细,1,07/09/2010 15:54:32:408,参数:@sync_last_received_anchor值:0详细,,1,07/09/2010 15:54:32:408,参数:长度取值: 156 VERBOSE,,1,07/09/2010 15:54:32:408,参数:@sync_client_id_binary长度: 16取值: CE-5F-CB-9F-43-6E-71-4D-BE-5C-3C-9A-3C-CA-0A-26

票数 1
EN

Stack Overflow用户

发布于 2009-11-01 05:30:04

看起来您想要过滤从服务器同步到客户端的数据-只有特定机构的数据才应该下载到客户端。

这里的问题可能是您提供了两个参数-一个没有值。考虑删除SyncParameter并设置传递给构建器的SqlParameter的值,如下所示。

代码语言:javascript
运行
复制
SqlParameter filterParameter = new SqlParameter("@Institution_ID", SqlDbType.UniqueIdentifier);
filterParameter.Value = new Guid("248a1343-decb-45a5-906f-2fa4d17f8d76");

另一种方法(我还没有尝试过)可能是删除Sql参数--我会让filter子句保持原样。

票数 0
EN

Stack Overflow用户

发布于 2009-11-01 20:06:44

我用另一种方法解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1241971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档