2009-08-06 17 views
0

こんにちは、フィルタリングは最新のMicrosoft Sync Frameworkバージョンで動作します。私は、サーバー上のサーバーフィルタリングMS Sync Framework

にクライアントから渡すフィルターを使用(sqlServer08は、変更の追跡を有効)私は

SqlParameter filterParameter =新しいSqlParameter( "Institution_ID @"、SqlDbType.UniqueIdentifier)を持っています。

string customerFilterClause = "[email protected]_ID"; 
    customerBuilder.FilterClause = customerFilterClause; 
    customerBuilder.FilterParameters.Add(filterParameter); 

およびクライアント上で、私は

SyncTable depsSyncTable =新SyncTable( "部署")を有します。 depsSyncTable.CreationOption = TableCreationOption.DropExistingOrCreateNewTable; depsSyncTable.SyncDirection = SyncDirection.DownloadOnly;

 this.Configuration.SyncTables.Add(depsSyncTable); 
     this.Configuration.SyncParameters.Add(
      new SyncParameter("@Institution_ID", new Guid("248a1343-decb-45a5-906f-2fa4d17f8d76"))); 

しかし、フィルタリングが期待どおりに機能していないため、すべてのデータが機関IDでフィルミングされていません。私が見つけたのは、初めて同期したときのみたいなので、手動で新しい行を追加して、もう一度、同期を押すと、クライアント上でうまく動作し、フィルタリングされます。要約すると、Syncはいくつかのアンカーを作成してベースポイントとして使用するので、すべての以前のデータがクライアントにロードされるようになっていますが、これは間違いです。

ここでお手伝いできますか?ありがとう

答えて

0

同期しているデータをサーバーからクライアントにフィルタリングしたいと思うようです。特定の機関のデータのみをクライアントにダウンロードする必要があります。

ここで問題となるのは、値のない2つのパラメータを指定している可能性があります。 SyncParameterを削除し、このようにビルダーに渡すSqlParameterの値を設定することを検討してください。

SqlParameter filterParameter = new SqlParameter("@Institution_ID", SqlDbType.UniqueIdentifier); 
filterParameter.Value = new Guid("248a1343-decb-45a5-906f-2fa4d17f8d76"); 

代替(私は試していない1)は、SQLパラメータを削除するかもしれない - あなたはそれを持っているように私は、フィルタ句を残すだろう。

0

実際に私は正しく行いましたが、問題はCLIENT_IDを保存せず、変更されたファイルを知らないのですべてのデータを取得することです。 私はこの問題を別の方法で解決しました。

1

私はちょうどこの正確な問題にぶつかりました。初めてデータ全体をダウンロードし、そこから期待どおりにフィルタリングします。しかし、それまでにダウンロードされた不要なデータは遅すぎました。

あなたの解決方法を教えてください。

sync-traceを実行する場合は、このselect文を使用します。 (置き換えられた元の 'テーブル名 'と 'カラム/キー')は、 '@ sync_initialized = 0'最初にであり、それ以降は '1'したがってフィルタリングは動作しています。以下

トレース・ファイルからの抜粋である:


VERBOSE、1、2010年7月9日15:54:32:= 0 SELECT FROM @sync_initialized IF 」:408、コマンドの使用ELSE CHANGETABLE(CHANGES、@sync_last_received_anchor)CT ON CTをJOIN [鍵ID] = [KEYID] WHERE([KEYID [= @ PARM1)から選択(IN) AND(CT FROM SELECTをBEGIN .SYS_CHANGE_OPERATION = '私'とCT.SYS_CHANGE_CREATION_VERSION < = @sync_new_received_anchor AND(CT.SYS_CHANGE_CONTEXTはNULLまたはCT.SYS_CHANGE_CONTEXT <> @ sync_client_id_binary));

CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(N 'IF' %s 'の' '))> @sync_last_received_anchor RAISERROR(N'SQLサーバーの変更の追跡はテーブルのために追跡情報をクリーンアップしている'。このエラーから回復するには、クライアントはその再初期化する必要があります'、16,3、N' ')END "

- 上記のクエリで置き換えられるパラメータ値------- ---- VERBOSE、1、07/09/2010 15:54:32:408、パラメータ:@sync_initialized値:0 VERBOSE、1、07/09/2010 15:54:32:408、パラメータ:@sync_last_received_anchor値:0 VERBOSE、1、07/09/2010 15:54:32:408、パラメータ:@sync_new_received_anchor値:156 VERB OSE、、1 07/09/2010 15:54:32:408パラメータ:@sync_client_id_binary Len:16値:CE-5F-CB-9F-43-6E-71-4D-BE-5C-3C-9A -3C-CA-0A-26

+0

ここに同じ問題があります。同期は、クライアントが初めて同期している場合は、フィルタを適用しないだけです。私に大きなバグのようですね!誰かがこれを働かせましたか? –

+0

テンプレートを使用すると、この問題は解消されています。 – hs3180

関連する問題