2008-11-10 13 views
1

J'utilise SQL Server 2005 CE framework 3.5 et j'essaie d'utiliser la réplication de fusion entre mon handheld et mon SQL Server. Quand je lance le code pour le synchroniser, il semble que je reste immobile, et quand je mets un point d'arrêt dans mon code, il ne passe jamais l'appel de Synchronize().Sql Server CE 3.5 Replication Synchronize est suspendu

Si je regarde le moniteur de réplication dans le serveur SQL, il arrive au point où il dit que l'abonnement n'est plus synchronisé et ne montre aucune erreur. Par conséquent, je suppose que cela signifie que la synchronisation est complète.

http://server/virtualdirectory/sqlcesa35.dll?diag ne signale aucun problème.

Ceci est ma première tentative de tout développement de poche, donc j'ai peut-être fait quelque chose de stupide. Toutefois, SQL Server semble signaler une synchronisation réussie.

Toute aide serait grandement appréciée car j'ai passé des heures à ce sujet!

Voici mon code.

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; 
} 

Répondre

0

J'ai depuis découvert qu'il fallait juste beaucoup de temps pour copier les données sur le disque physique. Bien que la réplication du serveur SQL ait été terminée, il copiait toujours les données sur la carte SD.

Je l'ai identifié en réduisant la quantité de tables que je réplique et j'ai obtenu une réponse plus immédiate (bien une autre erreur mais sans rapport avec ce problème).

Merci quand même :)

1

Une autre chose que vous pouvez faire pour accélérer l'opération Synchronize est de spécifier un chemin de fichier db qui est dans votre mémoire principale du programme PDA (plutôt que sur la carte SD comme dans votre exemple) . Vous devriez voir une amélioration de la vitesse jusqu'à 4X (ce qui signifie que la synchronisation peut prendre seulement 25% du temps qu'elle prend maintenant).

Si la mémoire principale du programme de votre PDA est épuisée, vous pouvez utiliser System.IO.File.Move() pour déplacer le fichier sur la carte SD après l'appel Synchroniser. Cela semble un peu étrange, je sais, mais il est beaucoup plus rapide de synchroniser à la mémoire de programme et de copier sur la carte SD puis il est de se synchroniser directement sur la carte SD.