SQL Server CE 3.5 репликации слиянием синхронизации синхронизируется - PullRequest
1 голос
/ 10 ноября 2008

Я использую SQL Server 2005 CE Framework 3.5 и пытаюсь использовать репликацию слиянием между моим портативным и SQL Server. Когда я запускаю код для синхронизации, он просто кажется вечным, а когда я ставлю точку останова в своем коде, она никогда не проходит через вызов Synchronize ().

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

http://server/virtualdirectory/sqlcesa35.dll?diag не сообщает о проблемах.

Это моя первая попытка разработки любого портативного устройства, поэтому я, возможно, сделал что-то глупое. Тем не менее SQL Server сообщает об успешной синхронизации.

Любая помощь будет принята с благодарностью, так как я потратил на это целую вечность!

Вот мой код.

const string DatabasePath = @"SD Card\mydb.sdf";
var repl = new SqlCeReplication
               {
                   ConnectionManager = true,
                   InternetUrl = @"http://server/virtualdirectory/sqlcesa35.dll",
                   Publisher = @"servername",
                   PublisherDatabase = @"databasename",
                   PublisherSecurityMode = SecurityType.DBAuthentication,
                   PublisherLogin = @"username",
                   PublisherPassword = @"password",
                   Publication = @"publicationname",
                   Subscriber = @"PPC",
                   SubscriberConnectionString = "Data Source=" + DatabasePath
               };
try
{
    Cursor.Current = Cursors.WaitCursor;
    if (!File.Exists(DatabasePath))
    {
        repl.AddSubscription(AddOption.CreateDatabase);
    }
    repl.Synchronize();
    MessageBox.Show("Successfully synchronised");
}
catch (SqlCeException e)
{
    DisplaySqlCeErrors(e.Errors, e);
}
finally
{
    repl.Dispose();
    Cursor.Current = Cursors.Default;
}

Ответы [ 2 ]

1 голос
/ 11 ноября 2008

Еще одна вещь, которую вы можете сделать для ускорения операции синхронизации, - указать путь к файлу БД, который находится в основной памяти программ вашего КПК (а не на SD-карте, как в вашем примере). Вы должны увидеть повышение скорости до 4 раз (это означает, что синхронизация может занять всего 25% от времени, необходимого сейчас).

Если у вас не хватает основной памяти программ на КПК, вы можете использовать System.IO.File.Move (), чтобы переместить файл на SD-карту после вызова Synchronize. Я знаю, что это немного странно, но гораздо быстрее синхронизировать с программной памятью и копировать на SD-карту, чем синхронизировать непосредственно с SD-картой.

0 голосов
/ 10 ноября 2008

С тех пор я обнаружил, что копирование данных на физический диск занимало много времени. Хотя репликация сервера SQL завершилась, она все еще копировала данные на карту SD.

Я определил это, уменьшив количество таблиц, которые я реплицирую, и получил более немедленный ответ (хорошо, еще одна ошибка, но не связанная с этой проблемой).

Спасибо в любом случае:)

...