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 :

La clé d'un DataTable ne s'incremente pas [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 35
    Points : 22
    Points
    22
    Par défaut La clé d'un DataTable ne s'incremente pas
    Bonjour à tous,

    Je me lance dans la programmation en C# pour développer un addin Excel dont je pense qu'il aura une grande utilité dans mon entreprise. J'ai un peu programmé pendant longtemps en VBA, et j'ai décidé de sauter le pas. Je commence à petit pas.

    Je suis confronté à un problème que je n'arrive pas à cerner et dont je ne trouve pas la solution.

    J'ai créé un DataSet et une DataTable avec l'outil de développement Visual Studio (Version 15.9.7). J'ai configuré un DataColumn comme clé primaire avec dans le menu Propriété AutoIncrement = True.

    J'ai un code (ci-dessous), qui prend des données d'un fichier Excel, les renvoit dans une form, puis dans le fichier Excel.

    Mon problème est que l'AutoIncrement ne fonctionne pas. Quand je rentre des données, la colonne clé reste vide. J'ai essayé les solutions que j'ai pu trouver sur internet, mais sans succès.

    Auriez-vous des idées pour m'aider à résoudre ce problème ?

    Code du bouton de la form (il y a seulement un textbox, un datagrid et un bouton à ce stade) :

    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
    private void button1_Click(object sender, EventArgs e)
            {
     
     
                // Déclaration du chemin du fichier source
                string strDataSource = "C:\\Users\\raa\\Desktop\\CapitalStructureAddIn\\CSAddin_ClasseurDB_Test.xlsx";
     
                // Déclaration du chemin de connexion
                string ConnectionString = string.Format("Provider = Microsoft.ACE.OLEDB.12.0; Data Source ={0}; Extended Properties =\"Excel 12.0;HDR=YES;\"", strDataSource);
     
                // Déclaration d'une connexion au fichier source sur la base du chemin de connexion
                // L'objet OleDbConnection représente une connexion unique à une source de donnée
                OleDbConnection xlCon = new OleDbConnection(ConnectionString);
     
                // Ouverture de la connexion
                xlCon.Open();
     
                // Création d'un DataAdapter pour prendre les données de l'onglet défini
                // Le signe '$' après le nom du sheet indique que celui-ci existe déjà
                OleDbDataAdapter xlData = new OleDbDataAdapter("Select * From [CSx_StructureGroups$]", xlCon);
     
                // Déclaration et identification de la table à remplir dans le DataSet
                DataTable tblTarget = new DataTable("tbl_StructureGroups");
     
                // Remplir la table avec les données du OleDataAdapter
                xlData.Fill(tblTarget);
     
                DataRow drCurrent = drCurrent = tblTarget.NewRow();
                drCurrent["StructureGroup_ID"] = null;
                drCurrent["StructureGroup_Name"] = textBox1.Text; 
                drCurrent["Start_Date"] = 222222;
                drCurrent["Start_Amount"] = 33;
                drCurrent["Start_Structure"] = 3567;
                tblTarget.Rows.Add(drCurrent);
     
                dataGridView1.DataSource = tblTarget;
     
                //Insert Command
                xlData.InsertCommand = new OleDbCommand("INSERT INTO [CSx_StructureGroups$] (StructureGroup_ID, StructureGroup_Name, Start_Date, Start_Amount, Start_Structure) VALUES (? , ?, ?, ?, ?)", xlCon);
                xlData.InsertCommand.Parameters.Add("@StructureGroup_ID", OleDbType.Integer).SourceColumn = "StructureGroup_ID";
                xlData.InsertCommand.Parameters.Add("@StructureGroup_Name", OleDbType.Double).SourceColumn = "StructureGroup_Name";
                xlData.InsertCommand.Parameters.Add("@Start_Date", OleDbType.Double).SourceColumn = "Start_Date";
                xlData.InsertCommand.Parameters.Add("@Start_Amount", OleDbType.Double).SourceColumn = "Start_Amount";
                xlData.InsertCommand.Parameters.Add("@Start_Structure", OleDbType.Double).SourceColumn = "Start_Structure";
     
                xlData.Update(tblTarget);
     
                xlCon.Close();
     
            }
    Configuration des propriétés du DataColumn défini comme clé :

    Nom : Capture.PNG
Affichages : 119
Taille : 20,1 Ko

    Merci pour votre aide.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    J'ai trouvé la solution à mon problème.

    En fait, quand j'instanciait la DataTable, j'en créais une nouvelle, plutôt que d'instancier celle déjà existante.

    J'ai donc remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable tblTarget = new DataTable("tbl_StructureGroups");
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Properties.DataSet1.CSx_StructureGroupsDataTable tblTarget = new Properties.DataSet1.CSx_StructureGroupsDataTable();
    J'ai cru au début que le string dans DataTable() permettait de faire référence à une table existante, mais non, cela créé une table dénommée ainsi.

    Le code marche maintenant.

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

Discussions similaires

  1. datatable rendered ne fonctionne pas
    Par ang.net dans le forum JSF
    Réponses: 1
    Dernier message: 07/07/2008, 20h10
  2. post incrementation, pas clair
    Par _vince_ dans le forum C++
    Réponses: 16
    Dernier message: 28/11/2007, 18h27
  3. [VB.Net 2.0] Pourquoi ma DataTable ne se modifie pas malgré l'Update ?
    Par sandra69 dans le forum Accès aux données
    Réponses: 8
    Dernier message: 21/08/2007, 22h41
  4. Mon index ne s'incremente pas!
    Par mun_a dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/07/2007, 14h40
  5. [XSLT][Compteur]qui ne s'incremente pas
    Par fraoustin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/01/2005, 18h11

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