[INSERT][SELECT]

Signaler
Messages postés
16
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
2 août 2012
-
Messages postés
16
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
2 août 2012
-
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

Messages postés
16
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
2 août 2012

j'ai oublié de vous dire que la requête avec le code C#
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
2
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
Messages postés
16
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
2 août 2012

avec une base SQL server
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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;
Messages postés
16
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
2 août 2012

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
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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.
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
40
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é. -
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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).
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
40
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é. -
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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.
Messages postés
16
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
2 août 2012

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));