開発中のスマートデバイスアプリケーションにMicrosoft同期サービスを実装しようとしていますが、壁にぶつかったようで、誰かが解決策を提供できることを望んでいます。テーブル内のすべてのレコードをダウンロードするように同期を実装できましたが、ユーザーに関連するデータのみがダウンロードされるようにレコードをフィルター処理したいと考えています。これを実現するために、次のコードに示すように、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値は私のsyncメソッドに渡される整数です
これらのフィルターが追加されているにもかかわらず、同期プロセスはそれらを完全に無視し、すべてのオペレーターのすべてのデータをダウンロードしているようです。私はこの問題をオンラインで調査しました。私のコードは私が読んだ多くのチュートリアルと同じように見えますが、それでも期待どおりに機能しません。
私はSyncServicesにかなり慣れていないので、誰かがこの問題を解決するための情報とガイダンスを私に提供してくれれば、私は非常に感謝します
前もって感謝します