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 :

Verouillage de l'accès à une base de données


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Verouillage de l'accès à une base de données
    Bonjour,

    J'ai un petit problème: je programme une application web en C# et ASP.Net dans visual web developer express 2005. Il y a deux requêtes qui doivent absolument se suivre: la première regarde quel est le maximum présent d'un certain paramètre, la seconde insère une nouvelle donnée avec, pour ce même paramètre, l'ancienne valeur maximale + 1. Je veux m'assurer qu'aucune de ces deux requêtes lancées par un autre utilisateur puisse être exécutée entre les deux requêtes initiales.

    En bref, je me demande comment le multithreading "implicite" à une application web de .net fonctionne, et comment j'utilise les verrous dans ce cas. Dois-je implanter explicitement des threads ou y a t-il moyen d'utiliser les verrous sur les "threads" créés automatiquement par le serveur d'applications web ?

    Merci.

  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 749
    Points
    39 749
    Par défaut
    Tu peux synchroniser l'accès avec un objet qui sera commun à tous les threads, par exemple un champ statique d'une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class UneClasse
    {
        public static object SyncObject = new Object();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lock(UneClasse.SyncObject)
    {
        // mets tes instructions select et insert ici
    }
    Un seul thread à la fois peut acquérir le lock, donc quand un thread est dans ce bloc de code, les autres ne peuvent y rentrer avant que le premier en sorte. De cette façon, tu es sûr que le thread Y ne peut pas faire le select après que le thread X fasse son select mais avant qu'il ne fasse l'insert (désolé, la phrase est pt-être un peu confuse...)

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Merci, j'essaie ça demain. C'est parfait, je n'avais déjà que des classes statiques pour accéder à ma base de données, ça va s'implanter facilement en mettant tout simplement un lock sur la méthode correspondant à ma première requête.

    edit: Je viens de bien comprendre, j'étais un peu fatigué. Je vais ajouter un objet statique de synchronisation à mes classes d'accès à ma base de données et non utiliser mes méthodes statiques.

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

Discussions similaires

  1. [C#] Accés à une base de données AS400
    Par Green Hornet dans le forum Accès aux données
    Réponses: 8
    Dernier message: 14/11/2011, 11h26
  2. Réponses: 4
    Dernier message: 15/01/2005, 16h05
  3. Accès à une base de données ACCESS
    Par Invité dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/01/2005, 08h23
  4. [JDBC]acces à une base de données mysql
    Par sehaba dans le forum JDBC
    Réponses: 13
    Dernier message: 07/12/2004, 00h39
  5. Réponses: 2
    Dernier message: 01/10/2004, 15h13

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