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

VB.NET Discussion :

MaJ d'une base de données en toute sécurité ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut MaJ d'une base de données en toute sécurité ?
    Bonsoir.

    Je suis un vrai débutant.
    J'essaye de faire pour le fun une application ASP.Net (VB.Net) qui met à jour des données dans une base.
    En gros, j'ai une base et un formulaire. A travers ce formulaire, je mets à jour une table.

    Ma question est la suivante: les applications "web" étant des applications en mode "déconnecté", comment m'assurer que l'enregistrement sur lequel un utilisateur travaille ne soit pas accessible par un autre utilisateur ?

    Je voudrais éviter que 2 utilisateurs puissent accéder au même enregistrement pour mettre à jour !

    Merci pour votre aide.

  2. #2
    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
    Il y a le choix entre solution "optimiste" et solution "pessimiste".
    • La solution pessimiste consiste à mettre un verrou sur l'enregistrement dès qu'on veut entrer en edition. Inconvénients : si l'édition est stoppée, l'enregstriment ne se dévérouillera qu'au bout d'un time-out, et il faut vérifier lors de la mise à jour que le verrou est toujours en place.
    • La solution optimiste consiste à s'assurer lors de la mise à jour que l'enregistrement modifié correspond à celui qui a été lu avant édition.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Il y a le choix entre solution "optimiste" et solution "pessimiste".
    • La solution pessimiste consiste à mettre un verrou sur l'enregistrement dès qu'on veut entrer en edition. Inconvénients : si l'édition est stoppée, l'enregstriment ne se dévérouillera qu'au bout d'un time-out, et il faut vérifier lors de la mise à jour que le verrou est toujours en place.
    • La solution optimiste consiste à s'assurer lors de la mise à jour que l'enregistrement modifié correspond à celui qui a été lu avant édition.

    Bonjour.

    je me suis levé du bon pied ce matin aussi vais-je essayer de partir sur la solution optimiste.
    Si j'ai bien compris, il "suffirait" de s'assurer de mettre un critère dans la requête "update" soit unique n'est-ce pas ? (update table_toto set colonne_titi='...' where critère unique).

    Merci.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Citation Envoyé par yellowsub122 Voir le message
    Bonjour.

    je me suis levé du bon pied ce matin aussi vais-je essayer de partir sur la solution optimiste.
    Si j'ai bien compris, il "suffirait" de s'assurer de mettre un critère dans la requête "update" soit unique n'est-ce pas ? (update table_toto set colonne_titi='...' where critère unique).

    Merci.
    Oui. Dans la pratique, on ajoute aussi souvent une colonne dédiée de type timestamp ou autre. Lors du chargement de ligne ou de l'objet, tu récupère cette valeur avec le reste. Lors de l'update tu ajoutes une condition dans le where pour mettre à jour que si le timestamp est égal. (ne pas oublier de la mettre à jour aussi). Ensuite en analysant le nombre de requêtes affectées, tu peux dire si tes données étaient à jour ou pas.

  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
    il "suffirait" de s'assurer de mettre un critère dans la requête "update" soit unique n'est-ce pas ? (update table_toto set colonne_titi='...' where critère unique).
    Perso, je vérifie l'égalité de tous les champs lus.
    Sinon, lors des update, on peut toujours utiliser une transaction pour mettre dans l'enregistrement un ticket unique chaque fois qu'on écrit dedans. Il suffit alors de tester que la valeur du ticket n'a pas changé.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Perso, je vérifie l'égalité de tous les champs lus.
    Sinon, lors des update, on peut toujours utiliser une transaction pour mettre dans l'enregistrement un ticket unique chaque fois qu'on écrit dedans. Il suffit alors de tester que la valeur du ticket n'a pas changé.
    d'où l'idée du timestamp ... Car pour tes tables avec 20 colonnes, ça devient barbant à faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Restaurer une base de données / annuler toute modification
    Par flzox dans le forum Accès aux données
    Réponses: 11
    Dernier message: 05/12/2011, 14h09
  2. Réponses: 3
    Dernier message: 23/05/2008, 11h45
  3. Suppression de toutes les tables dans une base de données
    Par GDMINFO dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2007, 08h24
  4. Réponses: 2
    Dernier message: 08/06/2006, 17h42

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