C# - Importando dados de um arquivo DBF para um DataGridView
Ora, ora e aqui estamos novamente voltando a falar sobre acesso a arquivos DBF.
Nota: Arquivos DBF -
Wikipedia (http://pt.wikipedia.org/wiki/Dbase) Um dos maiores legados do dBase é seu formato de arquivo .dbf, que foi amplamente adotado. O famoso padrão Xbase. O termo XBase é frequentemente utilizado para esse grupo de aplicações. O sistema de banco de dados dBase foi um dos primeiros a prover uma seção de cabeçalho (header) para descrever a estrutura dos dados dentro do arquivo. Isso significa que o programa não mais necessitava conhecimento avançado da estrutura de dados, mas poderia perguntar diretamente ao arquivo de dados como este estava estruturado. |
Mas afinal existe alguém na face da terra que ainda usa arquivos DBF ?
Existe e não são poucos.
A resposta pode ser surpreendente e os motivos também mas vamos deixar essa discussão de lado e passar para a parte prática.
Nota: Uma vez visitei um cliente que possui todos os dados do seu negócio em arquivos .dbf (algo em torno de 150.000 registros. Isso é que eu chama de viver perigosamente...)
Um belo dia , em pleno século XXI, por um capricho da profissão, você precisa tratar com arquivos DBF.
E agora , por onde começar ???
Bem , você poderia usar o DBase, FoxPro , um utilitário de terceiros, etc., etc.
Para acessar arquivos DBF usando Visual Basic 6 ou ASP veja os meus artigos : |
Mas você precisa fazer isso usando C# e ponto final.
Acessando arquivos DBF com C#
Abra o Visual C# 2010 Express Edition e crie um novo projeto Windows Forms Application com o nome acessandoDBF;
No formulário form1.cs inclua um controle DataGridView, um controle Label, um controle TextBox e um controle Button conforme o leiaute abaixo:
No menu Project->Add Reference e na janela Add Reference seleciona a aba COM e escolha as libraries:
Finalmente inclua o seguinte código no formulário:
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.Odbc;
using System.IO;
namespace ImportarDBF
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string SelectedTable = string.Empty;
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog fdlg = new OpenFileDialog();
fdlg.Title = "Selecione o arquivo";
fdlg.InitialDirectory = @"c:\";
fdlg.FileName = txtNomeArquivo.Text;
fdlg.Filter = "DBF Files(*.dbf)|*.dbf|All Files(*.*)|*.*";
fdlg.FilterIndex = 1;
fdlg.RestoreDirectory = true;
if (fdlg.ShowDialog() == DialogResult.OK)
{
txtNomeArquivo.Text = fdlg.FileName;
Importar();
Application.DoEvents();
}
}
private void Importar()
{
if (txtNomeArquivo.Text.Trim() != string.Empty)
{
try
{
DataTable dt = GetDataTableDBF(txtNomeArquivo.Text);
gdvDados.DataSource = dt.DefaultView;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
public static DataTable GetDataTableDBF(string strFileName)
{
OdbcConnection conn = new OdbcConnection("Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + _
Path.GetFullPath(strFileName).Replace(Path.GetFileName(strFileName), "") + ";Exclusive=No");
conn.Open();
string strConsulta = "SELECT * FROM [" + Path.GetFileName(strFileName) + "]";
OdbcDataAdapter adapter = new OdbcDataAdapter(strConsulta, conn);
System.Data.DataSet ds = new System.Data.DataSet();
adapter.Fill(ds);
return ds.Tables[0];
}
}
}
|
Agora é só alegria, basta selecionar o arquivo FoxPro padrão Dbase e importar para o DataGridView.
Pegue o projeto completo aqui : Importar_DBF.zip
João 7:37
Ora, no seu último dia, o grande dia da festa, Jesus pôs-se em pé e clamou,
dizendo: Se alguém tem sede, venha a mim e beba.
João 7:38 Quem crê em mim, como diz a Escritura, do seu
interior correrão rios de água viva.
João 7:39
Ora, isto ele disse a respeito do Espírito que haviam de receber os que nele
cressem; pois o Espírito ainda não fora dado, porque Jesus ainda não tinha
sido glorificado.
Referências: