我正在尝试将微软同步服务实现到我正在开发的智能设备应用程序中,但是我似乎碰到了一堵砖墙,而且我希望有人能够提供解决方案。我设法实现同步,以便下载表中的每个记录,但是我想过滤记录,以便只下载与用户有关的数据。为了实现这一点,我添加了一个WHERE Operator.kde = @kde子句给SelectIncrementalInsertsCommand,如下面的代码所示。忽略过滤器的同步
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 Profiler,看起来过滤器和参数也是按照预期发送的SQL服务器,但是,我仍然没有得到正确的结果。我完全被这个困惑了。 – 2013-02-25 16:07:03