0

我正在尝试将 Microsoft 同步服务实现到我正在开发的智能设备应用程序中,但是我似乎遇到了障碍,我希望有人能够提供解决方案。我已经设法实现同步,以便它下载表中的每条记录,但是我想过滤记录,以便只下载与用户相关的数据。为此,我在 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 值是传递给我的同步方法的整数

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

我对同步服务相当陌生,所以如果有人可以为我提供解决此问题的信息和指导,我将不胜感激

先感谢您

4

2 回答 2

1

你试过这个吗?

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

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

于 2013-02-20T21:37:33.570 回答
0

我设法解决了这个问题,结果是数据库上的一些“脏”记录由于某种原因影响了同步。一旦我删除了这些记录,一切都会正常运行。

于 2013-03-08T09:46:42.687 回答