Probleme sauvegarde sur BDD. [Résolu]

Messages postés
124
Date d'inscription
jeudi 5 juin 2003
Dernière intervention
10 février 2008
- - Dernière réponse : Kleidp
Messages postés
124
Date d'inscription
jeudi 5 juin 2003
Dernière intervention
10 février 2008
- 17 janv. 2008 à 12:38
Bonjour,

Cela fait plusieurs heures que je bloque sur l'impossibilité d'appliquer mes changements sur ma base Access.

Voici comment je procède:
<ol><li>    Je créé ma base Access.</li><li>    J'importe ma base, en faisant une nouvelle connexion.</li><li>    Je créé un nouveau dataSet dans lequel j'incorpore la table Client (avec un cliqué-glissé depuis la fenetre "Server Explorer"), j'ai donc mon dataAdapter qui se créé en même temps.</li></ol>
Mon dataAdapter remplit bien mon dataSet avec la methode Fill, pas de soucis. Mais lorsque j'ajoute ou modifie un enregistrement celui ci n'est pas sauvegardé dans ma base, alors que le dataSet à bien été modifié. Il n'y a aucune erreur d'éxécution !

Voici comment je sauvegarde:
ClientDataAdapter.Update(dataSet1)
ClientDataAdapter.Update(dataSet1.Client) // Ne fonctionne pas non plus, et aucune erreur

J'ai vérifié l'updateCommand et l'insertCommand de l'adapter et le SQL est correct.
J'ai aussi essayé de modifier les "buid Action" et "Copy to Output Directory" dans les propriétés de ma base, mais rien de concluant. Par contre c'est peut être ici que ca bloque d'après moi.
J'ai aussi essayé avec un SQL SERVEUR 2005 Express et le problème reste le même.

Voila, je n'ai plus aucune pistes :(

Merci de votre aide
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
124
Date d'inscription
jeudi 5 juin 2003
Dernière intervention
10 février 2008
3
Merci
Ok j'ai enfin trouvé ...

Pour la postérité:

Lors du cliqué gissé d'une table sur le dataSet, VS demande si l'on veut importer la base dans le projet : Surtout pas!
Bien que la base se trouve sur un répertoire quelconque il faut la copier a la base de votre .exe cad, en phase de production, sur ...bin\debug

Voila les données sont bien enregistrée.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Kleidp
Messages postés
112
Date d'inscription
vendredi 15 avril 2005
Dernière intervention
13 juin 2010
0
Merci
Je pense que j'ai le problème mais c'est un problème sur l'insertion. Avec ma méthode insertUser(), en principe je devrai inséré des données dans la base de données (ma bdd est SQL Server). La requête est correct. Cependant, lors de l'insertion à partir du logiciel, ça fonctionne aussi. Or le problème c'est lorsque je relance l'application, l'utilisateur que j'ai inséré n'est plus là.
Alors je comprend pas pourquoi !

C'est bizard !

Je vais essayé ta méthode.
Commenter la réponse de The Red Man
Messages postés
112
Date d'inscription
vendredi 15 avril 2005
Dernière intervention
13 juin 2010
0
Merci
la bdd est bien dans le dossier que vous avez mentionné. Mais ça ne fonctionne toujours pas. Cependant, ma bdd se situe dans un dossier et ce dossier ce situe dans le dosser ...\bin\debug\

J'espere que ce dossier ne change rien !
Commenter la réponse de The Red Man
Messages postés
124
Date d'inscription
jeudi 5 juin 2003
Dernière intervention
10 février 2008
0
Merci
Je ne pense pas que c'est un problème de dossier. Vérifiez tout de même la chaine de connection : Project -> Properties -> Settings : ConnectionStrings

Le problème intervient seulement sur l'insertion ?

Si oui essayez, après le adapter.Update(Table) de faire :
dataSet.Table.Clear();
adapter.Fill(Table);
// ok c'est pas optimal, mais ça me resoud mes pb d'insertions.

Pour une nouvelle insertion j'utilise soit les dataRow() soit les CurrencyManager().

Sinon une idée (saugrenues ?) me vient à l'esprit :

Déplacer la base et le .exe dans un dossier différent (ex: C:\TempProject) et tester
Commenter la réponse de Kleidp
Messages postés
112
Date d'inscription
vendredi 15 avril 2005
Dernière intervention
13 juin 2010
0
Merci
En principe les dataRow() (je ne connais pas les CurrencyManager()) ne sert à rien dans l'insertion ou dans l'update puisque c'est les méthodes du TableAdapter qui s'en charge des insertions ou des modifications. A moins que je me trompe complètement.

