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

Windows Forms Discussion :

accès concurrents en mode deconnecté


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Par défaut accès concurrents en mode deconnecté
    Bonjour à tous et bonne année 2009.

    j'ai une application windows form qui gère une base de donnée sqlserver.
    je voudrais savoir comment gérer les accès concurrent sachant que mon application utilise le mode déconnecté.
    comment gérer la mise à jour d'un enregistrement par un utilisateur si en même temps un autre y accède pour le modifier sachant qu'en mode déconnecté on ne travaille pas directement sur la base de données.
    J'ai cherché des sites qui parlent de ça mais je n'ai pas trouvé grand chose.
    Merci pour 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 : 44
    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
    Par défaut
    il faut faire l'Update dans une transaction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    using (SqlTransaction transaction = connection.BeginTransaction())
    {
        connection.Transaction = transaction;
        adapter.UpdateCommand.Transaction = transaction;
        adapter.InsertCommand.Transaction = transaction;
        adapter.DeleteCommand.Transaction = transaction;
     
        try
        {
            adapter.Update(dataset, "uneTable");
            transaction.Commit();
        }
        finally
        {
            connection.Transaction = null;
            adapter.UpdateCommand.Transaction = null;
            adapter.InsertCommand.Transaction = null;
            adapter.DeleteCommand.Transaction = null;
        }
    }
    De cette manière, la mise à jour des données se fait de façon atomique.
    Par contre je ne sais pas si c'est la meilleure façon de l'utiliser...

  3. #3
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Tu peux aussi essayer de faire un système de lock pour pallier le problème du mode déconnecté.

    Si un utilisateur doit modifier par exemple les données contenues dans une grille (DataGridView) et récupérées depuis une base de données, tu peux rajouter un champ Locked dans tes tables qui sera à Vrai lorsq'un utilisateur modifie les données.

    Si un autre utilisateur veut modifier les données, tu vérifies d'abord qu'il n'y a pas de lock sur la table. Si un lock est actif, tu met ta DataGridView en read only de manière à ce que cet utilisateur puisse quand même voir les donner mais sans les modifier (car un autre utilisateur est en cours de modification).

    Cette astuce couplée à un système d'update transactionnel comme cité plus haut t'éviteras tout problème d'accès concurrentiel en mode déconnecté.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    Bonjour a vous,
    je suis confronté a ce type de probleme.

    Quand tu dis
    Si un utilisateur doit modifier par exemple les données contenues dans une grille (DataGridView) et récupérées depuis une base de données, tu peux rajouter un champ Locked dans tes tables qui sera à Vrai lorsq'un utilisateur modifie les données.
    Je suppose que tu imagines que l'utilisateur modifie les données directement dans le datagridview.
    Dans le cas ou les données sont modifier par un autre moyen.
    Dans mon cas, l'utilisateur double click sur la ligne du DGV qui l'intéresse et les infos sont remontées dans le form de saisie. Dans ce cas comment ferais tu pour mettre le champ Lock a true?
    Merci de votre aide

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Pour gérer les conflits multi-utilisateurs, il y a 2 techniques que les anglo-saxons qualifient avec les termes "pessimistic" et "optimistic".

    • La technique pessimiste est celle des verrous ("Lock") exposée par Contrec.

    • La technique optimiste consiste à vérifier lors de la mise à jour que l'enregistement original n'a pas été modifié par un autre utilisateur. On utilise un UPDATE avec une clause WHERE portant sur tous les champs.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    Merci pour les informations, mais comment cela se met en oeuvre concretement....

Discussions similaires

  1. Réponses: 22
    Dernier message: 25/08/2005, 16h03
  2. Réponses: 2
    Dernier message: 13/06/2005, 15h37
  3. Lenteur et acces concurrent
    Par JeanMarc_T2k dans le forum Bases de données
    Réponses: 7
    Dernier message: 04/12/2004, 20h57
  4. acces concurrent avec delphi 5 entreprise
    Par Jean_paul dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/11/2004, 20h19
  5. [EJB] Accès concurrents à la base de données
    Par cameleon2002 dans le forum Java EE
    Réponses: 10
    Dernier message: 23/09/2003, 11h31

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