C# 忽略过滤器的同步

C# 忽略过滤器的同步,c#,ado.net,microsoft-sync-framework,data-synchronization,smart-device,C#,Ado.net,Microsoft Sync Framework,Data Synchronization,Smart Device,我正在尝试将Microsoft同步服务应用到我正在开发的智能设备应用程序中,但我似乎遇到了困难,我希望有人能够提供解决方案。我已经设法实现了同步,这样它就可以下载表中的每一条记录,但是我想过滤这些记录,以便只下载与用户相关的数据。为了实现这一点,我在SelectIncrementalInsertsCommand中添加了aWHERE Operator.kde=@kde子句,如下代码所示 this.SelectIncrementalInsertsCommand.CommandText = @"IF

我正在尝试将Microsoft同步服务应用到我正在开发的智能设备应用程序中,但我似乎遇到了困难,我希望有人能够提供解决方案。我已经设法实现了同步,这样它就可以下载表中的每一条记录,但是我想过滤这些记录,以便只下载与用户相关的数据。为了实现这一点,我在SelectIncrementalInsertsCommand中添加了aWHERE 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 ";
为了传入参数,我在负责启动同步的代码中添加了以下行

syncAgent.Configuration.SyncParameters.Add(new SyncParameter("@kde", kde));
注意:kde值是传递到我的同步方法中的整数

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

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

提前谢谢你

你试过这个吗


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

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

谢谢你的帮助。不幸的是,我仍然没有运气。我已经运行了SQL Profiler,过滤器被发送到数据库,参数中的值也是正确的。但是,它仍在将每条记录同步到设备上。最让人困惑的是,我在自己构建的测试应用程序中实现了完美的工作,该应用程序现在也停止了工作,并且没有对代码或数据库进行任何更改。更新我使用了SQL Profiler,但看起来过滤器和参数也像预期的那样发送到了SQL server,我仍然没有得到正确的结果。我对这件事完全感到困惑。
syncAgent.Configuration.SyncParameters.Add(new SyncParameter("@kde", kde));