Je suis débutante en c# et j'utilise Visual Studio 2010, et j'ai une application winform où je charge mes données à partir d'un fichier excel dans un datagridview (Etape que j'ai réussi à faire). Maintenant, je veux enregistrer ces données dans une table de ma base de données sql server (que j'ai créer sur Visual Studio déjà). Le problème que j'ai pas su comment faire cette deuxième étape. Est-ce que vous pouvez m'aider SVP? Je serai très reconnaissante.
Ici, je vous mets le code avec lequel j'ai remplis mon datagridview:
Code de chargement des données :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
namespace projetBE
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void openFileButton_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
string filePath = openFileDialog1.FileName;
string extension = Path.GetExtension(filePath);
string Excel03ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
string Excel07ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
string header = rbHeaderYes.Checked ? "YES" : "NO";
string conStr;
conStr = string.Empty;
switch (extension)
{
case ".xls": //Excel 97-03
conStr = string.Format(Excel03ConString, filePath, header);
break;
case ".xlsx": //Excel 07
conStr = string.Format(Excel07ConString, filePath, header);
break;
}
//Get all worksheet names from the Excel file selected using GetSchema of an OleDbConnection
OleDbConnection connection = new OleDbConnection(conStr);
connection.Open();
DataTable tables = connection.GetSchema("Tables", new String[] { null, null, null, "TABLE" });
connection.Dispose();
//Add each table name to the combo box
if (tables != null && tables.Rows.Count > 0)
{
worksheetsComboBox.Items.Clear();
foreach (DataRow row in tables.Rows)
{
worksheetsComboBox.Items.Add(row["TABLE_NAME"].ToString());
}
}
}
private void worksheetsComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
//Display the data from the selected Worksheet
string filePath = openFileDialog1.FileName;
string extension = Path.GetExtension(filePath);
string Excel03ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
string Excel07ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
string header = rbHeaderYes.Checked ? "YES" : "NO";
string conStr;
conStr = string.Empty;
switch (extension)
{
case ".xls": //Excel 97-03
conStr = string.Format(Excel03ConString, filePath, header);
break;
case ".xlsx": //Excel 07
conStr = string.Format(Excel07ConString, filePath, header);
break;
}
OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("SELECT * FROM [{0}]", worksheetsComboBox.SelectedItem.ToString()), conStr);
DataTable currentSheet = new DataTable();
adapter.Fill(currentSheet);
adapter.Dispose();
excelDataGridView.DataSource = currentSheet;
}
}
}
---------
J'explique un peu le code:
A chaque fois je charge mon fichier excel ce code me permet de récupérer les noms de mes feuilles excel et de parcourir ces différentes feuilles via un Combo Box et avec un click sur le nom de la feuille j'obtient mes données sur le datafridview.
Bonjour Whismeril,
J'ai fais un petit tour dans les sources et j'ai trouvé que c un peu loion de ce que je cherche mais je veux essayer de le faire moi même. Tous ce que je cherche c'est un petit aide pour me guider sur le bon chemin. Sur ceci, je vous prendre votre avis: Est-ce que je dois faire des requetes INSERT à partir de mon datagridview,dans ma base de données? ou via un builder et un update? car pour le builder je trouve un problème à l'attacher à mon dataadapter qui m'a exécuter le fill dans le premier code?
J'explique plus:
SqlCommandBuilder cb = new SqlCommandBuilder(adapter);
l'adapter ici est un OleDbadapter! et je trouve pas la bonne manière pour mieux écrire ce bout de code.
Sinon pour l'insertion honnetement j'ai pas encore essayer mais j'ai regardé quelques exemples avec l'insert et je sais pas si avec la simple insertion je peux résoudre mon problème?
Donc voilà je cherche une idée avec laquelle je peux commencer. Merci d'avance.