O Excel não é um Banco de Dados, mas mesmo assim podemos conectar nele e fazer SELECT, UPDATE, INSERT.. usando o OLEDB.
Neste artigo vou mostrar como fazer INSERT e UPDATE no Excel usando ASP.NET / C#.
Tanto em versões 2007 e 2010 do Office quanto as mais antigas como 2003 e XP.
Exemplo.xlsx
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Caminho do arquivo xlsx
string sFileXLSX = Server.MapPath("~\\exemplo.xlsx");
//Caminho do arquivo xls
string sFileXLS = Server.MapPath("~\\exemplo.xls");
//Conexão com o XLSX para versões 2007 e 2010
string strConnXLSX = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + sFileXLSX + "';Extended Properties=Excel 12.0;";
//Conexão com o XLS para versões 2003, XP..
string strConnXLS = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + sFileXLS + "';Extended Properties=Excel 8.0;";
#region Insert
//Criando a OleDbConnection
using (OleDbConnection conn = new OleDbConnection(strConnXLS))
{
//SQL para fazer o INSERT
//Neste caso usei Parameters para evitar SQL Injection, mas poderia ser assim:
//INSERT INTO [Folha1$] (Nome, email) VALUES ('CodeBreak', '[email protected]')
string strSQL = "INSERT INTO [Folha1$] (Nome, email) VALUES (@nome, @email)";
//Criando o OleDbCommand com o SQL e a conexão
OleDbCommand cmd = new OleDbCommand(strSQL, conn);
//Declarando o parametro @nome que receberá o valor 'CodeBreak'
cmd.Parameters.AddWithValue("@nome", "CodeBreak");
//Declarando o parametro @email que receberá o valor '[email protected]'
cmd.Parameters.AddWithValue("@email", "[email protected]");
//Abrindo a conexão
conn.Open();
//Executando o INSERT
cmd.ExecuteNonQuery();
//Fechando a conexão
conn.Close();
}
#endregion
#region Update
//Criando a OleDbConnection
using (OleDbConnection conn = new OleDbConnection(strConnXLS))
{
//SQL para fazer o UPDATE
//Neste caso usei Parameters para evitar SQL Injection, mas poderia ser assim:
//UPDATE [Folha1$] SET Nome = 'Code Break', email = '[email protected]' WHERE Nome = 'CodeBreak'
string strSQL = "UPDATE [Folha1$] SET Nome = @nome, email = @email WHERE Nome = 'CodeBreak'";
//Criando o OleDbCommand com o SQL e a conexão
OleDbCommand cmd = new OleDbCommand(strSQL, conn);
//Declarando o parametro @nome que receberá o valor 'Code Break'
cmd.Parameters.AddWithValue("@nome", "Code Break");
//Declarando o parametro @email que receberá o valor '[email protected]'
cmd.Parameters.AddWithValue("@email", "[email protected]");
//Abrindo a conexão
conn.Open();
//Executando o UPDATE
cmd.ExecuteNonQuery();
//Fechando a conexão
conn.Close();
}
#endregion
}
}
Download do exemplo
Caso ocorra este erro:
Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine
Baixe e instale o Microsoft Access Database Engine 2010 Redistributable
http://www.microsoft.com/downloads/en/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en