Problème utilisation de type float du Language C# pour SQL [Résolu]

Messages postés
43
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
7 juin 2011
- - Dernière réponse : draonix
Messages postés
43
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
7 juin 2011
- 18 juin 2009 à 17:17
Bonjour à tous et à toutes,
Comme les conseils que vous m'avez donnés m'ont été très utiles. J'aimerais avoir votre avis sur un petit problème que je rencontre lorsque je tappe une requête SQL dans mon code en C#. J'ai réussi à établir la connexion et j'arrive à faire certaines choses comme l'enregistrement de données dans un tableau (j'en ai besoin pour un code plus général ^^ ).  Cependant je rencontre des problèmes lorsque je dois utiliser une variable de type float. Pour être plus précis voici mon code en C# (pour plus de simplicité voici la ligne qui pose problème) :
              sql += "HAVING (([gammatransitions&conversion].[Gamma transition energy])='826.1');";


Là par exemple(c'était mon dernier essaie) j'ai envie de mettre un float à la place de "826.1" dans une variable tel que je puisse faire appel à float plus haut dans le code (remplacer par une variable float).
J'ai essayé d'écrire cette requête de différentes façons  mais je bloque....
Si quelqu'un peut me conseiller ou mieux me dire comment faire, ce serait génial  .
Merci d'avance,
++
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
3
Merci
Salut

Si tu rencontres des problèmes avec tes variables pour tes requêtes SQL en C#, il n'y a même pas à hésiter => Requête paramétrée.

Tu met "@UnNom" dans ta requête à l'endroit où il est censé y avoir une variable, quel que soit son type :
sql +"HAVING (([gammatransitions&conversion].[Gamma transition energy]) @MaValeur);";

Puis dans la commande, tu ajoutes ta variable en paramètre :

maCommande.CommandText = sql; // A priori c'est ce que tu fais déjà
maCommande.Parameters.Add(new SqlParameter("@MaValeur", monFloatQueJeVeuxMettreDansMaRequete));

PS : évite les caractères spéciaux et les espaces dans tes noms de variables / classes / tables / fichiers... (en l'occurrence, le & dans ta table et les espaces dans ton champ)

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de krimog
Messages postés
43
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
7 juin 2011
3
Merci
Salut, merci pour ta réponse. J'ai trouvé un autre moyen d'arranger cette erreur en plus de ta méthode .
Car il y a eu en souci un conflit entre le "." et la virgule "," en C#.
Quand on définit un double, il faut l'intialiser avec un "."
<ex>
double my_double = 8.18;
// lorsque l'on fait un WriteLine on obtient
<console> 8,18  </console>
</ex>
et ça la commande SQL n'accepte pas du coup ce que j'ai  fait,
string my_string = my_double.ToString();
my_string.Remplace(",",".");

Ca l'a accepté et m'a rendu les bons résultats.
Voilà merci en tout cas  pour ta réponse j'ai testé ça fonctionne aussi très bien. ^^. Je propose ça juste au cas où quelqu'un veux faire de cette façon :p.
++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de draonix
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
0
Merci
Oui, je me suis douté du problème de "," à la place du "." (et effectivement, un Replace(",", ".") marche très bien) mais je te proposais plutôt ma méthode, car
- C'est plus lisible, car ça t'évite à chaque variable de faire '" + mavariable + "' ou " + mavariable + "
- Pas de problème de culture, comme dans ton cas (le fait que ça mette un . ou une , lors du ToString() dépend juste de la culture)
- C'est plus facile à modifier (toutes les variables sont à la suite)
- Tu n'as pas à te soucier du faire de devoir ou non mettre ' autour de ta valeur selon son type
- Tu n'as presque rien à changer si tu désires faire une procédure stockée (juste à remplacer ton CommandText par le nom de la procédure et à choisir "StoredProcedure" comme CommandType)

Donc bon, avec tous ces avantages, je te conseille de n'utiliser que ça.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Commenter la réponse de krimog
Messages postés
43
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
7 juin 2011
0
Merci
Message Reçu ,
P.S c'est vrai que dans ce cas je n'ai pas encore assez de culture .
Commenter la réponse de draonix

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.