Partager via


Procédure pas à pas : exécution de la synchronisation [SQL Express]

Dans les deux procédures pas à pas précédentes, vous avez préparé la base de données serveur SyncDB et la base de données Compact SyncCompactDB pour la synchronisation. Dans cette procédure pas à pas, vous allez créer une application console qui lance le processus de synchronisation entre ces deux bases de données. Pour obtenir des détails techniques approfondis sur l'approvisionnement des serveurs/clients et l'exécution du processus de synchronisation, consultez Procédure : configurer et exécuter la synchronisation de bases de données (SQL Server).

Pour exécuter la synchronisation

  1. Dans Visual Studio, dans l'Explorateur de solutions, cliquez avec le bouton droit sur Solution ‘SyncSQLServerAndSQLExpress’, pointez sur Ajouter, puis cliquez sur Nouveau projet.

  2. Sélectionnez Visual C# dans Types de projet et Application console dans Modèles.

  3. Tapez ExecuteExpressSync pour Nom du projet.

  4. Cliquez sur OK pour fermer la boîte de dialogue Nouveau projet.

  5. Dans la fenêtre Explorateur de solutions, cliquez avec le bouton droit sur ExecuteExpressSync, puis cliquez sur Ajouter une référence.

  6. Sélectionnez Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer, et cliquez sur OK pour fermer la boîte de dialogue Ajouter une référence.

  7. Ajoutez les instructions using suivantes au début du fichier Program.cs après les instructions using existantes.

    using System.Data;
    using System.Data.SqlClient;
    
    using Microsoft.Synchronization;
    using Microsoft.Synchronization.Data;
    using Microsoft.Synchronization.Data.SqlServer;
    
  8. Ajoutez l'instruction suivante à la méthode Main pour créer une connexion SQL à la base de données Express.

    SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");
    
  9. Ajoutez l'instruction suivante à la méthode Main pour créer une connexion SQL à la base de données serveur.

    SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
    

    Important

    Dans l'instruction ci-dessus, remplacez le nom du serveur par le nom d'instance de votre serveur, si vous n'utilisez pas l'instance par défaut. Par exemple, si votre instance SQL Server se nomme MYSQLINSTANCE, remplacez (local) par .\MYSQLINSTANCE.

  10. Ajoutez l'instruction suivante à la méthode Main pour créer un orchestrateur de synchronisation. Ce code crée un orchestrateur de synchronisation, affecte le fournisseur local de l'orchestrateur de synchronisation à un objet fournisseur associé à la base de données Express, affecte le fournisseur distant de l'orchestrateur de synchronisation à un objet fournisseur associé à la base de données serveur et définit le téléchargement ascendant et descendant comme direction de la session de synchronisation.

    1. Créez une instance de la classe SyncOrchestrator. La classe SyncOrchestrator initialise et contrôle les sessions de synchronisation.

    2. Affectez au fournisseur local de l'objet orchestrateur de synchronisation un objet SqlSyncProvider associé à la base de données client SyncExpressDB. La classe SqlSyncProvider encapsule un fournisseur de synchronisation pour une base de données SQL Express qui communique avec le client et protège l'orchestrateur de synchronisation contre l'implémentation spécifique de la base de données client.

    3. Affectez au fournisseur distant de l'orchestrateur de synchronisation un objet SqlSyncProvider associé à la base de données serveur SyncDB. La classe SqlSyncProvider représente un fournisseur de synchronisation qui communique avec une base de données SQL Server et protège les autres composants Sync Framework contre l'implémentation spécifique de la base de données.

    4. Définissez UploadAndDownload comme direction de synchronisation de l'objet orchestrateur de synchronisation afin que le client puisse procéder à un téléchargement ascendant/descendant des modifications vers/depuis le serveur.

    // create the sync orhcestrator
    SyncOrchestrator syncOrchestrator = new SyncOrchestrator();
    
    // set local provider of orchestrator to a sync provider associated with the 
    // ProductsScope in the SyncExpressDB express client database
    syncOrchestrator.LocalProvider = new SqlSyncProvider("ProductsScope", clientConn);
    
    // set the remote provider of orchestrator to a server sync provider associated with
    // the ProductsScope in the SyncDB server database
    syncOrchestrator.RemoteProvider = new SqlSyncProvider("ProductsScope", serverConn);
    
    // set the direction of sync session to Upload and Download
    syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload;
    
  11. Ajoutez le code suivant pour souscrire à toute erreur survenant lorsque vous appliquez des modifications au client. L'événement ApplyChangeFailed est déclenché lorsqu'une ligne n'a pas pu être appliquée à un client. Vous allez définir le gestionnaire de cet événement d'erreur dans la suite de cette procédure.

    // subscribe for errors that occur when applying changes to the client
    ((SqlCeSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed);
    
  12. Ajoutez l'instruction suivante à la méthode Main. Ce code appelle la méthode Synchronize()()()() sur l'objet SyncOrchestrator pour démarrer le processus de synchronisation entre la base de données serveur SyncDB et la base de données Express SyncExpressDB.

    // execute the synchronization process
    SyncOperationStatistics syncStats = syncOrchestrator.Synchronize();
    
  13. Ajoutez les instructions suivantes à la méthode Main pour afficher les statistiques retournées par la méthode Synchronize()()()(). L'objet SyncOperationStatistics retourné par cette méthode contient des statistiques sur la session de synchronisation exécutée.

    // print statistics
    Console.WriteLine("Start Time: " + syncStats.SyncStartTime);
    Console.WriteLine("Total Changes Uploaded: " + syncStats.UploadChangesTotal);
    Console.WriteLine("Total Changes Downloaded: " + syncStats.DownloadChangesTotal);
    Console.WriteLine("Complete Time: " + syncStats.SyncEndTime);
    Console.WriteLine(String.Empty);
    
  14. Ajoutez la méthode de gestionnaire d'événements suivante à la classe Program à la suite de la méthode Main pour gérer l'événement ApplyChangeFailed. Le paramètre DbApplyChangeFailedEventArgs fournit des informations sur l'erreur ou le conflit à l'origine de l'échec. Dans un gestionnaire pour l'événement, vous pouvez répondre à l'événement de différentes façons, notamment en indiquant si le fournisseur de synchronisation doit essayer d'appliquer à nouveau la ligne. La propriété Error de l'objet contient des métadonnées relatives aux exceptions qui se sont produites au cours de la synchronisation. L'exemple de code suivant affiche cette erreur et le type de conflit (de type DbConflictType) survenu lors de la synchronisation.

    static void Program_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e)
    {
        // display conflict type
        Console.WriteLine(e.Conflict.Type);
    
        // display error message 
        Console.WriteLine(e.Error);
    }
    
  15. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ExecuteExpressSync, puis sélectionnez Générer.

  16. Dans l'Explorateur de solutions, cliquez à nouveau avec le bouton droit sur ExecuteExpressSync, puis cliquez sur Définir comme projet de démarrage.

    Avertissement

    Si vous n'effectuez pas cette étape et que vous appuyez à nouveau sur Ctrl+F5, l'application ProvisionClient est exécutée une nouvelle fois et vous obtenez un message d'erreur sur l'étendue qui existe déjà dans la base de données client.

  17. Appuyez sur Ctrl+F5 pour exécuter le programme. La sortie doit ressembler à ce qui suit :

    Start Time: 6/14/2010 6:24:19 PM
    Total Changes Uploaded: 0
    Total Changes Downloaded: 3
    Complete Time: 6/14/2010 6:24:22 PM
    
    Press any key to continue . . .
    

    Les trois enregistrements qui étaient dans la table Products des bases de données serveur SyncDB sont téléchargés vers le client Express.

  18. Appuyez sur ENTRÉE pour fermer la fenêtre d'invite de commandes.

  19. Dans SQL Server Management Studio, cliquez avec le bouton droit sur le nœud .\SQLEXPRESS, puis cliquez sur Nouvelle requête pour ouvrir une fenêtre de requête.

  20. Tapez et exécutez (en appuyant sur F5) la commande SQL suivante pour confirmer que les enregistrements sont bien téléchargés vers le client Express.

    select * from products
    
  21. Dans SQL Server Management Studio, développez (local) SQL Server, Bases de données, SyncDB et Tables.

  22. Cliquez avec le bouton droit sur dbo.Products, puis cliquez sur Modifier les 200 lignes du haut.

  23. Ajoutez un enregistrement à la fin avec 4 pour ID, Wireless Mouse pour Name et 45 pour ListPrice. Assurez-vous que l'enregistrement est enregistré en appuyant sur TAB après avoir entré la dernière valeur.

  24. À présent, dans Visual Studio, appuyez sur Ctrl+F5 pour exécuter à nouveau le programme client. La sortie doit ressembler à ce qui suit :

    Start Time: 6/14/2010 6:32:44 PM
    Total Changes Uploaded: 0
    Total Changes Downloaded: 1
    Complete Time: 6/14/2010 6:32:47 PM
    
    Press any key to continue . . .
    

    Le seul enregistrement que vous avez ajouté au serveur doit maintenant être téléchargé sur le client. Vous pouvez le vérifier en procédant comme suit.

  25. Dans SQL Server Management Studio, sélectionnez le nœud .\SQLEXPRESS.

  26. Cliquez sur Nouvelle requête dans la barre d'outils.

  27. Tapez et exécutez (en appuyant sur F5) la commande SQL suivante pour confirmer que les enregistrements sont bien téléchargés vers le client Express.

    select * from products
    
  28. Vous pouvez vous exercer pour vous familiariser avec la technologie Sync Framework en ajoutant/mettant à jour/supprimant des enregistrements sur le serveur/client. Par exemple, si vous supprimez un enregistrement sur le serveur, l'enregistrement correspondant dans la base de données client doit être supprimé la prochaine fois que vous synchronisez le client avec le serveur.

  29. Gardez Visual Studio et SQL Server Management Studio ouverts si vous voulez exécuter les procédures pas à pas à la suite de celle-ci dans le didacticiel.

