.NET - Acessando arquivos DBF com C# e VB .NET


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)

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# ou VB .NET e ponto final.

Bem , se o problema era esse , ele esta resolvido...

Vou mostrar como acessar um arquivo DBF (padrão XBase) usando C# e VB .NET.

1- Acessando arquivos DBF com C#

Podemos usar o Visual C# Express Edition ou o SharpDevelop fica a seu critério pois o código usado é o mesmo.

Eu vou usar o SharpDevelop 2.2 para acessar o arquivo padrão DBF chamado arqDBF.bdf que esta na pasta c:\dados;

O arquivo Dbase arqDBF foi criado usando o utilitário VisData do Visual Basic 6 e tem a seguinte estrutura:

Abra o SharpDevelop e no menu Arquivo selecione : Novo -> Solução;

A seguir selecione C# -> Aplicações Windows e em Modelos selecione Aplicações Windows informando o nome do projeto como LeDBF;

No formulário padrão inclua um componente DataGridView e um botão de comando (name=btnLeDBF) conforme a figura abaixo:

Declare os seguintes namespaces no formulário:

Using System.Data.Odbc;
using System.Data;

Inclua o código abaixo no evento Click do botão de comando :

    void BtnLeDBFClick(object sender, EventArgs e)
     {
	OdbcConnection oConn = new OdbcConnection(); 
            oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=c:\dados\;Exclusive=No;  _
                                                         Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;"; 
            oConn.Open(); 
            OdbcCommand oCmd = oConn.CreateCommand(); 
            oCmd.CommandText = @"SELECT * FROM c:\dados\arqDBF.dbf" ; 
            DataTable dt = new DataTable(); 
            dt.Load(oCmd.ExecuteReader()); 
            oConn.Close(); 

            dataGridView1.DataSource = dt; 	
          }

Acesso a um arquivo DBF usando o provedor ODBC.

Execute o projeto teremos os dados exibidos no datagridview:

Eu acessei o arquivo DBF usando o provedor ODBC mas poderiamos ter usando o provedor OleDb, neste caso o código da ficaria da seguinte forma:

Após definir os namespaces :

using System.Data.OleDb;
using System.Data;


no formulário, defina o código no botão conforme abaixo:

	void BtnDBFOleDbClick(object sender, EventArgs e)
	{
	OleDbConnection oConn = new OleDbConnection();
            oConn.ConnectionString =   @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dados;Extended Properties=dBASE IV;";

            oConn.Open(); 
            OleDbCommand oCmd = oConn.CreateCommand(); 
            oCmd.CommandText = @"SELECT * FROM c:\dados\arqDBF.dbf" ; 
            DataTable dt = new DataTable(); 
            dt.Load(oCmd.ExecuteReader()); 
            oConn.Close(); 
            dataGridView1.DataSource = dt; 
	}				
Acesso a arquivo DBF usando o provedor OleDb

2- Acessando arquivos DBF com VB .NET

Para acessar o mesmo arquivo usando o VB .NET eu vou usar o Visual Basic 2008 Express Edition;

Abra o VB 2008 Express e crie um novo projeto do tipo Windows Application com o nome trataDBF:

No formulário padrão inclua um componente DataGridView e um Button conforme a figura abaixo:

Declare os seguintes namespaces no formulário:

Imports System.Data.Odbc
Imports System.Data

No evento Click do botão inclua o código abaixo:

 Private Sub btnDBF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDBF.Click

        Dim oConn As New OdbcConnection()
        oConn.ConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=c:\dados\;Exclusive=No; _ 
                                                Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;"
        oConn.Open()
        Dim oCmd As OdbcCommand = oConn.CreateCommand()
        oCmd.CommandText = "SELECT * FROM c:\dados\arqDBF.dbf"
        Dim dt As New DataTable()
        dt.Load(oCmd.ExecuteReader())
        oConn.Close()

        DataGridView1.DataSource = dt

    End Sub

Executando o projeto iremos obter como resultado os dados exibidos no DataGridView;

Podemos obter o mesmo resultado usando provedor OleDb , neste caso usamos o provedor OleDb:

Imports System.Data.OleDb
Imports System.Data

Substitua o código do evento Click do botão de comando pelo código abaixo:

	Dim oConn As New OleDbConnection()
	oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dados;Extended Properties=dBASE IV;"

	oConn.Open()
	Dim oCmd As OleDbCommand = oConn.CreateCommand()
	oCmd.CommandText = "SELECT * FROM c:\dados\arqDBF.dbf"
	Dim dt As New DataTable()
	dt.Load(oCmd.ExecuteReader())
	oConn.Close()
	dataGridView1.DataSource = dt

Pegue os projeto completos aqui:

  1.   leDBF.zip
  2.   trataDBF.zip

Aguarde mais artigos sobre C# e VB .NET.

Eu sei é apenas .NET mas eu gosto...


José Carlos Macoratti