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 :

Problème bizarre de concaténation


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Problème bizarre de concaténation
    Bonjour tous le monde ,

    Je suis en train de programmer une application sur C# avec sql server 2008 , et je suis confronté à un problème que j'ai essayé de contourner par tous les moyens mais j'y arrive pas et j'ai besoin d'aide mon problème est le suivant :
    sur mon visual studio le type double est reconnu sous la forme (##,#) mais sur sql server le typle Float est reconnu sous la forme (##.#) alors quand j’exécute mon code avec des virgules je me retrouve avec une erreur "Column name or number of supplied values does not match table definition.", ce qui est normal car sql server met les virgules entre les champs et donc il prend la variable double comme 2 champs ex(remise =12,5 il prend 12 comme valeur et 5 comme une autre valeur ).

    J'ai essayé de faire :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string v = "0";
    v = tb_pu_ht.Text.Replace(",", ".");
    pu_ht = Convert.ToDouble(v, new CultureInfo("en-US"));

    Mais au niveau de SqlCommand il ne prend toujours que la virgule même si je remplace , par .

    Voici le code C# :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      cmd.CommandText = "insert into ligne_devis values (" + pu_ht + "," + qte + ",'" + tb_conditionnement.Text + "'," + remise + "," + pu_net + "," + montant_ht + "," + montant_ttc + "," + cb_tva.Text + ")";
      cmd.Connection = con;
      cmd.ExecuteNonQuery();

    Et le code SQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE [dbo].[ligne_devis](
    	[pu_ht] [float] NOT NULL,
    	[qte] [int] NOT NULL,
    	[conditionnement] [nvarchar](250) NULL,
    	[remise] [float] NULL,
    	[pu_net] [float] NULL,
    	[montant_ht] [float] NOT NULL,
    	[montant_ttc] [float] NULL,
    	[tva] [float] NULL
    )

    Merci de me donner votre avis sur ce point ou une solution

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 39
    Points : 39
    Points
    39
    Par défaut
    A mon avis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v = tb_pu_ht.Text.Replace(",", ".");
    pu_ht = Convert.ToDouble(v, new CultureInfo("en-US"));
    Le Replace ne sert pas à grand chose puisque la conversion en double fera réapparaître la virgule !

    Il vaudrait mieux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.CommandText = "insert into ligne_devis values (" + tb_pu_ht.Text.Replace(",", ".") + "," + qte + ",'" + tb_conditionnement.Text + "'," + remise + "," + pu_net + "," + montant_ht + "," + montant_ttc + "," + cb_tva.Text + ")";
    edit : petite erreur dans ma réponse

  3. #3
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 653
    Points : 2 181
    Points
    2 181
    Par défaut
    Pour apporter plus d'infos :

    Lorsque tu mets ton double dans la requête SQL , une conversion en string implicite est faite , et lorsqu'on converti un double en string , le "." se transforme en ","
    c'est pour ça que autant utiliser directement le string comme Jamming Ed l'a montré.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 10
    Points
    10
    Par défaut probléme Résolu
    Merci infiniment
    Jamming Ed et PixelJuice vous me sauvez la vie j'ai tt essayé sauf ça hhh
    probléme résolu ouuuf

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Il faudrait surtout que tu utilises les requêtes paramatrées, ça t'éviterait ce genre de problème, sans compter les injections sql...

    Quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cmd.CommandText = "insert into ligne_devis values (@pu_ht, @qte, @conditionnement, @remise, @pu_net, @montant_ht, @montant_ttc, @tva)";
    cmd.Parameters.AddWithValue("@pu_ht", pu_ht);
    cmd.Parameters.AddWithValue("@qte", qte);
    cmd.Parameters.AddWithValue("@conditionnement", tb_conditionnement.Text);
    cmd.Parameters.AddWithValue("@remise", remise);
    cmd.Parameters.AddWithValue("@pu_net", pu_net);
    cmd.Parameters.AddWithValue("@montant_ht", montant_ht);
    cmd.Parameters.AddWithValue("@montant_ttc", montant_ttc);
    cmd.Parameters.AddWithValue("@tva", cb_tva.Text);
    cmd.Connection = con;
    cmd.ExecuteNonQuery();

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Sinon, il suffit tout simplement d'utiliser les requêtes paramétrées. Plus besoin de s'occuper du format, et en prime ça protège contre les attaques par injection de SQL...

    Il ne faut pas hésiter à les utiliser de partout, à chaque fois qu'il y a besoin de passer des paramètres à une requête. C'est une best-practice.

    [EDIT] Grillé par Jaco67

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Jaco67 Voir le message
    Il faudrait surtout que tu utilises les requêtes paramatrées, ça t'éviterait ce genre de problème, sans compter les injections sql...

    Quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cmd.CommandText = "insert into ligne_devis values (@pu_ht, @qte, @conditionnement, @remise, @pu_net, @montant_ht, @montant_ttc, @tva)";
    cmd.Parameters.AddWithValue("@pu_ht", pu_ht);
    cmd.Parameters.AddWithValue("@qte", qte);
    cmd.Parameters.AddWithValue("@conditionnement", tb_conditionnement.Text);
    cmd.Parameters.AddWithValue("@remise", remise);
    cmd.Parameters.AddWithValue("@pu_net", pu_net);
    cmd.Parameters.AddWithValue("@montant_ht", montant_ht);
    cmd.Parameters.AddWithValue("@montant_ttc", montant_ttc);
    cmd.Parameters.AddWithValue("@tva", cb_tva.Text);
    cmd.Connection = con;
    cmd.ExecuteNonQuery();


    Oui c'est vrai je viens de voir cette façon de faire je suis prenant pour cette méthode merci bcp pour votre réactivité

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    N'oublie pas de marquer le sujet comme résolu si tu as obtenu une réponse satisfaisante.

  9. #9
    Expert confirmé Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Points : 5 522
    Points
    5 522
    Par défaut
    Bonjour,

    Plutôt que Replace, tu peux utiliser ceci :

    pu_ht.ToString(CultureInfo.InvariantCulture)

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

Discussions similaires

  1. [DOM] Problème bizarre avec DOM et XPath
    Par fragmonster dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 16/03/2006, 14h43
  2. [SQL] Problème bizarre requête date
    Par masseur dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/02/2006, 13h12
  3. Probléme bizarre de lecteur
    Par wazer dans le forum Périphériques
    Réponses: 1
    Dernier message: 11/10/2005, 08h52
  4. [Saut de ligne] Problèmes bizarre
    Par gandalf_le_blanc dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/04/2004, 14h06
  5. problèmes bizarres avec jdbc
    Par jaimepasteevy dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 12/12/2003, 12h00

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