eu uso assim:
private void btnImport_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
System.Data.DataTable dataTable = new System.Data.DataTable();
openFileDialog.Filter = "Arquivo CSV|*.csv|Arquivo TXT|*.txt";
openFileDialog.FilterIndex = 1;
openFileDialog.Title = "Importar CSV";
DialogResult result = openFileDialog.ShowDialog();
string filePath = openFileDialog.FileName;
if (openFileDialog.FileName != "")
{
if (dgvDataGrid.RowCount > 0)
{
//dataGridView1.DataSource = null;
dataTable.Clear();
}
var linhas = File.ReadLines(filePath);
var headers = linhas.First().Split(';');
foreach (var linha in headers) // preenche o cabeçalho (se for preciso ignorar o mesmo é necessário apenas comenta-lo
{
dataTable.Columns.Add(linha);
}
var records = linhas.Skip(0); // preenche o grid a partir da 1 linha igando o cabeçalho
foreach (var record in records)
{
dataTable.Rows.Add(record.Split(';'));
}
dgvDataGrid.DataSource = dataTable;
}
}
catch (Exception ex)
{
MessageBox.Show(string.Format("Erro ao buscar o arquivo! /nDescrição do Erro: {0}", ex));
}
}
private IEnumerable<string> ReadAsLines(string Filename)
{
MessageBox.Show(string.Format("Falha: Verifique se o arquivo está fechado! \nDescrição do Erro:{0} "));
using (StreamReader reader = new StreamReader(Filename, Encoding.Default))
while (!reader.EndOfStream)
yield return reader.ReadLine();
MessageBox.Show(string.Format("Erro ao importar o arquivo! \nDescrição do Erro: {0}"));
}
Salvo o excel como CSV, aí clico o btnImport, abre o dialogo, seleciono o arquivo e ele joga tudo no grid.
Aí é só montar o update dos dados que quiser e gravar no banco....