Dataset et dataAdaptater, mauvaise mise à jour...

Signaler
Messages postés
6
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
30 mai 2006
-
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
-
Bonjour tout le monde,
J'ai un gros probleme avec ma PTI (bts ig2) de C# de gestion de base de donnée...
Alors voila j'ai 2 tables :
ETUDIANTS :                   CLASSE:
indice                                  code
nom                                    description   
prénom
classe(clé étrangère de classe.code)

J'ai mis la table CLASSE dans le dataset, seulement celle-ci et pas celle d'ETUDIANT pour montrer les possibilités avec et sans dataset, et finalement faire un mix des 2.
Je veux supprimer une classe, alors je vire d'abord tous les étudiants de la classe choisi en direct (par requete direct), et ensuite je veux mettre à jour le dataset pour lui montrer qu'il n'y a plus lieu de se préoccuper des liens avec ETUDIANTS.
Ensuite je tente de supprimer la ligne où contient la classe (ex : IG2, info gestion 2e annee), puis je fais une mise à jour de la base de donnée avec le dataAdaptater...
if(supprElCl(repClasse))
                {
                         ds.Clear;
                    da.Fill(ds, "Classes");
                    ds.Tables["Classes"].Rows.RemoveAt(chiffre);    
                    da.Update();
                }

Le probème cest que la dataset vire bien la ligne de classe, mais la ligne n'est pas viré sur la BDD...
J'ai essayé plusieurs variantes, j'ai bien ajouté le "da.MissingSchemaAction = MissingSchemaAction.AddWithKey;" mais rien à faire...
Pour l'ajout de classes, il n'y a aucun probleme, et le dataset ainsi que la base de donnée se mettent correctement à jour.
Ma prof galère comme moi, alors s'il vous plait, abrégez notre mal de crâne et aidez nous.
Je vous remercie énormément.

8 réponses

Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
le fait de supprimer ta classe dans le dataset signifie a ton dataadapter de le supprimer dans la base

MAIS  si tu n'a pas supprimer tes etudiants lie a ta classe la suppression ne peut ce faire

try
{
ds.Clear;
                    da.Fill(ds, "Classes");
                    ds.Tables["Classes"].Rows.RemoveAt(chiffre);   
                    da.Update();
}
catch(Exception xcp)
{
    MessageBox.Show(xcp.Message);
}

Essaie deja de catcher l'erreur tu devrais avoir un message de ta bdd qui te dis qu'une contrainte n'a pas ete respecter

les solutions :
- faire une boucle avant ton da.Update qui va supprimer tout les etudiants appartenant a ta classe
- dans ta base de données modifies la contrainte d'intégrité entre ta table CLASSE et ETUDIANT en mettant un delete cascade...

<hr />Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
30 mai 2006

Je te remercie de t'interesser à mon cas...
J'ai deja catcher les erreurs, aucuns problèmes apparents...

Dans mon dataset je n'ai mis que les classes, pas les étudiants, les étudiants je les supprime autrement :strSql "DELETE FROM Etudiants WHERE Etudiants.classe '" + classe + "'";
SqlCommand cmdSuppr = new SqlCommand(strSql, cn);
cmdSuppr.ExecuteNonQuery();

C'est pour cela que je fais un fill sur mon da...
J'ai entendu parler de la contrainte d'intégrité, mais je n'arrive pas a créer la requête :/.
Pourrais-tu m'éclaircir sur ce point? Ce serais royale si tu me l'a donnais (ici aussi ma prof n'a pas su ^^ )
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

Pour les contraintes d'intégrité :

Lors de la requete SQL de construction de tes tables, il suffit de mettre ça juste apres la reference à la clef étrangère 'FK_Classe':
ON DELETE RESTRICT
Messages postés
6
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
30 mai 2006

Il n'y a pas un moyen de la faire avec un ALTER TABLE ?
Je sais je suis chiant :p...
Merci en tout cas
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
alter table ETUDIANT
   drop constraint FK_ETUDIANT_REFERENCE_CLASSE
go

alter table ETUDIANT
   add constraint FK_ETUDIANT_REFERENCE_CLASSE foreign key (code)
      references CLASSE (code)
      on delete cascade
go

Ou FK_ETUDIANT_REFERENCE_CLASSE est le nom de ta reference valable sous sql..

c une prof de quoi oO

<hr />Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
on delete cascade : supprime automatiquement les etudiant qd tu supprime une classe
on delete restrict : empeche la suppression d'une classe si des etudiants y sont rataché

<hr />Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
30 mai 2006

Ouf merci beaucoup, je pourrais tester ca que jeudi (parce que j'ai pas accès a la BDD).
Je pense que ca va pas mal m'aider...
Euh...c'est une prof d'algo, de prog et de merise (pas SQL, seulement MCD, MCT etc...).

Merci en tout cas (encore).

P.S: je viens d'apprendre que je suis accepté en apprentissage en MIAGE a creteil (paris XII), YOUPI!!!! :p
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
felicitation :)

et good luck avec tes profs ^^

<hr />Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."