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

ADO.NET Discussion :

Violation d’accès concurrentiel incompréhensible.


Sujet :

ADO.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut Violation d’accès concurrentiel incompréhensible.
    Bonsoir,
    Je suis désolé de solliciter à nouveau votre aide mais je suis devant un problème en ADO.NET avec un Dataset déconnecté que je ne comprends vraiment pas.
    J'obtiens une erreur DBConcurencyException dés que j’exécute une commande UPDATE pour enregistrées les modifications d'une ligne dés lors que celles-ci vient d'être nouvellement crée (aussitôt après une commande INSERT).

    Pour que la commande UPDATE fonctionne je suis obligé de fermer l'application et recharger les données (comprenant la nouvelle ligne). Dans tous les cas c'est exactement la même commande qui s'exécute du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE MaTable SET ChampsX = ? WHERE ((ID = ?) AND ((? = 1 AND Champs1 IS NULL) OR (Champs1 = ?))
    Ce que j'aimerais savoir, c'est quelles peuvent être les conditions pour obtenir une erreur de ce type alors que je suis le seul utilisateur.
    En comparant les versions de ma ligne en question juste avant l'appel de la commande UPDATE dans l’évènement RowUpdating j'obtiens (pour tous les champs) :
    e.row(champs1àx).DataRowVersion.Original => Tous les champs sont identique aux champs enregistrés dans la base.
    e.row(champs1àx).DataRowVersion.Current => Ma ligne avec des champs modifiés.

    Dons a priori tous semble normal, y a t'il d'autres conditions à vérifier pour détecter la cause de cette erreur ?

  2. #2
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    ((? = 1 AND Champs1 IS NULL) OR (Champs1 = ?))
    A quoi correspond cette expression ?

    As-tu vérifié si la condition est bien remplie avec les valeurs "original" ?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonjour Graffito, merci de m'avoir répondu.
    L'expression est celle que j'ai pu voir dans l'IDE en débogage pas à pas.
    Cette expression UPDATE, comme les expressions DELETE et INSERT sont construites automatiquement par le CommandBuilder, celui-ci se base sur la commande SELECT que je lui ai indiqué du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM " & MaTables & " WHERE " & Champs1 & " = " & VALUE
    Par contre je ne sais pas voir si l'expression de remplie avec les bonnes valeurs, je verrais ça ce soir au retour du boulot.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Je crois que j'ai trouvé, je vous livre ma reflexion :
    Dans la base de données, je me suis apperçu que les champs Boolean prennent la valeur FALSE par défaut. Je ne suis pas sûre que mon Dataset soit notifié des valeurs par défauts lors de l'insertion d'une nouvelle ligne, et du coup comme je n'affecte aucune valeur à ces champs à la création, il se peut qu'il prennent une valeur NULL dans le Dataset (version original), se qui expliquerait que ma commande UPDATE voit une difference entre la valeur FALSE et la valeur NULL et considere que celle-ci à eté modifiée.
    Il reste à confirmer que cette difference soit interprétée (ou pas) comme une modification de la ligne par la commande UPDATE et n'etant pas devant mon programme je ne peux pas essayer pour le moment.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Génial, c'étais bien ça le problème. J’aurais appris un truc de plus aujourd'hui, je suis pas mécontent....

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

Discussions similaires

  1. Violation d’accès (écriture de l’adresse)
    Par malone12 dans le forum Langage
    Réponses: 20
    Dernier message: 07/02/2018, 10h58
  2. oleDB - Violation de l'accès concurrentiel
    Par JbTech dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/05/2010, 17h05
  3. Problème de violation de clé incompréhensible
    Par Hurin dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/11/2009, 18h59
  4. problème violation acces concurrentiel
    Par fetsa054 dans le forum VB.NET
    Réponses: 0
    Dernier message: 10/03/2009, 15h07
  5. Violation accès concurrentiel
    Par jcervelle dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/04/2007, 09h27

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