2009-08-06 9 views
0

bonjour été dit que le filtrage fonctionne avec la dernière version de Microsoft Sync Framework. donc je filtre passe du client au serveurFiltrage MS Sync Framework

sur le serveur (sqlServer08 avec le suivi des modifications a permis) Je

SqlParameter filterParameter = new SqlParameter ("@ Institution_ID", SqlDbType.UniqueIdentifier);

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

et sur le client je

SyncTable depsSyncTable = new SyncTable ("ministère"); 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"))); 

mais le filtrage ne marche pas le travail comme prévu, il me getms toutes les données non filteres par ID d'institution. Ce que j'ai trouvé aussi, c'est que ça se passe comme ça seulement la première fois que je synchronise, donc pendant que j'ajoute manuellement de nouvelles lignes et que j'appuie de nouveau sur sync, ça fonctionne très bien sur le client et les filtre. Pour résumer, je comprends que la première fois que Sync crée une ancre et l'utilise comme point de base pour que toutes les données soient chargées sur le client, mais je dirais que c'est faux car j'aimerais toujours que mon filtre fonctionne correctement.

pouvez-vous m'aider ici? merci

Répondre

0

Il semble que vous vouliez filtrer les données en cours de synchronisation du serveur vers le client - seules les données d'un établissement spécifique doivent être téléchargées sur le client. Le problème ici pourrait être que vous fournissez deux paramètres - un sans valeur. Envisagez de supprimer le paramètre SyncParameter et de définir la valeur du paramètre SqlParameter que vous transmettez au générateur de la manière suivante.

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

Une alternative (un que je ne l'ai pas essayé) pourrait être de supprimer le paramètre Sql - Je laisserais la clause de filtre que vous avez.

0

En fait, j'ai fait cela bien, mais le problème est qu'il ne sauvegarde pas CLIENT_ID et obtient toutes les données, car ne connaît pas les fichiers modifiés ... J'ai résolu ce problème d'une autre manière.

1

Je viens de frapper ce problème. Il télécharge la totalité des données la première fois et à partir de là, il filtre comme prévu. Mais était trop tard d'ici là, les données non désirées déjà téléchargées.

Prenez soin de partager comment vous l'avez résolu?

Lorsque vous parcourez la trace de synchronisation, cette instruction select. (Remplacé « nom de la table « origine s et « colonnes/touches ») a » @ sync_initialized = 0 »première foissynchrones et ultérieur, il est substitué comme « 1 » de sorte qu'il est goign dans le bloc « else » et donc le filtrage fonctionne.

ci-dessous est l'extrait du fichier Trace:


VERBOSE,, 1, 07/09/2010 15: 54: 32: 408, Utilisation de la Command: « SI @sync_initialized = 0 SELECT FROM AUTRE BEGIN SELECT dE REJOIGNEZ CHANGETABLE (changements, @sync_last_received_anchor) CT ON CT. [keyId] =. [keyId] oU (. [keyId [en (choisir où = @ parm1)) ET (CT .SYS_CHANGE_OPERATION = 'I' ET CT.SYS_CHANGE_CREATION_VERSION < = @sync_new_received_anchor ET (CT.SYS_CHANGE_CONTEXT EST NULL OU CT.SYS_CHANGE_CONTEXT > @sync_client_id_binary)); SI CHANGE_TRACKING_MIN_VALID_VERSION (ID_objet (N ''))> @sync_last_received_anchor RAISERROR (Le suivi des modifications du serveur N'SQL a nettoyé les informations de suivi de la table ''% s '. »Pour récupérer cette erreur, le client doit réinitialiser base de données locale et essayez de synchroniser à nouveau. ', 16,3, N' ') END "

---------- valeurs parm qui sont substituées dans la requête ci-dessus ------- ---- VERBOSE,, 1, 07/09/2010 15: 54: 32: 408, Paramètre: @sync_initialized Valeur: 0 VERBOSE,, 1, 07/09/2010 15: 54: 32: 408, Paramètre : @sync_last_received_anchor Valeur: 0 VERBOSE,, 1, 07/09/2010 15: 54: 32: 408, Paramètre: @sync_new_received_anchor Valeur: 156 VERBE OSE,, 1, 07/09/2010 15: 54: 32: 408, Paramètre: @sync_client_id_binary Len: 16 Valeur: CE-5F-CB-9F-43-6E-71-4D-BE-5C-3C-9A -3C-CA-0A-26

+0

Même question ici. Sync n'applique tout simplement pas votre filtre si c'est la première fois que le client se synchronise. On dirait un gros bug pour moi! Est-ce que quelqu'un a travaillé cela? –

+0

J'ai trouvé que si vous utilisez le modèle, ce problème est disparu. – hs3180