[INSERT][SELECT]

amounamanou Messages postés 16 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 2 août 2012 - 20 juil. 2012 à 11:05
amounamanou Messages postés 16 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 2 août 2012 - 26 juil. 2012 à 13:19
bonjour,
je souhaiterais faire une requête Insert contenant une requête Select avec une condition WHERE
SVP aide aide moi a faire

11 réponses

amounamanou Messages postés 16 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 2 août 2012
20 juil. 2012 à 11:07
j'ai oublié de vous dire que la requête avec le code C#
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
20 juil. 2012 à 13:54
Salut,

avec quel BDD ?

SQL :
http://webman.developpez.com/articles/aspnet/sqlparameter/csharp/

MySQL :
http://morpheus.developpez.com/mysqldotnet/

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
0
amounamanou Messages postés 16 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 2 août 2012
20 juil. 2012 à 14:10
avec une base SQL server
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 juil. 2012 à 14:14
Salut,

pour la connexion SQL Server en C#, regarde les définitions de SqlConnection et SqlCommand dans la MSDN. Pour la requête en elle-même le format générique c'est :
INSERT INTO matable1 (champ1, champ2)
SELECT champ1, champ2 FROM matable2;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amounamanou Messages postés 16 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 2 août 2012
20 juil. 2012 à 14:29
voila ma requête
"INSERT INTO Prospect (ID_Prospect,Sujet,Civilite,Tel_1,Prenom,Tel_2,Nom,Fax,Email,CodeP,Ville,Pays,NomSCT,Fonction,Contact) SELECT ('ID_Pays','Id_Ville','5','" + TextBoxsujet.Text.ToString() + "','" + DropDownListcivilite.SelectedItem.ToString() + "','" + TextBoxtelephone.Text.ToString() + "','" + TextBoxprenom.Text.ToString() + "','" + TextBoxnum.Text.ToString() + "','" + TextBoxnom.Text.ToString() + "','" + TextBoxfax.Text.ToString() + "','" + TextBoxemail.Text.ToString() + "','" + TextBoxpostal.Text.ToString() + "','" + TextBoxNomS.Text.ToString() + "','" + TextBoxFonction.Text.ToString() + "','" + TextBoxContact.Text.ToString() + "') FROM Pays,Ville WHERE (( DropDownListpays.SelectedItem.ToString() = Pays.Libelle) AND (TextBoxville.Text=Ville.Libelle))";



mais l'erreur est :
Syntaxe incorrecte vers ','
je sais pas ou est le probléme
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 juil. 2012 à 14:59
Ton erreur devrait être plus explicite que ça.

Perso je vois plusieurs possibilités d'erreur :
- mauvais type (ex. ID_Prospect serait un INT),
- nom de champ incorrect,
- mauvais concaténation (à la fin tes valeurs du code sont directement inscrite dans la string).

Pour revenir sur le code, deux petites remarques :
- si tu as plein de paramètres, utilises des SqlParameter,
- l'attribut Text est de type string, pas besoin d'utiliser ToString() derrière.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
24 juil. 2012 à 14:28
Salut

si tu as plein de paramètres, utilises des SqlParameter

Faisons encore plus simple :
Si tu as ne serait-ce qu'un seul paramètre, utilise des SqlParamter.

Les inconvénients :
- Euh... J'vois pas !

Les avantages :
- Code plus simple à lire
- Code plus simple à maintenir
- Tu peux dissocier ta requête et tes valeurs (et par exemple charger ta requête directement depuis un fichier .sql)
- Le jour où tu veux passer par des procédures stockées, la modif prend environ un quart de secondes
- Pas de risque d'injection SQL
- Pas de problème de format. Tu mets ta valeur, elle sera automatiquement encadrée par ' si nécessaire, tes dates seront au bon format...

Pour utiliser, tu remplaces tes valeurs par @UnNomArbitraire
SELECT * FROM table WHERE Id = @MonId

Ensuite, tu ajoutes le paramètre :
maCommande.Parameters.Add(new SqlParameter("@MonId", monId));


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
24 juil. 2012 à 14:44
Re,

