IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ADO.NET Discussion :

Impossible d'updater une BDD Access à partir d'ADO.NET


Sujet :

ADO.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut Impossible d'updater une BDD Access à partir d'ADO.NET
    Bonjour,

    Je fais un petit projet pour lequel j'utilise une BDD Access. J'ai importé ma base dans mon projet VS2010 et j'ai généré le dataSet correspond avec l'assistant, qui génère toutes les méthodes nécessaires.

    J'ai une dataGridView pour laquel je lui passe une table via l'assistant toujours.

    Maintenant je souhaite updater ma dataGridView ainsi que ma BDD. Pour cela, je fais le code suivant quand l'utilisateur appuye sur le bouton d'ajout:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    myDataSet.projectsRow newProject = myDataSet.projects.NewprojectsRow();
                newProject.c = "test";
                newProject.name = Name.Text;
                newProject.folder = ProjectFolder.Text;
     
                this.myDataSet.projects.AddprojectsRow(newProject);
                this.projectsTableAdapter.Adapter.Update(this.myDataSet.projects);

    Mon dataGridView ce mets bien à jours pas de problème, par contre ma BDD non. J'ai vérifié dans le myDataSetDesigner.cs pour voir si les méthodes d'update on été ajoutées, et ça me semble être bien le cas donc je ne comprend vraiment pas ce que j'ai oublié

    Des idées ?

    Merci bien : )

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    J'ai continué à chercher mais toujours rien :/ Est-ce que le fait de générer sont dataset avec tout les adapteurs qui vont bien, nécessite quand-même d'avoir un builder qui va générer les méthodes update pour la MAJ de la BDD lorsque nécessaires ?

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    J'ai également essayé plusieurs choses comme instancier mon dataset, créer un adapteur, ajouter une ligne en faisant monDataSet.projects.AddNewProject(myProjectRow), et j'obtiens une erreur qui me dit que la ligne appartient déjà à une autre table :/

    J'ai regardé déjà différent post, je ne suis pas le seul à avoir ce genre de problème :/

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Bon je crois avoir trouvé comment faire mais je ne suis absolument pas certains que c'est propre.

    J'ai reconstruit tout mes objets nécessaire (la connection, l'adapteur, le commandBuilder), j'ai ajouté une ligne et ensuite j'ai appelé la commande update.
    Ce qui me dérange c'est que j'ai l'impression que le dataSet que j'ai (généré au moment de l'importation de ma base Access), contient déjà tout cela et qu'il serait plus simple de les utiliser si cela marchait :/

    Voici le code qui fonctionne:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
                    OleDbConnection sqlDatabaseConnectionString = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbb.accdb;Persist Security Info=True");
                    OleDbDataAdapter adapter = new OleDbDataAdapter();
                    adapter.SelectCommand = new OleDbCommand("Select * from projects", sqlDatabaseConnectionString);
                    OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
                    sqlDatabaseConnectionString.Open();
     
     
                    myDataSet.projectsRow newProject = this.myDataSet.projects.NewprojectsRow();
                    newProject.pro_consultant_fk = cbxConsultantForNewProject.SelectedValue.ToString();
                    newProject.pro_name = txtBxNewProjectName.Text;
     
                    this.myDataSet.projects.AddprojectsRow(newProject);
     
                    builder.GetUpdateCommand();
     
                    adapter.Update(this.myDataSet, "projects");
     
                    dtGdViewProjects.Refresh();

    Est-ce que quelqu'un saurait m'expliquer pourquoi est-ce qu'on a quand même besoin de faire ces manips? Ou alors comment faire pour utiliser ce qui est généré?

    Merci bien : )

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Sur le premier code, il faut vérifier que, après l'ajout de rows au dataSet, le RowState est à Added (et non à Unchanged).

    Attention à la fonction ImportRow qui conserve le RowState de la Row importée.

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    J'ai rajouté la condition suivante pour voir si ça marche avec mon premier morceau de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                    myDataSet.projects.AddprojectsRow(newProject);
                    if (myDataSet.projects.Rows[myDataSet.projects.Rows.Count-1].RowState != DataRowState.Added)
                    {
                        myDataSet.projects.Rows[myDataSet.projects.Rows.Count - 1].SetAdded();
                    }
                    this.projectsTableAdapter.Adapter.Update(this.myDataSet.projects);
    Mais idem, ça ne marche pas, il ne remplit même jamais la condition :/

    Bon j'ai trouvé comment résoudre ce problème, mais je pense que ce n'est pas la façon la plus élégante de faire ça non?

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/07/2013, 22h22
  2. Réponses: 4
    Dernier message: 09/07/2008, 14h05
  3. Updater une BDD à partir d'une DataGridView
    Par casavba dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/12/2007, 23h27
  4. Ouverture d'une base Access à partir d'une autre base access
    Par Julien Dufour dans le forum Access
    Réponses: 3
    Dernier message: 19/10/2005, 17h13
  5. [VB.NET] Gestion en temps réel d'une bdd access
    Par qwiskas dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/02/2005, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo