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

相關問題