繁体   English   中英

筛选MS Sync框架

[英]Filtering MS Sync Framework

你好,说过滤功能适用于最新的Microsoft Sync Framework版本。 所以我使用了从客户端到服务器的过滤器传递

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

SqlParameter filterParameter = new SqlParameter(“ @ Institution_ID”,SqlDbType.UniqueIdentifier);

    string customerFilterClause = "Institution_ID=@Institution_ID";
    customerBuilder.FilterClause = customerFilterClause;
    customerBuilder.FilterParameters.Add(filterParameter);

在客户我有

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

        this.Configuration.SyncTables.Add(depsSyncTable);
        this.Configuration.SyncParameters.Add(
             new SyncParameter("@Institution_ID", new Guid("248a1343-decb-45a5-906f-2fa4d17f8d76")));

但是过滤没有按预期工作,它使我无法按机构ID过滤所有数据。 我还发现,只有在我第一次进行同步时,它才会像这样,因此,当我手动添加新行并再次按同步时,它在客户端上非常有用并对其进行过滤。 总而言之,我了解到Sync第一次创建一个锚并将其用作基点,以便所有prev数据都加载到客户端上,但是我会说这是错误的,因为我仍然希望过滤器正常工作。

你能在这里帮我吗? 谢谢

我只是碰到了这个确切的问题。 它会第一次下载整个数据,然后从那里下载预期的过滤器。 但是到那时为时已晚,已经下载了不需要的数据。

关心分享您如何解决吗?

当执行同步跟踪时,此select语句。 (替换原始的'表名'和'列/键') 第一次具有' @ sync_initialized = 0', 并在随后的同步中将其替换为'1',因此它进入'else'块,因此过滤有效

以下是跟踪文件的摘录:


VERBOSE,“ 1,2010 / 7/09 15:54:32:408,使用命令:“ IF @sync_initialized = 0从其他选择开始选择从JOIN CHANGETABLE(CHANGES,@sync_last_received_anchor)CT CT CT。[keyId] =。 [keyId]在哪里(。[ sync_client_id_binary));

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

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

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

这里的问题可能是您要提供两个参数-一个不带值。 考虑删除SyncParameter并设置像这样传递给构建器的SqlParameter的值。

SqlParameter filterParameter = new SqlParameter("@Institution_ID", SqlDbType.UniqueIdentifier);
filterParameter.Value = new Guid("248a1343-decb-45a5-906f-2fa4d17f8d76");

另一种选择(我没有尝试过)可能是删除Sql参数-我将保留filter子句。

实际上我没做错,但是问题是它不保存CLIENT_ID并获取所有数据,因为不知道更改的文件...我用另一种方式解决了这个问题。

暂无
暂无

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

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