draonix
Messages postés43Date d'inscriptionmercredi 27 mai 2009StatutMembreDernière intervention 7 juin 2011
-
18 juin 2009 à 09:14
draonix
Messages postés43Date d'inscriptionmercredi 27 mai 2009StatutMembreDerniè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) :
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,
++
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 ! -
draonix
Messages postés43Date d'inscriptionmercredi 27 mai 2009StatutMembreDerniè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,
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.
++
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 ! -