Pour répondre à votre question, l'update et l'insertion ne fonctionne pas.
Commenter la réponse de The Red Man
Messages postés
124
Date d'inscription
jeudi 5 juin 2003
Dernière intervention
10 février 2008
0
Merci
Dsl je seche, vous avez exactement les memes soucis que sur mon poste
de départ mais si vous avez bien appliqué ma réponse accepté, alors je
ne vois pas !

Note:
Le dataRow permet d'ajouter une ligne au dataSet :

DataRow dr = dataSet.Table.NewRow();
dr["titre"]= "Mme"
dr["nom"] = "Dupont"
.....
dataSet.Table.Rows.Add(dr);

Après il y a tellement de façons d'ajouter une ligne avec C# que c'est suivant les affinitées :)
Commenter la réponse de Kleidp
Messages postés
112
Date d'inscription
vendredi 15 avril 2005
Dernière intervention
13 juin 2010
0
Merci
Ma méthode fonctionne bien avec ASP .Net. Je vais essayer votre méthode.

Merci en tou cas. :)
Commenter la réponse de The Red Man
Messages postés
112
Date d'inscription
vendredi 15 avril 2005
Dernière intervention
13 juin 2010
0
Merci
                Project01Gestion._01GestionDB.bddDataSet.DossiersRow dossierRow;           

                 try
                {
                    _01GestionDB.bddDataSet.DossiersDataTable dtDossier =
                        new Project01Gestion._01GestionDB.bddDataSet.DossiersDataTable();

                    dossierRow = (_01GestionDB.bddDataSet.DossiersRow)dtDossier.NewRow();

                    dossierRow["idDossier"] = 1;
                    dossierRow["nomDossier"] = "ds";
                    dossierRow["PeriodeDebut"] = "ss";
                    dossierRow["PeriodeFin"] = "ss";
                    dossierRow["CloturerCompte"] = false;
                    dossierRow["UserID"] = 1;

                    dtDossier.Rows.Add(dossierRow);
                }
                catch
                {
                    Utility.MsgBox.showErrorMsg("error","ee");
                }

Votre méthode ne fonctionne toujours pas !

voici ma méthode :
            _01GestionDB.bddDataSetTableAdapters.DossiersTableAdapter taDossier;
           
           
            try
            {
                // instanciation du taDossier
                taDossier = new _01GestionDB.bddDataSetTableAdapters.DossiersTableAdapter();

                // on determine l'id du dossier
                int id = Convert.ToInt32(taDossier.getMaxId()+1);

                // on verifie si l'utilisateur a saisie le nom du dossier
                if (this.folderNameTB.Text.Length != 0)
                {
                    // on assigne les valeurs aux attributs
                    this.FolderName = this.folderNameTB.Text;
                    this.StartPeriod = this.startPeriodDTP.Text;
                    this.EndPeriod = this.EndPeriodDTP.Text;
                    this.FolderID = id;

                    // insertion
                    taDossier.InsertFolderAccount(id, this.FolderName,
                                                      this.StartPeriod,
                                                      this.EndPeriod,
                                                      false, // false car on ne clôture pas le dossier dès la création
                                                      this.UserID);
                                    

                    // on avertit l'utilisateur de l'insertion
                    Utility.MsgBox.showInformationMsg("Dossier " + this.FolderName + " a été créé !", "01.Gestion");

                    // on ferme l'UI
                    this.Close();

                }
                else
                {
                    Utility.MsgBox.showWarningMsg("Vérifiez que tous les champs sont bien remplis.", "01.Gestion");
                }
            }
            catch
            {
                Utility.MsgBox.showErrorMsg("Erreur de création du dossier !","01.Gestion");
            }

ma méthode fonctionne tres bien mais seulement pendant l'execution du programme. Je peux effectuer des requetes a partir de mon programme et ça fonctione. Or aucune donnée n'est sauvegardé dans la base de données.
Commenter la réponse de The Red Man
Messages postés
124
Date d'inscription
jeudi 5 juin 2003
Dernière intervention
10 février 2008
0
Merci
Hmmm

j'ai testé avec la methode insert() du dataAdapter et ça fonctionne chez moi.

A mon avis le problème ne vient pas du code (d'ailleurs tu n'as pas d'erreur), mais de ta liaison avec la bdd.
Créé plûtot un nouveau post sur le site en reprennant les éléments de la discussion pour avoir l'aide des autres programmeurs.
Commenter la réponse de Kleidp

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.