Problème utilisation de type float du Language C# pour SQL

Résolu
draonix Messages postés 43 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 7 juin 2011 - 18 juin 2009 à 09:14
draonix Messages postés 43 Date d'inscription mercredi 27 mai 2009 Statut Membre 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,
++

4 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
18 juin 2009 à 12:41
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 ! -
3
draonix Messages postés 43 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 7 juin 2011
18 juin 2009 à 13:55
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.
++
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
18 juin 2009 à 14:43
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 ! -
0
draonix Messages postés 43 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 7 juin 2011
18 juin 2009 à 17:17
Message Reçu ,
P.S c'est vrai que dans ce cas je n'ai pas encore assez de culture .
0
Rejoignez-nous