您好,已经说过,过滤适用于最新版本的Microsoft Sync Framework。因此,我使用了从客户端到服务器的过滤器传递
在服务器(启用了更改跟踪的sqlServer08)上,我有
SqlParameter filterParameter =新SqlParameter("@Institution_ID",SqlDbType.UniqueIdentifier);
string customerFilterClause = "Institution_ID=@Institution_ID";
customerBuilder.FilterClause = customerFilterClause;
customerBuilder.FilterParameters.Add(filterParameter);在客户机上我有
部门=新部门(“TableCreationOption.DropExistingOrCreateNewTable;”);depsSyncTable.CreationOption = depsSyncTable SyncTable = SyncDirection.DownloadOnly;
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数据都会加载到客户端上,但我会说这是错误的,因为我仍然希望我的过滤器工作正常。
你能帮我一下吗?谢谢
发布于 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
发布于 2009-11-01 05:30:04
看起来您想要过滤从服务器同步到客户端的数据-只有特定机构的数据才应该下载到客户端。
这里的问题可能是您提供了两个参数-一个没有值。考虑删除SyncParameter并设置传递给构建器的SqlParameter的值,如下所示。
SqlParameter filterParameter = new SqlParameter("@Institution_ID", SqlDbType.UniqueIdentifier);
filterParameter.Value = new Guid("248a1343-decb-45a5-906f-2fa4d17f8d76");另一种方法(我还没有尝试过)可能是删除Sql参数--我会让filter子句保持原样。
发布于 2009-11-01 20:06:44
我用另一种方法解决了这个问题。
https://stackoverflow.com/questions/1241971
复制相似问题