0

開発中のスマートデバイスアプリケーションに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にかなり慣れていないので、誰かがこの問題を解決するための情報とガイダンスを私に提供してくれれば、私は非常に感謝します

前もって感謝します

4

2 に答える 2

1

これを試しましたか?

ローカルデータベースキャッシュ生成同期へのフィルターの追加

SQL Profilerも実行して、SQLServerに渡される実際のコマンドを確認することをお勧めします。

于 2013-02-20T21:37:33.570 に答える
0

私はなんとかこの問題を修正しました、それは何らかの理由で同期に影響を与えていたデータベース上のいくつかの「ダーティ」レコードであることが判明しました。これらのレコードを削除すると、すべてが正常に機能しました。

于 2013-03-08T09:46:42.687 に答える