simplement, quand tu as un seul paramètre il est bien plus rapide de faire une concaténation dans la requête (c'est moins propre, j'en conviens).
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
24 juil. 2012 à 15:44
Bah au départ, c'est aussi ce que je me disais. Mais franchement, ajouter une ligne de 60/70 caractères (mais où tu n'en tapes que 20 grâce à Intellisense), c'est ultra rapide (ça prend même pas 10 secondes de plus que la concaténation).
Et comme ça, je ne me pose même plus la question concernant la façon d'écrire des valeurs spéciales comme les DateTime, les Guid...

Et généralement, je teste d'abord ma requête sur SSMS, avec des DECLARE avant la requête, je la copie et je la colle dans une chaine verbatime. J'ai RIEN à modifier.


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
24 juil. 2012 à 16:02
perso je code/teste les requêtes à la volée, hors cas spécifique ça passe.
Pour la concat', je pense notamment aux getter, où la requête est du genre :
SELECT * FROM matable WHERE id = xxx;

id étant un INTEGER dans le SGBD et la variable un int en paramètre du getter, j'ai aucun risque de plantage, la concat' est simple, rapide et sûre.

Après, si le param unique est d'un type suant (tous les autres types en fait ^^) je passerai par un param : la gestion des DATE diffèrent entre les SGBD, pareil pour la gestions des caractères spéciaux dans un VARCHAR ... même les BOOLEAN peuvent poser problème.
0
amounamanou Messages postés 16 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 2 août 2012
26 juil. 2012 à 13:19
Salut

si tu as plein de paramètres, utilises des SqlParameter


Faisons encore plus simple :
Si tu as ne serait-ce qu'un seul paramètre, utilise des SqlParamter.

Les inconvénients :
- Euh... J'vois pas !

Les avantages :
- Code plus simple à lire
- Code plus simple à maintenir
- Tu peux dissocier ta requête et tes valeurs (et par exemple charger ta requête directement depuis un fichier .sql)
- Le jour où tu veux passer par des procédures stockées, la modif prend environ un quart de secondes
- Pas de risque d'injection SQL
- Pas de problème de format. Tu mets ta valeur, elle sera automatiquement encadrée par ' si nécessaire, tes dates seront au bon format...

Pour utiliser, tu remplaces tes valeurs par @UnNomArbitraire
Code :
SELECT * FROM table WHERE Id = @MonId

Ensuite, tu ajoutes le paramètre :
Code C# :
maCommande.Parameters.Add(new SqlParameter("@MonId", monId));

comment je le déclaré SqlParameter ou je met le champ qui se trouve dans la base? car le problème que lorsque je clic sur le bouton save automatiquement les données saisit par un client doivent être enregistrer dans la base
voila comment je le declaré Sql parameter
 commande.Parameters.Add(new SqlParameter("@sujet",TextBoxsujet.Text ));
        commande.Parameters.Add(new SqlParameter("@Civilite",DropDownListcivilite.SelectedItem ));
        commande.Parameters.Add(new SqlParameter("@Nom",TextBoxnom.Text ));
        commande.Parameters.Add(new SqlParameter("@Prenom",TextBoxprenom.Text ));
        commande.Parameters.Add(new SqlParameter("@Tel_1",TextBoxtelephone.Text ));
        commande.Parameters.Add(new SqlParameter("@Tel_2",TextBoxnum.Text ));
        commande.Parameters.Add(new SqlParameter("@Fax",TextBoxfax.Text ));
        commande.Parameters.Add(new SqlParameter("@Email",TextBoxemail.Text )); 
        commande.Parameters.Add(new SqlParameter("@Adresse",TextBoxrue.Text ));
        commande.Parameters.Add(new SqlParameter("@CodeP",TextBoxpostal.Text ));
        commande.Parameters.Add(new SqlParameter("@Ville",DropDownListVille.SelectedItem ));
        commande.Parameters.Add(new SqlParameter("@Pays",DropDownListpays.SelectedItem ));
        commande.Parameters.Add(new SqlParameter("@Source", DropDownListsource.SelectedItem));
        commande.Parameters.Add(new SqlParameter("@Evaluation", DropDownListevaluation.SelectedItem));
        commande.Parameters.Add(new SqlParameter("@NomSCT",TextBoxNomS.Text ));
        commande.Parameters.Add(new SqlParameter("@Fonction",TextBoxFonction.Text ));
        commande.Parameters.Add(new SqlParameter("@Contact", TextBoxContact.Text));
0
Rejoignez-nous