Comment passer une zone decimal dans un WHERE en Transac SQL
LVca_TtcVte est declaré en MoneyCode:
1
2
3 decimal MontDdu WHERE LVca_TtcVte = ' + MontDdu + '";
J ai une Syntax erreur
Nerci de votre aide
DEVERNES Claude
Version imprimable
Comment passer une zone decimal dans un WHERE en Transac SQL
LVca_TtcVte est declaré en MoneyCode:
1
2
3 decimal MontDdu WHERE LVca_TtcVte = ' + MontDdu + '";
J ai une Syntax erreur
Nerci de votre aide
DEVERNES Claude
En utilisant une variable / requête paramétrée.
Accessoirement, le type "money" est deprecated, car induit totalement en erreur (il n'y a aucune notion de devise, et encore moins de conversion).
Donc la seul solution c est d extraire les données ( dataset ou datareader ) et de faire ma selection après ?
merci
Précisez un peu plus car votre demande est incompréhensible....
Sinon, pour le type décimal la requête serait par exemple :
A +Code:
1
2
3SELECT ... FROM ... WHERE LVca_TtcVte = 123.45;
Pour SQLPRO
SELECT ...
FROM ...
WHERE LVca_TtcVte = 123.45;
123.45 est dans une variable declarée en decimal donc je ne connait pas la valeur
Pour QtringBuilder
Donnes des reponses precises
Puisqu'apparemment, si j'en juge les guillemets qui trainent dans la petite portion de code que tu soumets à notre réflexion, la requête est construite dans une chaine pour, je suppose, une exécution dynamique, il faut que la valeur décimale soit insérée dans cette chaine dans le format attendu par le moteur d'exécution de requête. La conversion de valeur décimale en chaine doit donc être explicite, en indiquant précisant le format attendu en particulier au niveau du séparateur décimal.
L'utilisation d'une requête paramétrée est une autre solution, certainement plus efficace.
Pour obtenir des réponses plus précises, il est aussi nécessaire de poser des questions précises. Par exemple en indiquant le message associé à l'erreur de syntaxe rencontrée et en donnant un peu plus de visibilité sur le code exécuté...
Bonjour,
Ton premier message présente une requete, cette requête est executée comment? MontDdu est quoi une variable dans ssms, dans un programme externe, si oui en quel langage?
Ce que Stringbuilder essayait de te dire, c'est que la concaténation de sql telle que tu l'as faite, entraine des risque d'injection de sql, que se passerait il si MontDdu contenait '15;drop database XXX;
Pour eviter l'injection de sql on utilise des requetes paramètrées
Le declare @MontDdu est généralement fait dans le langage appelant.Code:
1
2
3declare @MontDdu money=15.3 WHERE LVca_TtcVte = @MontDdu;
https://fr.wikipedia.org/wiki/Injection_SQL
Dans la mesure où on n'a pas le contexte, StringBuilder ne pouvait pas être très spécifique.
[edit] Ce message a été écrit avant le dernier message de Stringbuilder en brouillon. Je l'ai posté sans avoir vu ce dernier message[/edit]
Cordialement
Soazig
Je fais une application Windows form en c#
J arrive a mettre des variables string , datetime ou int dans ma chaine SQL Mais pas de variable en decimal.
Je sais qu il faut faire un Cast de la zone mais je n y arrive pas.
j ai erreur de syntaxe
Merci
On va commencer par le début : lire la documentation.
https://docs.microsoft.com/fr-fr/dot...ramework-4.7.2
Chapitre "Configuration des paramètres et des types de données des paramètres"
https://docs.microsoft.com/fr-fr/dot...ter-data-types
Là dedans, on trouve :
- Spécification des types de données de paramètre
=> On y voit que "money", "currency" et autres "devise" ben c'est pas la panacée... forcément, c'est deprecated...
- Utilisation de paramètres avec un objet SqlCommand ou une procédure stockée
=> On y apprend à passer des paramètres typés à une requête. Attention, Microsoft donne un exemple uniquement pour l'appel à une procédure stockée (bonne pratique de développement) mais ça marche aussi avec une requête paramétrée ("select * from table where id = @parameter")