none
DBConcurrencyException aléatoire RRS feed

  • Question

  • Bonsoir,

    Je développe une appli d'accès à une base Access 2007 (VB 2008 SP1, .NET 3.5 SP1, Win 7). Lors d'un TableAdapterManager.UpdateAll(theDataSet) une exception DBConcurrencyException est parfois (rarement en fait) levée.
    Ce comportement n'est pas reproductible (debug ou release) d'où mon sentiment qu'il est aléatoire. A noter que les update en question n'agissent que sur une table à la fois (pas de relation ou de cascade).
    Comme je catche l'exception, je donne la possibilité à l'utilisateur de recommencer, et il arrive que l'update fonctionne à nouveau, ou bien qu'il lui faille quiiter l'appli. Bien entendu, en refaisant les même manipulations, l'UpdateAll se passe correctement.
    Je précise que l'accès aux données (dataset et adapter) sont tous effectués dans le même thread.

    J'ai eu beau chercher sur le Google, je n'ai trouvé aucun cas similaire, les exceptions de ce type pouvant toujours être expliquées par une vraie violation d'accès (un utilisateur modifie un enregistrement, pendant qu'un autre utilisateur à déjà effectué une modif sur le même enregistrement, oubli de récupération de la clé primaire après un insert, etc...), et je ne me trouve dans aucun de ces cas.

    Quelqu'un a-t-il déjà été confronté à un cas pareil ?
    Avez vous des pistes vers lesquelles je pourrais me pencher ?

    Merci d'avance.
    jeudi 4 mars 2010 00:04

Réponses

  • Bonjour,

    Désolé de vous avoir laissé sans nouvelle. Je reviens pour vous informer que ce problème ne s'est plus manifesté depuis plus de 2 mois. Ayant subi quelques écrans bleus, je me suis aperçu que j'avais des barrettes défectueuses.

    Changement de barrettes, mise à jour du bios (censé "Improve memory compatibility"....), et depuis, plus rien, nada.

    Merci à tous.

     

    lundi 24 mai 2010 10:00
  • Bonjour,

    Ce genre d'exception peut-être produit avec des problèmes d'arrondis :
    .NET essaye de modifier une ligne dont une valeur n'est pas exactement la même par rapport à celle présente dans la base de données.

    Par exemple :
    Si vous avez dans une base de données une ligne avec une colonne TVA avec une valeur à 19,6000000001.
    Si côté .NET, vous avez la valeur : 19,6
    Lors de l'exécution de la requête de mise à jour :
    UPDATE SET ....
    WHERE Tva = @ancienneTVA

    Cette requête échouera (ne modifie aucune ligne => DBConcurrencyException), car @ancienneTVA est "différent" de Tva.

    Pouvez-vous nous lister les différents champs de la table qui pose problème (nom + type + précision).

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    jeudi 4 mars 2010 21:55
    Modérateur

Toutes les réponses

  • Bonjour,

    Ce genre d'exception peut-être produit avec des problèmes d'arrondis :
    .NET essaye de modifier une ligne dont une valeur n'est pas exactement la même par rapport à celle présente dans la base de données.

    Par exemple :
    Si vous avez dans une base de données une ligne avec une colonne TVA avec une valeur à 19,6000000001.
    Si côté .NET, vous avez la valeur : 19,6
    Lors de l'exécution de la requête de mise à jour :
    UPDATE SET ....
    WHERE Tva = @ancienneTVA

    Cette requête échouera (ne modifie aucune ligne => DBConcurrencyException), car @ancienneTVA est "différent" de Tva.

    Pouvez-vous nous lister les différents champs de la table qui pose problème (nom + type + précision).

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    jeudi 4 mars 2010 21:55
    Modérateur
  • Bonjour,

    Je ne connaissais pas cette éventualité, mais aucune de mes tables ne contient de valeur décimale. Les seules colonnes contenant des valeurs numériques sont au format  'Entier'.
    Ces exceptions ne sont pas liées à une table en particulier, puisqu'elles peuvent être levées sur des tables différentes. D'ailleurs en général (je n'ai pas encore fait de stats), elles sont très souvent levées lorsqu'il s'agit du premier UpdateAll que j'effectue sur la base (quelque soit la table).

    Cordialement
    vendredi 5 mars 2010 11:17
  • Bonjour,

    Pouvez-vous reproduire le problème sur votre poste de développement ?

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 7 mars 2010 20:38
    Modérateur
  • Bonjour Emmanuel,

     

    Le type de problème que vous rapportez est difficile à investiguer si on n’a pas des pas de reproduction. Si vous trouvez un scenario pour lequel l’erreur arrive plus souvent, ou si vous pouvez au moins la reproduire sur d’autres machines, il sera plus facile de trouver une solution.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    lundi 8 mars 2010 12:11
  • Bonjour,

    Désolé de vous avoir laissé sans nouvelle. Je reviens pour vous informer que ce problème ne s'est plus manifesté depuis plus de 2 mois. Ayant subi quelques écrans bleus, je me suis aperçu que j'avais des barrettes défectueuses.

    Changement de barrettes, mise à jour du bios (censé "Improve memory compatibility"....), et depuis, plus rien, nada.

    Merci à tous.

     

    lundi 24 mai 2010 10:00
  • Bonjour,

     

    Merci pour le suivi de ce thread et pour les informations!

     

    Cordialement,

    Alex

     


    _________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic , C# , C++ , .NET , ASP.NET , SQL Server , Silverlight , SharePoint 2010 , SharePoint 2007

     

     

    lundi 24 mai 2010 10:04