Comment utiliser une base Access?

Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009 - 24 août 2007 à 09:26
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009 - 26 août 2007 à 01:13
Bonjour,

Voila, j'ai une base de donnée Access avec laquelle je veux travailler, donc INSERT,DELETE, etc....
J'ai donc établit une connexion à cette base à l'aide de l'outil "Ajouter une nouvelle source de données" de VS2005, il ma créé un DataSet.

Ne connaissant pas ce composant (DataSet), je créé un objet avec ce DataSet et je m'apperçoit rapidement que je peux faire:
monDataSet.matable.AddRow(), alors je me dit: "Super ça va être facile de travailler avec ma BDD!".

Seulement, le AddRow() n'ajoute rien du tout à ma base Access :s

Donc ma question est: Comment utiliser un DataSet?, ou plus généralement: Comment communiquer avec une base de donnée Access?

Tuizi

15 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
24 août 2007 à 09:32
Bah... le AddRow ajoute une ligne à une DataTable... mais ne l'enregistre pas dans la base de données.

il faut faire monDataSet.matable.Update() pour cela...

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
24 août 2007 à 10:07
La méthode Update() n'existe pas!

Il y a AcceptChganges() qui à l'air sympa... mais ça n'ajoute aucune ligne dans ma base de données!

Tuizi
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
24 août 2007 à 10:11
oops... j'm'a trompé... la méthode Update n'est pas sur la DataTable mais sur le DataAdapter.
La méthode AcceptChange sert à autre chose... donc à ne pas utiliser dans ton cas.


 











Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
24 août 2007 à 10:13
Donc il faut que j'ajoute un DataAdapter?

Tuizi
0

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

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
24 août 2007 à 10:17
non non... si tu utilises .net 2.0, les DataTableAdapter sont automatiquement créé.

Regarde ton code... tu as dû à moment ou un autre faire Fill() pour remplir tes tables... et bien, il suffit de faire la même chose, mais avec Update()

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
24 août 2007 à 10:29
Ups... euh... non je n'ai fait à aucun moment un Fill... et j'ai rempli aucun tableau!

Mais j'ai mis en place un DataTableAdapter:

monDataSetTableAdapaters.matableAdapter tableAdapater = new monDataSetTableAdapaters.matableAdapter();

tableAdapater.Update(monDataSet);

Mais chose étrange... lorsqu'il fait ce Update... il sort de la fonction :s, par exemple si juste après cette Update() je fais un int i = 0, et bien je m'aperçoit qu'il ne passera pas par cette ligne!!! :s

Tuizi
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
24 août 2007 à 10:41
Bon... on reprend au début...

Tu as importé dans ton problème ta base de données Access.
Visual Studio a créé un certains nombre de classe pour l'acces aux données. Parmis elles, tu trouves un dataset typé et des DataTableAdapters.
Chaque DataTableAdapter doit contenir 4 requêtes : Select (SelectCommand), Updale (UpdateCommand), Insert (InsertCommand) et Delete (DeleteCommand) qui correspondent aux différents types d'opérations que tu peux faire sur tes tables. En gros, au moment où tu vas appeler la méthode Update du DataTableAdapter, ADO.net va regarder chaque ligne et appliquer la commande nécessaire.

Normalement, dans ton code (peut-être dans le .designer.cs) tu dois appeler la méthode Fill du DataTableAdapter pour "remplir" ta DataTable... et donc, il faut que tu réutilises ce même DataTableAdapter pour faire l'update.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
24 août 2007 à 11:24
Pour mes DataTableAdapter, j'ai bien .Update(colum1,colum2,etc...) pareil pour Insert et Delete... mais étrangement j'ai pas le Select

Pour .Fill, je l'ai bien dans le monDataSet.designer.cs.

Je l'ai suivit au debuger quand il fait le Update() et il passe uniquement dans la propriété Adapter... et rien d'autre... je sais pas si ça peut-t'aider... mais en tout cas il ne fait toujours pas le code que je met juste après le Update()

Tuizi
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
24 août 2007 à 11:28
s'il ne passe pas dans le code après, c'est qu'il y a une exception de levé (erreur)... donc, soit ta requête n'est pas bonne... soit tu as un problème ailleur...

tu as un try/catch quelque part ?

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
24 août 2007 à 12:00
Oui j'ai bien pensé à une exception, mais en debug aucun erreur et je n'ai aucun try catch!

J'ai tout de meme mis mon Update() dans un Try Catch... et là... miracle!!! j'ai bien une exception!!! qui me dit: "Le paramètre ?_3 n'a pas de valeur par défaut."  et la, ba il continue bien mon code!

Bon maintenant, si je m'interesse à ce message d'erreur je vois pas trop de quoi ça peut venir, ma fonction AddRow() prend bien 5 String et je lui fournit bien 5 String...
Mais j'ai peut-etre une piste... j'ai modifier le nom de certain champ dans ma base de donnée... et du coup le DataSet n'a pas du être mis à jour! Faut-il que je supprime mon DataSet et que je le recréé? ou il y a un outils pour le mettre à jour?

Tuizi
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
24 août 2007 à 12:09
dans le menu contextuel, tu dois avoir une option pour mettre à jour...

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
24 août 2007 à 12:33
paradoxalement le DataSet est présenté comme etant tres simple d'utilsation (pour les debutants) ,or en fait c'est tout le contraire pour vraiment utiliser toute sa "puissance" il faut vraiment deja bien le connaitre
il y a un tuto qui peut t'aider ici
http://www.csharpfr.com/tutoriaux/QUELQUES-ASTUCES-POUR-ADO-NET-MODE-DECONNECTE_621.aspx

++

Se poser les bonnes questions ;) 
apporter les réponses
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
24 août 2007 à 13:59
romagny13> Merci pour ce lien

Bon sinon, j'ai refait le DataSet, et plus d'Exception . Mais.... lorsque j'ouvre mon .mbd, ma base de donnée et vide , il n'y a pas quelque chose à faire en plus?

Tuizi
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
25 août 2007 à 13:22
C'est bon, j'ai pu revoir tout ça tête posé, et ça fonctionne parfaitement maintenant.
Merci pour ton aide sebmafate

Tuizi
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
26 août 2007 à 01:13
Ah euh... dernière question... pourquoi lorsque je ferme mon programme les lignes qui ont été ajouté dans la BDD Access se supprime???

Tuizi
0
Rejoignez-nous