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

C# Discussion :

Verrouiller un enregistrement


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut Verrouiller un enregistrement
    Pour afficher les données d'une base SQL, j'utilise par programmation les objects
    SQLConnection
    SQLCommand
    SQLDataReader

    Mais si l'utilisateur doit modifier ces données, il faut verrouiller l'enregistrement tant que la modification n'est pas enregistrée, pour le rendre inaccessible, au moins en ecriture, aux autres utilisateurs. Je ne trouve pas la méthode à utiliser, et je n'ai pas vraiment compris la méthode DataCommand.ExecuteNonQuery.

    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Mais si l'utilisateur doit modifier ces données, il faut verrouiller l'enregistrement tant que la modification n'est pas enregistrée, pour le rendre inaccessible, au moins en ecriture, aux autres utilisateurs.
    Lier une transaction à ta connexion ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SqlTransaction maNouvelleTransaction = maConnexion.BeginTransaction();
    // exécution de commandes qui utilisent la même connexion et la même transaction (EDIT)
    maNouvelleTransaction.Commit(); ou maNouvelleTransaction.Rollback();
    maNouvelleTransaction.Dispose();

    je n'ai pas vraiment compris la méthode DataCommand.ExecuteNonQuery
    ExecuteReader : pour les commandes qui renvoient des résultats (requête de sélection, appel d'une procédure stockée qui renvoie une sélection...)
    ExecuteNonQuery : pour les commandes qui ne renvoient rien (requête de modification ou suppression d'une ligne, appel d'une procédure stockée sans résultat...)

  3. #3
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Pour completer ce qu'a dit Astartee,

    Dans TOUS les cas, une modification simultanee de memes donnees par plusieurs utilisateurs entrainnera une exception a l'enregistement.

    Il existe plusieur types de gestion de concurrence de donnees ("data concurrency") le type de verouillage d'ado.net est dit "optimiste"

    Plus de details
    Introduction to Data Concurrency in ADO.NET
    Handling Concurrency Errors

    A toi d'intercepter l'erreur et de la gerer (annulation, mise a jour partielles...) Et c'est rarement le soucis du developpeur avant que le probelme surgisse, c'est bien d'y avoir pense

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Encore une précision :

    Oui bien sûr, la base de données est censée vérifier toute seule qu'un seul utilisateur à la fois seulement puisse modifier un enregistrement.
    C'est un peu le principe de base d'une bdd

    En fait, la transaction est utile si tu veux effectuer plusieurs commandes d'affilées sur un enregistrement (ou plus), en s'assurant que la base ne puisse pas être modifiée entre temps par un autre utilisateur. Et elle offre la possibilité de tout annuler (rollback) si on se rend compte qu'il y a une erreur.

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut Y a plus qu'a.
    Merçi bien, je vais me plonger la dedans. Je pense qu'il est préférable d'intercepter la double connection au niveau de l'appli, plutot que de laisser la bdd s'en charger, et ne faire que constater l'anomalie. L'ideal est de pouvoir signaler au 2 eme utilisateur, les coordonnées de celui qui est déjà en train d'effectuer la modif.

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

Discussions similaires

  1. Verrouiller un enregistrement
    Par Pierre59 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/02/2007, 17h32
  2. Verrouiller un enregistrement
    Par touhami dans le forum InterBase
    Réponses: 5
    Dernier message: 15/03/2006, 11h59
  3. Verrouiller un enregistrement
    Par PAUL87 dans le forum Access
    Réponses: 32
    Dernier message: 10/12/2005, 23h15
  4. Verrouiller un enregistrement lors d'un select
    Par RamDevTeam dans le forum Bases de données
    Réponses: 5
    Dernier message: 01/11/2005, 17h20
  5. verrouiller un enregistrement - VBA/Access
    Par sebouratif dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2005, 13h03

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