Exemple de code complet

using System;
using System.Data;
using System.Data.SqlClient;

using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;

namespace ExecuteExpressSync
{
    class Program
    {
        static void Main(string[] args)
        {
            // create connection to the SQL Express database
            SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");

            // create connection to the server database
            SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");

            // create the sync orhcestrator
            SyncOrchestrator syncOrchestrator = new SyncOrchestrator();

            // set local provider of orchestrator to a sync provider associated with the 
            // ProductsScope in the SyncExpressDB express client database
            syncOrchestrator.LocalProvider = new SqlSyncProvider("ProductsScope", clientConn);

            // set the remote provider of orchestrator to a server sync provider associated with
            // the ProductsScope in the SyncDB server database
            syncOrchestrator.RemoteProvider = new SqlSyncProvider("ProductsScope", serverConn);

            // set the direction of sync session to Upload and Download
            syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload;

            // subscribe for errors that occur when applying changes to the client
            ((SqlCeSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed);

            // execute the synchronization process
            SyncOperationStatistics syncStats = syncOrchestrator.Synchronize();

            // print statistics
            Console.WriteLine("Start Time: " + syncStats.SyncStartTime);
            Console.WriteLine("Total Changes Uploaded: " + syncStats.UploadChangesTotal);
            Console.WriteLine("Total Changes Downloaded: " + syncStats.DownloadChangesTotal);
            Console.WriteLine("Complete Time: " + syncStats.SyncEndTime);
            Console.WriteLine(String.Empty);
        }

        static void Program_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e)
        {
            // display conflict type
            Console.WriteLine(e.Conflict.Type);

            // display error message 
            Console.WriteLine(e.Error);
        }
    }
}

Voir aussi

Autres ressources

Procédure : configurer et exécuter la synchronisation de bases de données (SQL Server)