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 :

Data truncated lors d'insertion de valeur Double


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 173
    Par défaut Data truncated lors d'insertion de valeur Double
    bonjour,
    mon problème est lorsque je veut inserser une valeur de type double dans ma bd une erreur
    Data truncated
    s'affiche parce que dans le code un double est déclarer par le séparateur "," tandis que dans la BD mysql un double est avec "."

    j'ai essayée tous ces solutions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    double rectif = 100,50;
     string rec = rectif.ToString().Replace(',', '.');
    double rectification = double.Parse(rec);
    double rectification=  double.Parse(rec, new CultureInfo("en-US"));
    double rectification = double.Parse(rec, System.Globalization.CultureInfo.InvariantCulture);
    toujours rectification reçoit et lors de l'insertion avec la requête :
    up = " UPDATE recouvrement.etat SET rectif='" + rectification + "' WHERE date_constatation= '" + date_const + "';";
    l'erreur
    Data truncated
    s'affiche

    j'ai essayée de mettre dans la requête la chaine string dont j'ai replacer le "," par un "."

    up = " UPDATE recouvrement.etat SET rectif='" + rec+ "' WHERE date_constatation= '" + date_const + "';";
    mais j'ai constaté que la valeur rectif dans la BD reçoit une valeur de 0

    j'ai pas comprit comment corriger cet erreur j'ai besoin de vos aide et merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2015
    Messages : 26
    Par défaut
    Vous ne devriez jamais, et je dis bien JAMAIS, construire une requête SQL en concaténant des chaînes de caractères.
    Cela expose votre code à des attaques de type injection SQL.
    Utilisez plutôt des reqêtes paramétrées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string req = "UPDATE recouvrement.etat SET rectif=@rectif WHERE date_constatation= @dateconst;";
    using (SqlCommand cmd = new SqlCommand(req))
    {
       cmd.Parameters.AddWithValue("@rectif", rectif);
       cmd.Parameters.AddWithValue("@dateconst", date_const);
       // ... là vous pouvez exécuter la requête l'esprit dans les pantoufles
    }
    Par ailleurs, le séparateur décimal en c# est le point, et ce quelles que soient vos options de langue. Je suis même étonné que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double rectif = 100,50;
    ne génère pas une erreur de compilation.

  3. #3
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Citation Envoyé par phil.o Voir le message
    Je suis même étonné que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double rectif = 100,50;
    ne génère pas une erreur de compilation.
    Ce n'est pas du code, c'est sa représentation mentale d'un double instancié à partir d'un parsing...

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Et la question bête : comment est définie la colonne ? Quel est son type ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 173
    Par défaut
    bonjour,
    merci pour vos réponses et aides.
    pour le problème de séparateur . et , je l'ai résolue en configurant langue et région dans le panneau de config où la représentation décimale est déclarée avec un séparateur "," c'est pour cette raison que tjr le double est en virgule.
    mais mon problème d'update qui n'exécute pas. j'ai déclarée le champs "const" et "rect" en double toujours la requête m’insère des zero
    j'ai modifiée la déclaration en string pareille tjr elle insère des zéro



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    up = " UPDATE recouvrement.etat SET const='" + cons + "' and rect='" + rec + "' WHERE date_constatation= '" + date_const + "'and num_contrat= '" + pRow["num_contrat"].ToString() + "';";
    merci d'avance pour vos réponses
    Images attachées Images attachées   

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 173
    Par défaut
    juste remq, j'ai essayée d'insérer dans le champs saison la valeur de const pour voir si le prob dans la requête ou dans mysql et comme vous voyez le champs saison a bien récupéré les valeurs tandis que const a récupéré des zero

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2015
    Messages : 26
    Par défaut
    Citation Envoyé par oumay Voir le message
    pour le problème de séparateur . et , je l'ai résolue en configurant langue et région dans le panneau de config
    Vous confondez toujours les options régionales, qui effectivement formattent les nombres, dates, etc... en fonction de votre culture, et le code C#, qui, lui, est INVARIANT: en C#, le séparateur décimal est TOUJOURS le point.

    Il est une notion qui semble vous manquer, et qui pourtant est extrêmement importante : celle de typage de données, et de leur représentation sous forme de chaînes.
    Quand vous écrivez du code, le compilateur a besoin que vous lui fournissiez des informations sous une forme qu'il peut interpréter; il ne tient pas compte de votre culture. Si vous lui écrivez "double valeur = 1,5;", il va vous signifier une erreur de syntaxe, car une virgule, pour lui, n'a rien à faire à cet endroit. Il ne comprendra que "double valeur = 1.5;".
    En revanche, lorsque vous affichez une valeur numérique, celle-ci est "traduite" sous une forme qui, elle, respecte la culture actuellement sélectionnée, soit au niveau de Windows, soit au niveau de l'application, si la culture utilisée pour cette application a été changée programmatiquement. Si vous écrivez "string representationChaineDeMaValeur = value.ToString()", alors là, oui, vous obtiendrez "1,5", si la culture actuellement définie est le français, ou tout autre culture utilisant la virgule comme séparateur décimal.

    J'ai le sentiment que ces notions essentielles vous manquent, et je vous encourage à vous documenter/former sur les bases de la programmation en général, et sur le typage des données, et leur représentation en chaîne de caractères, en particulier.

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

Discussions similaires

  1. Problème lors de l'insertion des valeurs d'un formulaire dans une base
    Par nour93 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 05/03/2015, 02h29
  2. "Data truncated" lors d'une insertion d'entrée
    Par doubiste_59 dans le forum Débuter
    Réponses: 3
    Dernier message: 15/07/2010, 18h47
  3. [MySQL] Problème insertion lors de la présence de double quote
    Par wormseric dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/01/2007, 18h23
  4. [LDAP] Problème lors d'insertion de valeur vide
    Par navis84 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/04/2006, 14h26
  5. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33

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