0

我正在尝试将微软同步服务实现到我正在开发的智能设备应用程序中,但是我似乎碰到了一堵砖墙,而且我希望有人能够提供解决方案。我设法实现同步,以便下载表中的每个记录,但是我想过滤记录,以便只下载与用户有关的数据。为了实现这一点,我添加了一个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值是传递到我的同步方法添加

尽管这些过滤器的整数,同步过程似乎完全无视他们和下载每一个所有数据运营商。我已经在线调查了这个问题,我的代码看起来与我已阅读过的众多教程完全相同,但它仍不能按需要工作。

我是相当新的同步服务,所以如果任何人都可以向我提供信息和指导,以解决这个问题,我将是巨大的感谢

预先感谢您

+0

**更新**我已经使用过SQL Profiler,看起来过滤器和参数也是按照预期发送的SQL服务器,但是,我仍然没有得到正确的结果。我完全被这个困惑了。 – 2013-02-25 16:07:03

回答

0

我设法解决了这个问题,结果证明是由于某些原因影响同步的数据库上的一些“脏”记录。一旦我删除了这些记录,一切都按照原样进行。

1

你试过吗?

ADDING FILTER TO LOCAL DATABASE CACHE GENERATED SYNC

我会建议你运行SQL事件探查以及看到实际的命令传递到S​​QL Server。

+0

谢谢你的帮助。不幸的是,我仍然没有运气。我运行了SQL Profiler,过滤器正在发送到数据库,并且参数中的值也正确。但是,它仍将每条记录同步到设备。最令人困惑的是我在一个测试应用程序中运行得非常漂亮,而且现在也停止工作,并且没有对代码或数据库进行任何更改。 – 2013-02-22 12:06:09

相关问题