同步忽略筛选器

本文关键字:筛选 同步 | 更新日期: 2023-09-27 18:00:19

我正试图将Microsoft Synchronization服务实现到我正在开发的智能设备应用程序中,但我似乎遇到了困难,我希望有人能够提供解决方案。我已经设法实现了同步,以便它下载表中的每一条记录,但我想过滤记录,以便只下载与用户相关的数据。为了实现这一点,我在SelectIncrementalInsertsCommand中添加了WHERE Operator.kde=@kde子句,如以下代码所示。

this.SelectIncrementalInsertsCommand.CommandText = @"IF @sync_initialized = 0 SELECT dbo.Operator.[OperatorID], [kde], [OperatorName], [Pass] FROM dbo.Operator LEFT OUTER JOIN CHANGETABLE(CHANGES dbo.Operator, @sync_last_received_anchor) CT ON CT.[OperatorID] = dbo.Operator.[OperatorID] WHERE dbo.Operator.[kde] = @kde AND (CT.SYS_CHANGE_CONTEXT IS NULL OR CT.SYS_CHANGE_CONTEXT <> @sync_client_id_binary) ELSE  BEGIN SELECT dbo.Operator.[OperatorID], [kde], [OperatorName], [Pass] FROM dbo.Operator JOIN CHANGETABLE(CHANGES dbo.Operator, @sync_last_received_anchor) CT ON CT.[OperatorID] = dbo.Operator.[OperatorID] WHERE dbo.Operator.[kde] = @kde 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'dbo.Operator')) > @sync_last_received_anchor RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''. To recover from this error, the client must reinitialize its local database and try again',16,3,N'dbo.Operator')  END ";

然后,我声明了@kde参数,如下所示。

this.SelectIncrementalInsertsCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@kde", System.Data.SqlDbType.Int));

为了传递参数,我在负责启动同步的代码中添加了以下行。

syncAgent.Configuration.SyncParameters.Add(new SyncParameter("@kde", kde));

注意:kde值是一个整数,它被传递到我的同步方法

尽管添加了这些过滤器,但同步过程似乎完全忽略了它们,并下载了每个操作员的所有数据。我在网上调查过这个问题,我的代码似乎与我读过的许多教程完全相同,但它仍然不能按预期工作。

我是同步服务的新手,所以如果有人能为我提供解决这个问题的信息和指导,我将非常感谢

提前感谢

同步忽略筛选器

你试过这个吗?

将筛选器添加到本地数据库缓存生成的同步

我建议您也运行SQL事件探查器来查看传递给SQL Server的实际命令。

我设法解决了这个问题,结果发现数据库上有一些"脏"记录,由于某种原因影响了同步。一旦我删除了这些记录,一切都正常了。