1 pièce(s) jointe(s)
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:
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é :
Pièce jointe 457023
Merci pour votre aide.