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 :

c# access : problème de virgule au lieu de point dans les doubles


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 11
    Points
    11
    Par défaut c# access : problème de virgule au lieu de point dans les doubles
    J'utilise C# dans une appli winform. Cette appli pointe sur une base de données Access. Pour la lecture/écriture de la base de données, je passe par un dataset fortement typé. Etant sur un ordinateur français, Access utilise la virgule au lieu du point, comme séparateur décimal.

    Une des tables contient un champ réel double. Je peux lire la table sans problème, même avec des valeurs décimales (ie 20,25 me donne un double qui vaut 20.25). Par contre, si je crée une nouvelle ligne, que je lui affecte une valeur avec décimale, lors de la mise à jour de la base de données, j'obtiens une exception "Type de données incompatible ...". L'erreur vient bien de la décimale, car si toutes mes valeurs sont entières (stockées comme double, mais avec une partie décimale égale à 0), tout se passe bien.
    J'ai bien vérifier que ma base utilise des doubles, ainsi que le dataset. Comme je passe par ce dataset, je ne peux voir la commande sql réellement utilisée.

    J'ai testé en changeant le paramètre "symbole décimal" dans le panneau de configuration de windows, pour utiliser le point au lieu de la virgule. Et tout fonctionne ! Bien sûr je ne pourrai pas demander à mes utilisateur de faire la même chose, ce qui ne règle donc pas le problème.

    Si quelqu'un peut me guider vers une solution ...

  2. #2
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 318
    Points : 1 236
    Points
    1 236
    Par défaut
    Bonjour,

    Essayes de regarder la classe NumberFormatInfo. Tu peux choisir le séparateur de décimal que tu souhaite.

    Ça devrait t'éviter d'avoir a modifier toi même à la main le séparateur de décimal.
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Points : 493
    Points
    493
    Par défaut
    Bonjour

    Problème probablement lié à l'utilisation de requêtes non paramétriques.

    Merci de poster le code faisant l'insertion/update de lignes dans la table.
    Beaucoup trop d'hommes viennent au monde : l'Etat a été inventé pour ceux qui sont superflus. (Friedrich Nietzsche)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Le problème c'est que je ne peux pas poster de code, car je passe par un dataset créé par visualstudio. Je ne fais que demander au dataset de faire un update, après avoir rempli une nouvelle datarow.
    Ainsi j'utilise une fonction fournie par VS pour créer une nouvelle datarow :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBAccess.VBDdataset.nom_table.Addnom_tableRow(param1,param2, ...);
    DBAccess est le nom d'un objet que j'ai créé qui gère le dataset (rien de particulier, juste une initialisation du dataset)
    VBDdataset est le nom du dataset. La fonction Addnom_tableRow est automatiquement créée en même temps que le dataset. Une fois l'ajout terminé, je ne fais qu'appeler la fonction UpdateAll

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBAccess.tableAdapterManager.UpdateAll(DBAccess.VBDdataset);
    Cette fonction gère entièrement la mise à jour (création de transaction, ...).
    L'erreur se produit sur la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Adapter.Update(dataTable)
    En vérifiant, l'exception est lancée par cette ligne, pour la 1ère row avec un double avec partie décimale. Je n'ai donc pas accès à la requête sql, mais je suis près à parier qu'il s'agit d'un soucis de virgule mal interprétée dans la requête, du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE nom_table SET val=10,25
    Je vais commencer par regarder la solution proposée par Momoth (NumberFormatInfo)

  5. #5
    Membre habitué Avatar de maleaume
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 131
    Points
    131
    Par défaut
    J'ai testé en changeant le paramètre "symbole décimal" dans le panneau de configuration de windows, pour utiliser le point au lieu de la virgule. Et tout fonctionne ! Bien sûr je ne pourrai pas demander à mes utilisateur de faire la même chose, ce qui ne règle donc pas le problème.
    regarde du coté de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Globalization.CultureInfo
    ca te permettra dans ton code de définir la culture pour "attaquer" ta base avec les bons formats

Discussions similaires

  1. Virgule au lieu de point sur pavé numérique
    Par blaame dans le forum SAP
    Réponses: 1
    Dernier message: 20/02/2011, 17h28
  2. Réponses: 1
    Dernier message: 08/03/2009, 12h26
  3. Réponses: 3
    Dernier message: 03/08/2007, 10h06
  4. Séparateur de décimaux : virgule au lieu du point
    Par relena93 dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2007, 12h04
  5. Réponses: 2
    Dernier message: 07/04/2007, 12h29

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