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:


Agora vamos incluir duas referências no projeto.

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:


José Carlos Macoratti