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

C# Discussion :

Mise à jour datatable [Débutant]


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut Mise à jour datatable
    bonjour,

    j'ai un petit souci qui me prend la tête

    j'ai deux base de données
    l'une MS Access, l'autre sql server
    j'essaye de passer des données vers MS Access comme suis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.AdapterSQL.Fill(ds_CST.tableSQL, this.OfferId,this.VersionID);
    ds_CommonDb.tableAccess.Merge(ds_CST.tableSQl);
    alors, je n'ai pas d'erreur à l'execution
    mais dans la base MS Access... ya rien de rien qui s'y inscrit

    Je me doute devoir lancer une mise a jour ... mais comment?

    mercii

  2. #2
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    re bonjour,
    pour info
    j'essaie de faire une update de la source access avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableAdapterAccess.Update(TableAccess)
    mais bon rien de rien

    je dois pas avoir comprire!

  3. #3
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Est-ce que les command Insert/Delete/Update du DataAdapter Access ont bien été initialisées ?

    Regarde par exemple : TableAdapterAccess.InsertCommand.Text

  4. #4
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,
    merci de te pencher sur mon problème

    et bien oui, les commandes insert, update et delete y sont bien.
    c'est bien ça que je ne comprend pas.

  5. #5
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Aurais-tu par hasard un fait TableAccess.AcceptChanges() ou TableAdapterAccess.Update(TableAccess) TableAdapterAccess.Clear() avant le Update(TableAccess) ?

    Un message d'erreur ?

  6. #6
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    non, rien de tout cela

    mon code se résume pour cette partie à 3 ligne
    telle que présentée plus haut

    pas d'erreur non plus... juste.. rien

  7. #7
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Bonjour,

    Alors, ce problemes n'étant pas toujours résolu, cela deviens quelque peu... frustrant et urgent helas..
    pas une bonne ame pour me donner une idée??

    Je résume donc :

    j'ai deux dataset
    un pointant sur une base sql serveur, l'autre sur une base MS ACCESS.
    j'ai une datable dans le dataset access auquel j'ajoute une série d'enregistrements.
    ( pour préciser, le table adapter associé ne fait pas un "fill" de la table).
    lorsque que je veux enfin mettre a jour la base de données, je n'ai pas d'erreur, mais pas d'update effectué.
    voici comment se présente le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                this.ta_TPM.Fill(ds_CST.tf_VolumeTPM, this.OfferId, this.VersionID);
                // INSERT
                foreach (DataRow r in ds_CST.tf_VolumeTPM.Rows)
                {
                    ds_AccessDb.tbVolume.ImportRow(r);
                }
                ta_Volume.Update(ds_AccessDb.tbVolume);
                ds_AccessDb.tbVolume.AcceptChanges();
    alors, tout fonctionnne sans erreur.
    tout a le comportement que j'attends... jusqu'a l'update..

    moi pas comprendre
    ai je ommis quelque chose?
    dois-je operer un fill avant pour que cela fonctionne?
    (je vais essayer tout de suite tiens

    merci à tous

  8. #8
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 106
    Points
    3 106
    Par défaut
    Bonjour,

    as-tu essayé de voir la requête exécutée à l'aide d'un profiler "branché" sur ta BD ?

  9. #9
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    euh... non... je fait comment pour faire ça???

    merci en tout les cas.

  10. #10
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 106
    Points
    3 106
    Par défaut
    Regarde du côté de cette discussion, tu y trouveras peut-être ton bonheur sans même passer par le profiler.

  11. #11
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    je viens de jeter un oeil.

    c'est bien mais mon probleme est avec l'update de la base access,
    par la base sql server...



    ps: mais intéressant néanmoins

  12. #12
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 106
    Points
    3 106
    Par défaut
    Aïe, je n'avais pas vu ce... détail. Désolé.

  13. #13
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    je comprends , la confusion était facile

    j'ai un peu corrigé l'énoncé précédant pour rendre cela un peu plus clair

    je viens de refaire un test ( non concluant ).
    comment puis je voir qu'il effectue bien... ou pas les opérations d'insertion renseignées dans le designer lorsque je lance l'update

    ou

    comment vérifier qu'il à bien initialiser les commandes dans mon table adapter

    ??

  14. #14
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    a noter que

    si je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ds_AccesDb.tbVolume.ImportRow(r);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ta_Volume.Insert((int)r.ItemArray[0], (int)r.ItemArray[1], (DateTime)r.ItemArray[2], (double)r.ItemArray[3]);(
    et en supprimant la procedure update

    cela fonctionnne

    ça prends un temps dingue, mais ça fonctionne.
    c'est pour cela que j'aimerais une procedure plus rapide comme la procédure update devrait l'etre j'imagine.

  15. #15
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Bonjour,
    Alors, pour contourner le probleme, j'ai fait comme ceci :
    Code : 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
                OleDbCommand accCommand = new OleDbCommand();
                accCommand.Connection = ta_Volume.Connection;
                ta_Volume.Connection.Open();
                this.ta_TPM.Fill(ds_CST.tf_VolumeTPM, this.OfferId, this.VersionID);
                foreach (DataRow r in ds_CST.tf_VolumeTPM.Rows)
                {
                    string strSQL =
                        "INSERT INTO tbVolume " +
                        "VALUES(" +
                            r.ItemArray[0].ToString() + "," +
                            r.ItemArray[1].ToString() + "," +
                            r.ItemArray[1].ToString() + "," +
                            r.ItemArray[3].ToString() + ")";
                    accCommand.CommandText = strSQL;
                    accCommand.ExecuteNonQuery();
                }
    Alors, ça fonctionne et les temps de réponse sont acceptables.

    Simplement, j'aimerais quand même bien savoir pourquoi la méthode Update ne fonctionne pas.
    Quel pourrais-en être les raisons????

    merci merciii

  16. #16
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Simplement, j'aimerais quand même bien savoir pourquoi la méthode Update ne fonctionne pas.
    Quel pourrais-en être les raisons????
    Commenrt as-tu initialisé le DataAdapter Access ?
    Via un CommandBuilder ou à la main ?
    Peux-tu indiquer le contenu deTableAdapterAccess.InsertCommand.Text ?

  17. #17
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,
    Citation Envoyé par graffito
    Comment as-tu initialisé le DataAdapter Access ?
    Via un CommandBuilder ou à la main ?
    à partir de l'IDE de visual studio
    Citation Envoyé par graffito
    Peux-tu indiquer le contenu deTableAdapterAccess.InsertCommand.Text ?
    voila le code généré
    Code VS2008 : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            private void InitAdapter() {
                this._adapter = new global::System.Data.OleDb.OleDbDataAdapter();
                global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
                tableMapping.SourceTable = "Table";
                tableMapping.DataSetTable = "tbVolume";
                tableMapping.ColumnMappings.Add("VersionID", "VersionID");
                tableMapping.ColumnMappings.Add("I_Minutes_Start_REF", "I_Minutes_Start_REF");
                tableMapping.ColumnMappings.Add("ClickDate", "ClickDate");
                tableMapping.ColumnMappings.Add("Volume", "Volume");
                this._adapter.TableMappings.Add(tableMapping);
                this._adapter.InsertCommand = new global::System.Data.OleDb.OleDbCommand();
                this._adapter.InsertCommand.Connection = this.Connection;
                this._adapter.InsertCommand.CommandText = "INSERT INTO `tbVolume` (`VersionID`, `I_Minutes_Start_REF`, `ClickDate`, `Volume`" +
                    ") VALUES (?, ?, ?, ?)";
                this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
                this._adapter.InsertCommand.Parameters.Add(new global::System.Data.OleDb.OleDbParameter("VersionID", global::System.Data.OleDb.OleDbType.Integer, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "VersionID", global::System.Data.DataRowVersion.Current, false, null));
                this._adapter.InsertCommand.Parameters.Add(new global::System.Data.OleDb.OleDbParameter("I_Minutes_Start_REF", global::System.Data.OleDb.OleDbType.Integer, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "I_Minutes_Start_REF", global::System.Data.DataRowVersion.Current, false, null));
                this._adapter.InsertCommand.Parameters.Add(new global::System.Data.OleDb.OleDbParameter("ClickDate", global::System.Data.OleDb.OleDbType.Date, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "ClickDate", global::System.Data.DataRowVersion.Current, false, null));
                this._adapter.InsertCommand.Parameters.Add(new global::System.Data.OleDb.OleDbParameter("Volume", global::System.Data.OleDb.OleDbType.Double, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "Volume", global::System.Data.DataRowVersion.Current, false, null));
                this._adapter.UpdateCommand = new global::System.Data.OleDb.OleDbCommand();
                this._adapter.UpdateCommand.Connection = this.Connection;
                this._adapter.UpdateCommand.CommandText = "UPDATE tbVolume SET VersionID = ?, I_Minutes_Start_REF = ?, Clic" +
                    "kDate = ?, Volume = ?";
                this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
                this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.OleDb.OleDbParameter("VersionID", global::System.Data.OleDb.OleDbType.Integer, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "VersionID", global::System.Data.DataRowVersion.Current, false, null));
                this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.OleDb.OleDbParameter("I_Minutes_Start_REF", global::System.Data.OleDb.OleDbType.Integer, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "I_Minutes_Start_REF", global::System.Data.DataRowVersion.Current, false, null));
                this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.OleDb.OleDbParameter("ClickDate", global::System.Data.OleDb.OleDbType.Date, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "ClickDate", global::System.Data.DataRowVersion.Current, false, null));
                this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.OleDb.OleDbParameter("Volume", global::System.Data.OleDb.OleDbType.Double, 0, global::System.Data.ParameterDirection.Input, ((byte)(15)), ((byte)(0)), "Volume", global::System.Data.DataRowVersion.Current, false, null));
            }

    voili voualou

  18. #18
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Alors que MyTable.Rows.Add(MyTable.NewRow()) affecte au DataRowState la valeur "Added" enajoutant une ligne à la table, l'appel à ImportRow() préserve le DataRowState existant (ainsi que les autres valeurs de la ligne importée).

    Comme après l'ImportRow(), le DataRowState reste celui résultant de la lecture de la table sql server (i.e. "Unchanged"), l'Update() ne gènère aucune mise à jour.

  19. #19
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Bonjour bonjour

    et hors donc si j'écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                this.ta_TPM.Fill(ds_CST.tf_VolumeTPM, this.OfferId, this.VersionID);
                // INSERT
                foreach (DataRow r in ds_CST.tf_VolumeTPM.Rows)
                {
                    ds_AccessDb.tbVolume.Rows.Add(r.ItemArray);
                }
                ta_Volume.Update(ds_AccessDb.tbVolume);
                ds_AccessDb.tbVolume.AcceptChanges();
    ça fonctionne parfaitement.

    Alors bravo et grand merci

    Probleme résolu et compris

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/09/2013, 14h30
  2. Réponses: 7
    Dernier message: 05/04/2012, 12h45
  3. Réponses: 5
    Dernier message: 18/10/2010, 14h55
  4. DataTable mise à jour
    Par topolino dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/12/2008, 19h08
  5. Problème pour Comparer 2 Datatables et mise à jour
    Par Jean-Marc68 dans le forum C#
    Réponses: 4
    Dernier message: 21/11/2007, 19h28

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