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

ASP.NET Discussion :

Mutex dans une page ASP.Net : votre avis


Sujet :

ASP.NET

Vue hybride

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Par défaut Mutex dans une page ASP.Net : votre avis
    Dans une de mes pages ASP.NET, la validation d'un formulaire provoque l'insertion d'une "DemandeWeb" dans la base de donnée de l'application.

    Afin d'insérer un enregistrement dans une base, je dois effectuer les opérations suivantes :
    - Déterminer l'ID de l'enregistrement
    - Insérer l'objet en entier

    Je détermine l'ID du nouvel enregistrement en appellant un select max(id) from tableDesDemandes, et qui retourne au final max(id)+1

    Puis j'insert mon objet métier auquel j'ai spécifié l'ID qu'il devait prendre.

    -------

    Mon problème concerne les accès concurrents : En effet si entre les étapes 1 et 2, un autre thread vient effectuer la première étape à son tour, il récupèrera le même ID que le thread précédent... causant au final forcémment une erreur au niveau de la base de donnée (la colonne ID est quand même clef primaire de la table)

    Je souhaite donc utiliser les mutex pour résoudre mon probleme.



    Ce qui donne :

    private static Mutex mutex = new Mutex();

    internal static Demande Create(Demande demande)
    {

    mutex.WaitOne();

    demande.Id = GetNextId(); //renvoie max(id)+1

    StringBuilder sb = new StringBuilder();
    sb.Append(" insert into ...");
    // autre code du append

    DbCommand cmd = db.GetSqlStringCommand(sb.ToString());
    db.AddInParameter(cmd, "DEMANDEID", DbType.Int32, demande.Id);

    int nb = db.ExecuteNonQuery(cmd);

    //On libère le mutex
    mutex.ReleaseMutex();

    return client;

    }


    Est ce la bonne solution pour éviter mon problème ? quid des performances ? Avez vous déjà été confronté à ce genre de problèmes ?

    Je ne souhaite pas activer de méthodes spécifiques à la base de donnée retenue (en l'occurence, je travaille sur du mysql sur ce projet, donc je ne veux PAS d'auto increment dans une de mes colonnes !). Je souhaite faire quelque chose de standard !

    Merci de votre retour

  2. #2
    Membre très actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Par défaut
    salut

    et avec une System.Transaction ca serait pas plus simple

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Quel SGBD ? parce qu'à mon avis c'est pas la bonne façon de faire.

    Les SGBD en général permettent de récupérer l'ID de la dernière insertion. Tu peux ainsi faire tes deux étapes en une seule et récupèrer l'ID une fois l'enregistrement effectivement inseré. Le SGBD gère ainsi lui-même la concurrence sur la primary key ce qui est bien plus performant que ton Mutex.

    Bon j'ai vu MySQL lol ...

    C'est quoi le problème avec un auto-increment ? Ca reste la façon la plus logique de gèrer un ID qui doit être unique.
    Tous les SGBD supportent une colonne auto-increment, donc ça reste du standard indépendant du SGBD.

Discussions similaires

  1. Graphe excel dans une page asp.net
    Par WELCOMSMAIL dans le forum ASP.NET
    Réponses: 3
    Dernier message: 26/12/2007, 11h32
  2. Réponses: 5
    Dernier message: 11/10/2007, 19h11
  3. intégration de code javascript dans une page asp.net
    Par Je-cherche-pfe dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 06/09/2007, 17h10
  4. Réponses: 3
    Dernier message: 13/11/2006, 23h25
  5. Réponses: 1
    Dernier message: 04/04/2006, 11h29

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