por Cesar Cassiano Schimanco

Manipular dados do Excel em C# / ASP.NET com INSERT e UPDATE

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

Comentários

Carregando comentários

Postar um novo comentário



Processando...