IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Synchoniser des données local avec le serveur


Sujet :

Dotnet

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Synchoniser des données local avec le serveur
    Bonsoir,

    Je souhaite faire un programme qui permettrait aux commerciaux de récupérer les données d'une base qui se trouvent sur un serveur vers leur PC portable (base en local). A la fin de la journée, il synchronise les données de leur PC en local avec celles du serveur.

    Questions :
    1- Dois-je utiliser un système de réplication au niveau SQL serveur.
    Base (serveur) <----- réplique --------> Base (local)
    2- où dois-je créer un programme dotnet avec procédures stockées qui fassent les insert, update, delete ... avec DATASET ...
    3- Comment gérer vous le cas des conflits de synchronisation ? ex si un commercial1 et 2 ont modifiés dans la journée les données d'un même client. Ex: deux adresses différentes. Lequel mettre sur le serveur ?
    4- Il semblerait que la solution 1- est plus simple à mettre en place non ?

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    La réplication n'est pas adaptée ici, vu que les commerciaux peuvent tous mettre à jour leur copie de la base.
    Ce que tu peux faire, c'est détecter les mises à jour avec des triggers et les mettre dans une table d'évènements. Ensuite la procédure de synchronisation utilise cette table pour savoir ce qui a été modifié.
    Pour les conflits, il n'y a aucun moyen de savoir quelle version garder il me semble... ça ne peut être fait que manuellement, puisqu'il faut prendre une décision arbitraire.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    la réplication n'est pas adaptée à cause des conflits si je comprends bien.
    Le serveur ne gère t-il pas une table des conflits pour qu'on puisse décider manuellement ?

    Donc, le solution serait de mettre les nouvelles lignes, les mises à jour, les suppression dans une Table EVENT par ex. qui contient les colonnes :
    n°ligne : date de copie : date de modification
    Ensuite, une procédure stockée va lire la table EVENT en local et mettre à jour la Table sur le serveur (synchro). Les autres commerciaux idem (syncrho). Si des conflits existent, je renseigne la table des "Conflits" sur le serveur.
    Ensuite, une fois que la gestion manuelle du conflit est fait, je relance une autre synchro sur les conflits... qui va mettre la table source à jour.
    dites moi si c'est correct -

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par jimmu.teno Voir le message
    Bonsoir,

    la réplication n'est pas adaptée à cause des conflits si je comprends bien.
    Le serveur ne gère t-il pas une table des conflits pour qu'on puisse décider manuellement ?
    Je sais pas trop... pour moi, la réplication met à jour une base cible pour qu'elle soit identique à une base origine, mais c'est à sens unique. Enfin je me trompe peut-être...
    Citation Envoyé par jimmu.teno Voir le message
    Donc, le solution serait de mettre les nouvelles lignes, les mises à jour, les suppression dans une Table EVENT par ex. qui contient les colonnes :
    n°ligne : date de copie : date de modification
    Ensuite, une procédure stockée va lire la table EVENT en local et mettre à jour la Table sur le serveur (synchro). Les autres commerciaux idem (syncrho). Si des conflits existent, je renseigne la table des "Conflits" sur le serveur.
    Ensuite, une fois que la gestion manuelle du conflit est fait, je relance une autre synchro sur les conflits... qui va mettre la table source à jour.
    dites moi si c'est correct -
    Oui c'est tout à fait ça.
    Par contre tu vas recontrer un problème... je suppose que tes clients ont un ID unique ? Si c'est le cas, si 2 commerciaux créent chacun un client vont utiliser le même ID (en prenant la prochaine valeur disponible), et à la synchro ça va foirer... Il faut donc une autre façon d'identifier les clients de façon unique, par exemple en prenant en compte le nom du commercial ou quelque chose comme ça.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Pour la création d'un nouveau client, il y a peu de risque que dans une même journée deux commerciaux aillent chez un même client ... car dans mon cas, ils sont affectés à des secteurs géographiques différents.
    Donc pas de soucis.
    Merci de ton aide précieux.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut DATASET ou BDD local ?

    J'ai une autre question qui fait suite à ce problème.

    - Dois-je utiliser un Dataset pour transférer toutes les données de ma base ? (ce qui est peu problable sauf si vous me dites le contraire). En gros, est-ce que je peux copier une partie ou totalité de ma base serveur dans des Datasets. Les commerciaux travaille en local sur ces Dataset. Au retour au siège, ils synchronisent le Dataset avec le serveur. Est-ce possible ?

    - ou dois-je créer sur chaque portable des commerciaux des répliques/copies de BDD. Ensuite, il mettent à jour la table des évéments durant la journée. De retour au siège, je me sers de cette table avec un script ASP.NET pour synchroniser du local vers le serveur ?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par jimmu.teno Voir le message
    Pour la création d'un nouveau client, il y a peu de risque que dans une même journée deux commerciaux aillent chez un même client ... car dans mon cas, ils sont affectés à des secteurs géographiques différents.
    Je crois que tu as mal compris ce que je disais... je ne parle pas du nom du client, mais de son ID. Dans la base de données tu as généralement un numéro qui sert d'identifiant unique. Supposons qu'au début de la journée, 2 commerciaux A et B partent avec une base à jour qui contient 200 clients, numérotés de 1 à 200. Le commercial A va chez M. Dupont, et l'enregistre dans sa base locale avec l'ID 201. Le commercial B va chez M. Durand, et l'enregistre aussi avec l'ID 201. Au moment de la synchro, il y a donc 2 clients avec le même ID, il faut donc un mécanisme pour attribuer un nouvel ID à l'un des 2...

    Pour l'utilisation d'un dataset ou d'un BDD locale, il n'y a pas vraiment de règle générale... les 2 solutions me semblent valables, à toi de voir celle que tu préfères.

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par tomlev Voir le message
    il faut donc un mécanisme pour attribuer un nouvel ID à l'un des 2...
    Il suffit d'utiliser les GUID comme PK, et ainsi plus de problème à la synchro.

Discussions similaires

  1. Synchroniser des tables locales avec des tables sur un serveur
    Par ads42 dans le forum Bases de données
    Réponses: 0
    Dernier message: 22/03/2012, 14h13
  2. Réponses: 1
    Dernier message: 31/01/2007, 11h59
  3. Envoyer des données du client au serveur
    Par thetraveller dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 13/07/2006, 22h32
  4. Envoyer des donnes à oracle avec ASP
    Par Dino501 dans le forum ASP
    Réponses: 1
    Dernier message: 13/03/2006, 21h16
  5. [TComPort] Analyse des données reçues avec ReadStr
    Par chourmo dans le forum Langage
    Réponses: 4
    Dernier message: 22/06/2005, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo