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

Windows Forms Discussion :

Dataset DataAdapter et DataTable


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut Dataset DataAdapter et DataTable
    Bonjour,

    J'ai créer un Dataset nommé m_ConsultSearchData
    J'ai un DataAdapter : m_daDataAdapter qui fait 2 requêtes.

    Et je fais un TableMappings.Add pour renommer mes DatatTables.
    RefEtCodeClt et NomClt

    Je me suis servi de ce tuto : ICI

    Le problème c'est que plus tard quand je veux aller chercher des choses dans mes datatables, il ne les reconnait pas

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
            SqlConnection m_cnADONetConnection = new SqlConnection();
            SqlDataAdapter m_daDataAdapter;
            SqlCommandBuilder m_cbCommandBuilder;
            DataTable RefEtCodeClt = new DataTable();
            DataTable NomClt = new DataTable();
            int m_rowPosition = 0;
    
    
            public F_ConsultSearch()
            {
                InitializeComponent();
            }
    
            private void F_ConsultSearch_Load(object sender, EventArgs e)
            {
               
    
                m_cnADONetConnection.ConnectionString =
                @"Server=***;Database=***;User ID=***;Password=***;Trusted_Connection=False";
                m_cnADONetConnection.Open();
                m_daDataAdapter = new SqlDataAdapter("SELECT AKKNDI,AKARTK, AKARTN  FROM ARKF;" + "SELECT KNKNM FROM KNDF;", m_cnADONetConnection);
                SqlCommandBuilder m_cbCommandBuilder = new SqlCommandBuilder(m_daDataAdapter);
                DataSetConsultSearch m_ConsultSearchData = new DataSetConsultSearch();
                m_daDataAdapter.Fill(m_ConsultSearchData);
                m_daDataAdapter.TableMappings.Add("Table", "RefEtCodeClt");
                m_daDataAdapter.TableMappings.Add("Table1", "NomClt"); 
    
            }
    
    (...)
    //--------------------------------------------------------
    //L'erreur est dans la ligne d'après et la suivante
    //---------------------------------------------------------
    
    for (int i = 0; i < m_daDataAdapter.RefEtCodeClt.Rows.Count; i++)
                    {
                        if (m_daDataAdapter.RefEtCodeClt[i].AKARTN.ToString() == Txt_RefInt.Text)
                        {
                            MessageBox.Show("Dans la boucle if");
                            NbreDeClients ++;
                            i++;
                        }
                    }
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Vérifie que les tables créent par défaut portent bien les noms Table et Table1.

    Ton code devrait normalement fonctionner...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Ouai ta raison.
    Lorsque je met le nom Table il ne le connait pas non plus.
    Je ne sais pas comment connaitre le nom de mes DataTable.

  4. #4
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Je crois que j'ai zappé un truc... Le DataAdapter te sert à remplir le DataSet, tes tables sont accessibles depuis le DataSet, et non depuis le DataAdapter.
    (ça m'apprendra à survoler le code )
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Je ne sais pas pourquoi j'ai fais ça. lol Merci pour ta réponse.

    Mais il doit y avoir une autre erreur, car il ne reconnais pas mes noms de datatable. Même si je les appelle Table c'est pareil. Il y a donc un souci avec les noms des Datatable.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    
    public partial class F_ConsultSearch : Form
        {
            SqlConnection m_cnADONetConnection = new SqlConnection();
            SqlDataAdapter m_daDataAdapter;
            DataSetConsultSearch m_ConsultSearchData = new DataSetConsultSearch();
            SqlCommandBuilder m_cbCommandBuilder;
    
            public F_ConsultSearch()
            {
                InitializeComponent();
            }
    
            private void F_ConsultSearch_Load(object sender, EventArgs e)
            {
    
    
                m_cnADONetConnection.ConnectionString =
                @"Server=***;Database=***;User ID=***;Password=***;Trusted_Connection=False";
                m_cnADONetConnection.Open();
                m_daDataAdapter = new SqlDataAdapter("SELECT AKKNDI,AKARTK, AKARTN  FROM ARKF;" + "SELECT KNKNDI, KNKNMN FROM KNDF;" + "SELECT ITNBR, ITDSC FROM ITEMASA;" , m_cnADONetConnection);
                SqlCommandBuilder m_cbCommandBuilder = new SqlCommandBuilder(m_daDataAdapter);
                m_daDataAdapter.Fill(m_ConsultSearchData);
                m_daDataAdapter.TableMappings.Add("Table", "RefEtCodeClt");
                m_daDataAdapter.TableMappings.Add("Table1", "NomClt");
                m_daDataAdapter.TableMappings.Add("Table2", "RefEtNomPiece");
    
                //Init Les Liste
                Lst_Ref.Items.Clear();
                Lst_Clt.Items.Clear();
                Lst_Frs.Items.Clear();
    
            }
    
    
    
            private void Txt_RefInt_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Return)
                {
                    //Maj des Listes
                    bool RetFillClient; bool RetFillFrs;
                    string StrClientEnCOurs; string StrFrsEnCours;
                    int NbreDePieces; NbreDePieces = 0;
    
                    //--> Vide les liste
                    Lst_Ref.Items.Clear();
                    Lst_Clt.Items.Clear();
                    Lst_Frs.Items.Clear();
    
                    //On regarde si la pièce existe, si oui on prend son nom et on le met dans la liste des ref
                    for (int i = 0; i < m_ConsultSearchData.RefEtNomPiece.Rows.Count; i++)
                    {
                        if (m_ConsultSearchData.RefEtNomPiece[i].ITNBR.ToString() == Txt_RefInt.Text)
                        {
                            NbreDePieces++;
                            ListViewItem objListItem;
                            objListItem = new ListViewItem(Txt_RefInt.Text);
                            objListItem.ImageIndex = 0;
                            objListItem.SubItems.Add(m_ConsultSearchData.RefEtNomPiece[i].ITDSC.ToString());
                            Lst_Ref.Items.Add(objListItem);
                        }
                    }
    (...)
    Laedit, tu remarquera que j'ajoute tes réponses pour une autre de mes questions!

  6. #6
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Ton DataSet est typé, donc il devrait déjà connaître les tables lors de sa conception. Quand tu regarde ton fichier dataset, quels sont les noms des tables ?

    Une autre façon de le savoir est de regarder les tables présentes dans la propriétés Tables de ton DataSet, tu peux faire un foreach et regarder les noms des tables.

    Si tu n'y as toujours pas accès directement, tu pourras toujours passer par cette propriété via un index ou un nom.

    Alors pour les ListViewItem ça a fini par marcher ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  7. #7
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Donc c'était tout simple. J'ai pris le nom de mes bases. Mais le mapping de marche pas. Pas grave je garde les noms d'origine.

  8. #8
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    A cause de temps de chargement trop long je reviens sur ce topic.
    J'ai plusieurs DataAdapter et plusieurs DataTable mais plus de DataSet.
    Je rempli mais DataTables mais je n'arrive pas à les lire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    SqlDataAdapter m_daDataAdapter2;
    DataTable TblNomClt = new DataTable();
    
    m_daDataAdapter2 = new SqlDataAdapter("SELECT KNKNDI, KNKNDK, KNKNMN FROM KNDF WHERE KNKNDK = '" + CodeCltEnCours + "' ORDER BY KNKNDK;", m_cnADONetConnection);
    m_daDataAdapter2.Fill(TblNomClt);
    
    if (TblNomClt.Rows.Count > 0)
                {
                    for (int j = 0; j < ARKF_ACTIF.Rows.Count; j++)
                    {
                        if (ARKF_ACTIF[j].AKKNDI.ToString() == TblNomClt.Rows(i).Item("KNKNDI").ToString())
                        {
    Par la même occasion, je ne sais pas si j'ai la bonne syntaxe dans ma requete sql en ce qui concerne la variable CodeCltEnCours.

    Merci d'avance

  9. #9
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Rows est une collection, et non une méthode. il faut donc accéder à un item grâce à un index placé entre crochet et non entre parenthèse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (ARKF_ACTIF[j].AKKNDI.ToString() == TblNomClt.Rows[i].Item("KNKNDI").ToString())
    Pour la variable, pas la peine de faire plus, c'est une string et tu ne fais pas d'insertion, donc une requête paramétrée n'aiderait pas plus.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  10. #10
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Merci pour ta réponse toujours aussi rapide!

    Et bien lorsque je met des crochets, il ne reconnait plus Item.

  11. #11
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    C'est malheureusement l'effet de ma rapidité, je me suis concentré sur les Rows en oubliant la suite

    Pourtant Item est bien une propriété d'une DataRow. Et Rows contient bien des DataRow vu qu'il est lui même une propriété de ta DataTable...
    Et je ne l'ai pas moi non plus lorsque je fais des tests.

    Mais heureusement, tu peux passer par la propriété ItemArray de la DataRow, qui est un tableau contenant les valeurs des différentes cellules de la lignes.
    Le problème étant qu'il faut passer un index entre crochet, tu ne peux pas utiliser le nom de colonne.

    [EDIT]
    Toutes mes excuses, je suis un peu fatigué aujourd'hui.
    Item est en fait l'indexeur de la DataRow.
    Pour l'utiliser, il faut donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataRow row;
    row["columnName"]
    Ou dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (ARKF_ACTIF[j].AKKNDI.ToString() == TblNomClt.Rows[i]["KNKNDI"].ToString())
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  12. #12
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Ok super!

    Même fatigué t'es plus fort que moi. lol

    Merci beaucoup.

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

Discussions similaires

  1. DataAdapter et DataTable
    Par cyril dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/02/2009, 09h47
  2. DataSet -> Regrouper des DataTable
    Par mrwps dans le forum ASP.NET
    Réponses: 6
    Dernier message: 30/05/2008, 14h06
  3. [DataSet] Pourquoi la DataTable est en lecture seule?
    Par SirKus dans le forum Accès aux données
    Réponses: 2
    Dernier message: 16/07/2007, 10h49
  4. [VB.Net] Lier un DataSet à un DataTable
    Par dyree dans le forum ASP.NET
    Réponses: 13
    Dernier message: 26/06/2006, 10h37
  5. Réponses: 8
    Dernier message: 01/12/2005, 11h40

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