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 : 138
Taille : 20,1 Ko

Merci pour votre aide.