[C#][Web 2.0] Verification de la possibilité d'une suppression [Résolu]

Signaler
Messages postés
81
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
12 juillet 2006
-
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
-
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{

SqlConnection oConnection;oConnection =

new
SqlConnection();

String sConnectionString;sConnectionString =

"Server=CHRISTOPHE\\SQLEXPRESS; Initial Catalog=ldap;Integrated Security = True;";oConnection.ConnectionString = sConnectionString;

oConnection.Open();

SqlCommand oCommand;

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

12 réponses

Messages postés
81
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
12 juillet 2006

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)
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
22
Bonjour,

ne serait-ce pas plutot un problème de sql (www.sqlfr.com) ou alors j'ai rien compris au problème :)

<hr />Cyril - MVS - MCP
Messages postés
81
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
12 juillet 2006

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
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
22
Oui, mais d'aprés le debut de ta question, tu vérifies au niveau de SQL, donc pourquoi ne pas le faire dans ta requete de suppression ?

sinon pour mettre un paramètre il faut faire :

cmd.commandType = StoredProcedure
cmd.parameters.add(new SqlParameters("@Project", value))

<hr />Cyril - MVS - MCP
Messages postés
81
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
12 juillet 2006

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  + "'";
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
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 ? )

<hr size="2" width="100%" />Nurgle (Antoine)
Messages postés
81
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
12 juillet 2006

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";
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
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 :

oCommand.Parameters.Add(new SqlParameter("@projet", leNomDuProjet));

<hr size="2" width="100%" />Nurgle (Antoine)
Messages postés
81
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
12 juillet 2006

Au faites, au niveau de la requete de suppression , tu veux que je mette sa sinon a la place de me casser la tete a faire un count sur la table CRA :

UPDATE    proact
SET              projet = @projet
FROM         proact CROSS JOIN
                      cra
WHERE     (proact.projet = @original_projet) AND (cra.projet IS NULL)
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
22
c'est ce que je disais de faire depuis le début ... :p

<hr />Cyril - MVS - MCP
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
et bah voilà...
(pense aussi à aller sur sqlfr.com pour fermer le post que tu as posté vu que tu viens de résoudre ton problème...)

A+ et bonne continuation !

<hr size="2" width="100%" />Nurgle (Antoine)
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
ah, il faut croire que j'explique mieux que toi cyril ...

<hr size="2" width="100%" />Nurgle (Antoine)