No artigo
deste mês irei abordar um assunto muito comum no nosso suporte técnico, o uso
de arquivos do Microsoft Excel junto com Windows Forms. Demonstrarei como
devemos realizar a integração da biblioteca “System.Data.OleDb”, presente na plataforma .NET e responsável pela
implementação de rotinas de inserção e atualização de dados em arquivos do tipo
“xls” ou “xlsx”, tendo como base a linguagem C#.
Importante:
Para este exemplo terei como base o uso do Microsoft Excel 2013
Conhecendo o Namespace “System.data.OleDb”
Este
“Namespace” representa uma coleção de classes usadas para acessar uma fonte de
dados do tipo OLE DB, ou seja, a mesma possui métodos específicos que irão nos
auxiliar e facilitar o uso de nossa fonte de dados específica (arquivos “xls”
ou “xlsx”).
Iremos
descrever as principais classes e métodos presentes neste Namespace, sendo:
Classe OleDbConnection: Representa uma conexão com uma fonte
de dados. O método “Open()” é reponsável por abrir uma conexão de banco de
dados com as configurações de propriedades especificadas pela string de
conexão. Já o “Close()” finaliza a conexão com a fonte de dados.
Classe OleDbCommand: Representa uma instrução SQL ou
procedimento armazenado a executar em uma fonte de dados. Possuímos o método “Parameters.AddWithValue()”,
o qual receberá os parâmetros indicados em uma instrução SQL.
Exemplo: Parameters.AddWithValue(“@descricao”, “the
club”)
Sendo:“@descricao”
significa o nome e “the club” o valor do parâmetro.
Para
executar a instrução SQL e retornar um número de linhas afetadas podemos
utilizar o método “ExecuteNonquery()”.
Criando o Exemplo
Antes de
partirmos para a implementação do nosso exemplo, será necessário criar um
pequeno arquivo “XLSX” contendo: Id, Nome, Contato e Documento. Ver Figura 01.
![]() |
Figura 01: Estrutura do Arquivo XLSX. |
Com o Microsoft
Visual Studio iniciado crie uma solução do tipo “Windows Forms” contendo um
formulário com os mesmos tipos de campos descritos anteriormente. Aproveite
também para adicionar um botão para Inserir dados e outro para atualizá-los.
Através da Figura 02 podemos ter uma noção de como deverá ficar esta tela.
![]() |
Figura 02: Formulário de Exemplo. |
Codificando o Exemplo
Usaremos os
seguintes Namespaces:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO;
Para
organizarmos nosso código achei de extrema importância criar alguns métodos
específicos, sendo: o “LimparDados()” como o próprio nome já diz, será
responsável por limpar os dados contidos em todos os “TextBoxes” (Listagem 01)
após a inserção ou atualização e o “ConexaoXlsx()”, contendo a String de conexão
junto com o caminho do arquivo “xlsx”. (Listagem 02)
private void LimparDados()
{
txtId.Clear();
txtNome.Clear();
txtDocumento.Clear();
txtContato.Clear();
}
Listagem 01.
Para
obtermos o caminho do “.exe” automaticamente usaremos o método
“Path.GetDirectoryName” passando “Application.ExecutanlePath” como parâmetro.
Após esta etapa concatenaremos com o nome do arquivo do tipo “xlsx”
(exemplo.xlsx). A String de conexão é específica para arquivos desde a versão
2010 do Microsoft Excel, ou seja, será obrigatório incluir o “Provider”, o
“Data Source” e o “Extended Properties”, conforme indicado no código abaixo.
private string ConexaoXlsx()
{
string
Caminho = Path.GetDirectoryName(Application.ExecutablePath);
string ArquivoXlsx = Caminho + "\\exemplo.xlsx";
return "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source='" +
ArquivoXlsx + "';Extended
Properties=Excel 12.0;";
}
Listagem 02.
Listagem 02.
No evento “Click” do botão inserir instanciaremos a classe “OleDbConnection” passando no construtor o procedimento “ConexaoXlsx”. Criaremos uma variável do tipo texto para nossa instrução de “INSERT”.
Usaremos o nome contido na aba do Excel (Exemplo: [Folha1$] ), seguido de “$”. Para a criação dos comandos instanciaremos a classe “OleDbCommand” usando as variáveis “Sql” e “Conexao”. Logo em seguida adicionaremos os parâmetros (id, nome, contato, documento) através do método “Parameters.AddWithValue”, abriremos a conexão através do método “Open()” e por final com o auxílio de um bloco “try/catch” executamos o “Insert”. Ver Listagem 03.
private void btnInserir_Click(object sender, EventArgs e)
{
using (OleDbConnection Conexao = new OleDbConnection(ConexaoXlsx()))
{
string Sql
= "INSERT
INTO [Folha1$] (id, nome, contato, documento) VALUES (@id, @nome, @contato,
@documento)";
OleDbCommand Comandos = new OleDbCommand(Sql, Conexao);
Comandos.Parameters.AddWithValue("@id", txtId.Text);
Comandos.Parameters.AddWithValue("@nome",
txtNome.Text);
Comandos.Parameters.AddWithValue("@contato", txtContato.Text);
Comandos.Parameters.AddWithValue("@documento", txtDocumento.Text);
Conexao.Open();
try
{
Comandos.ExecuteNonQuery();
MessageBox.Show("Dados
Inseridos com Sucesso!");
LimparDados();
}
catch
{
MessageBox.Show("Ocorreu
um erro ao Inserir os Dados!");
}
Conexao.Close();
}
}
Listagem 03.
O botão “Atualizar Dados” irá executar uma instrução de “UPDATE” no arquivo “xlsx”. Teremos o código idêntico ao que foi explicado anteriormente. Ver Listagem 04.
private void btnAtualizar_Click(object sender, EventArgs e)
{
using (OleDbConnection Conexao = new OleDbConnection(ConexaoXlsx()))
{
string
strSQL = "UPDATE
[Folha1$] SET nome = @nome, contato = @contato, documento = @documento WHERE id
= '"+txtId.Text+"'";
OleDbCommand Comandos = new OleDbCommand(strSQL,
Conexao);
Comandos.Parameters.AddWithValue("@nome",
txtNome.Text);
Comandos.Parameters.AddWithValue("@contato", txtContato.Text);
Comandos.Parameters.AddWithValue("@documento", txtDocumento.Text);
Conexao.Open();
try
{
Comandos.ExecuteNonQuery();
MessageBox.Show("Dados
Atualizados com Sucesso!");
LimparDados();
}
catch
{
MessageBox.Show("Ocorreu
um erro ao Atualizar os Dados!");
}
Conexao.Close();
}
}
Listagem 04.
Ao compilar e executar a aplicação teremos um
resultado parecido com o da Figura 03.
![]() |
Figura 03: Exemplo de Inserção. |
O mesmo
resultado poderá ser conferido utilizando o botão “Atualizar Dados”.
Ao realizar
algumas inserções ou atualizações, teremos uma planilha alimentada com alguns
registros. Ver Imagem 04.
![]() |
Figura 04: Exemplo. |
Conclusões
Procurei
neste artigo explorar algumas funcionalidades da biblioteca “System.Data.OleDb” presente na plataforma .NET. Uma
das características destra biblioteca seria a integração com planilhas do
Microsoft Excel, o qual foi abordado minuciosamente neste mês com um exemplo
prático.
Desejo a
todos uma ótima leitura, um abraço e até o mês que vem!
Referências
https://msdn.microsoft.com/pt-br/library/system.data.oledb.oledbconnection(v=vs.110).aspx
Nenhum comentário:
Postar um comentário