我正在嘗試將微軟同步服務實現到我正在開發的智能設備應用程序中,但是我似乎碰到了一堵磚牆,而且我希望有人能夠提供解決方案。我設法實現同步,以便下載表中的每個記錄,但是我想過濾記錄,以便只下載與用戶有關的數據。爲了實現這一點,我添加了一個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