2009-08-06 4 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"))); 

, но фильтрация не работает, как и ожидалось, она заставляет меня все данные не фильтровать по идентификатору учреждения. что я нашел также, что это происходит только в первый раз, когда я синхронизирую, поэтому, когда я вручную добавляю новые строки и снова нажимаю синхронизацию, он отлично работает на клиенте и фильтрует их. Подводя итог, я понимаю, что в первый раз Sync создает некоторый якорь и использует его как базовую точку, поэтому все предыдущие данные загружаются на клиент, но я бы сказал, что это неправильно, поскольку я все еще хочу, чтобы мой фильтр работал правильно.

Вы можете мне помочь? thanks

ответ

0

Похоже, вы хотите отфильтровать данные, которые синхронизируются с сервером, на клиентские - для клиента нужно загрузить только данные для конкретного учреждения.

Проблема здесь может заключаться в том, что вы предоставляете два параметра - один без значения. Попробуйте удалить SyncParameter и установить значение для SqlParameter, которое вы передаете строителю, как это.

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

Альтернативные (один, что я не пробовал), может быть, чтобы удалить Sql параметр - Я хотел бы оставить пункт фильтра, как у вас есть.

0

На самом деле я сделал это правильно, но проблема в том, что он не сохраняет CLIENT_ID и получает все данные, так как не знает измененных файлов ... Я решил эту проблему другим способом.

1

Я просто ударил эту точную проблему. Он загружает все данные в первый раз и оттуда на нем фильтрует, как ожидалось. Но уже было слишком поздно, уже загруженные нежелательные данные.

Уход за делом, как вы его решили?

При переходе по синхронизации, этот оператор выбора. (Заменить оригинал «имя таблицы „s и „столбцы/клавиши“) имеет“@ sync_initialized = 0»первый рази в последующей синхронизации она замещена, как «1», чтобы она goign в «другой» блок и, следовательно, фильтрация работает.

Ниже приводится выдержка из файла трассировки:


VERBOSE, 1, 07/09/2010 15: 54: 32: 408, с помощью команды: «ЕСЛИ @sync_initialized = 0 SELECT FROM ИНАЧЕ НАЧАТЬ SELECT FROM РЕГИСТРИРУЙТЕСЬ CHANGETABLE (изменения, @sync_last_received_anchor) КТ на КТ. [KeyId] =. [KeyId] ГДЕ (. [KeyId [в (выбрать из где = @ parm1)) и (CT .SYS_CHANGE_OPERATION = 'I' И CT.SYS_CHANGE_CREATION_VERSION < = @sync_new_received_anchor И (CT.SYS_CHANGE_CONTEXT - NULL ИЛИ CT.SYS_CHANGE_CONTEXT <> @sync_client_id_binary));

IF CHANGE_TRACKING_MIN_VALID_VERSION (object_id (N ''))> @sync_last_received_anchor RAISERROR (N'SQL отслеживание изменений Сервер очищены отслеживания информации для таблицы '% s ''. Для того, чтобы оправиться от этой ошибки, клиент должен повторно инициализировать его локальная база данных и попытайтесь синхронизировать снова. ', 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 Лен: 16 Значение: CE-5F-CB-9F-43-6E-71-4D-BE-5C-3C-9A -3C-CA-0A-26

+0

Такая же проблема здесь. Sync просто не применяет ваш фильтр, если он синхронизирован в первый раз. Кажется, это большая ошибка! Кто-нибудь с этим справился? –

+0

Я обнаружил, что если вы используете шаблон, эта проблема исчезает. – hs3180

Смежные вопросы