Отфильтрованная синхронизация с SQL Azure и SQL CE3.5 с использованием MS Sync Framework - PullRequest
0 голосов
/ 27 июня 2011

Я занят проектом по синхронизации баз данных SQL Azure и SQL CE 3.5.Каждый клиент имеет свою собственную базу данных CE локально.Когда клиент синхронизируется с SQL Azure, необходимо синхронизировать только данные, относящиеся к конкретному пользователю.Поэтому я создал на сервере шаблоны фильтров для таблицы (только один на данный момент), которую необходимо синхронизировать.Я указал все команды «Выбрать», «Обновить» и «Удалить» для SyncAdapter, включая команды для получения новых и максимальных меток времени ...

Когда я запускаю код синхронизации, я получаю следующую ошибку: «Не удалось выполнить команду поставщика «SelectNewTimestampCommand». Транзакция была отменена. Убедитесь в правильности синтаксиса команды и проверьте внутреннее исключение на наличие ошибок, характерных для магазина."

Внутреннее исключение выглядит следующим образом: " InnerException: System.Data.SqlClient.SqlException Message = Неверный синтаксис рядом с '-'. Source = .Net SqlClient Поставщик данных ErrorCode = -2146232060 Класс = 15 LineNumber = 1 Число = 102 Процедура =" "Сервер = tcp: lm5a34jqb2.database.windows.net State = 1 StackTrace: at System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () в System.Data..Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) при System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader DS, RunBehavior runBehavior, String resetOptionsString) на System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean, Boolean returnStreamasync) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String, результат DbAsyncResult) в System.Data.SqlClient.Data.SqlClient.SqlCommand.ExecuteNonQuery () в Microsoft.Synchronization.Data.DbSyncScopeHandler.GetLocalTimestamp (соединение IDbConnection, транзакция IDbTransaction) InnerException:"

Ошибка указывает:« Неверный »msgstr "но это просто указанная команда для получения новой метки времени.Код, который создал эту команду, выглядит следующим образом: "SqlCommand selectNewTimestampCommand = new SqlCommand (); строка newTimestampVariable =" @ "+ DbSyncSession.SyncNewTimestamp;

        selectNewTimestampCommand.CommandType = CommandType.Text;
        selectNewTimestampCommand.Parameters.Add(newTimestampVariable, SqlDbType.Timestamp);
        selectNewTimestampCommand.Parameters[newTimestampVariable].Direction = ParameterDirection.Output;
        selectNewTimestampCommand.CommandText = "SELECT " + newTimestampVariable + " = ((min_active_rowversion()) – 1)";

       mySyncProvider.SelectNewTimestampCommand = selectNewTimestampCommand;"

Единственный ответ, который я получаю в Интернете,является то, что SP2 для SQL Server 2005 не установлен ... Поскольку я не использую SQL 2005, решение совершенно бесполезно.

В чем может быть проблема?

1 Ответ

0 голосов
/ 28 июня 2011

Есть ли какая-то конкретная причина, по которой вы настраиваете адаптеры вручную, а не используете их для Sync Framework?

посмотрите пример кода здесь: Как: настроить и выполнить синхронизацию с SQL Azure и здесь: Расширение данных SQL Azure до SQL Compact с использованием Sync Framework 2.1

...