cnguyen
Messages postés81Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention12 juillet 2006
-
17 mai 2006 à 10:28
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 2011
-
17 mai 2006 à 18:16
Bonjour, voila j'ai un souci.
J'ai dans mon GridView un requête permettant de supprimer la ligne selectionné(dans mon cas un projet) (cela avec le SqlDataSource), je voudrais qu'avant cela, il verifie si le projet que je souhaite supprimer n'est pas utiliser dans une autre table, s'il n'est pas dans l'autre table il peux supprimer sinon il ne peux pas.
if (e.CommandName ==
"Delete") //ou la propriété rowDeleting{
SqlDataReader oDataReader;
String sSQL;sSQL "SELECT COUNT(*) FROM cra WHERE projet @projet";oCommand =
new
SqlCommand(sSQL, oConnection);oDataReader.Read();
int num = oDataReader.GetInt32(0);oDataReader.Close();
if (num != 0 ){
Response.Write(
"<script>alert("" +
" D‚sol‚ mais nous ne pouvez supprimer ce projet! " +
"");</script>");}
Dans la requete, dans le WHERE, je sais pas quoi mettre pour dire qu'il compte les lignes du projets qsue j'ai selectionné :s j'ai mis @projet mais bon...
Et sinon je sais pas comment faire pour lui dire que si c'est different de 0 il n'execute pas la requete!
Merci
A voir également:
[C#][Web 2.0] Verification de la possibilité d'une suppression
cnguyen
Messages postés81Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention12 juillet 2006 17 mai 2006 à 18:11
C'est bon, j'ai trouvé un moyen de faire sa!
J'ai simplement modifié ma requete suppression comme tu me l'avais indiqué...
Pourquoi j'y ai pas pensé avant à la place de toujours rechercher les solution les plus compliquées!!!!
Voici ce que j'ai fais pour ce qui souhaiterais faire la meme chose :
DELETE FROM proact
WHERE (projet = @original_projet)
AND projet not in (SELECT projet FROM cra)
cnguyen
Messages postés81Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention12 juillet 2006 17 mai 2006 à 16:09
Bah je pense que c'est juste une commande a mettre pour dire au GridView de ne pas executer la suppression.
Ei sinon pour le @projet c'est jpas un probleme de requete qui ne marche pas mais plutot d'attribuer a @projet une valeur selectionnée
Enfin peut etre je me trompe :d
cnguyen
Messages postés81Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention12 juillet 2006 17 mai 2006 à 16:22
Je vais voir mais j'ai cru que par exemple, pour ma requete de selection, il aurait suffit de faire sa :
sSQL "SELECT COUNT(*) FROM cra WHERE projet'" + projet_selectionne_du_gridview + "'";
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20114 17 mai 2006 à 17:20
Salut,
Tu ne peux justement pas faire comme ça pour ta requête, à cause de problèmes d'injection SQL (cf cet excellent article), il est donc toujours préférable d'utiliser les objets SqlParameter comme cyril l'a montré...
...bien qu'il ai oublié les ; à la fin (d'anciennes habitudes du VB, cyril ? )
cnguyen
Messages postés81Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention12 juillet 2006 17 mai 2006 à 17:34
Comment sa??? Je dois avant sa mettre une valeur à @projet pour dire que @projet est le projet que je viens de selectionné...mais comment je fais....
?cmd?.commandType = StoredProcedure;
?cmd?.parameters.add(new SqlParameters("@projet", ?value?));
sSQL "SELECT COUNT(*) FROM cra WHERE projet @projet";
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20114 17 mai 2006 à 17:48
Comme tu es sans doute dans l'évènement RowDeleting, tu peux utiliser e.Values["Projet"] ou e.Keys["Projet"] (me souviens plus lequel...) pour récupérer le nom du champ "Projet" de la ligne en cours de suppression (si évidemment ton champ s'appelle "Projet"...)
et ensuite :