Desenvolvimento - C#

Gerando arquivo .dbf a partir de um Dataset

Recentemente no trabalho me deparei com a tarefa de extrair os dados de um Dataset e gerar um arquivo *.dbf. Pesquisei bastante uma forma de executar esta tarefa, mas nenhuma foi satisfatória, então baseado em todo material que...

por Thiago Cavalcante



Resumo

Recentemente no trabalho me deparei com a tarefa de extrair os dados de um Dataset e gerar um arquivo *.dbf. Pesquisei bastante uma forma de executar esta tarefa, mas nenhuma foi satisfatória, então baseado em todo material que encontrei consegui executar a tarefa e resolvi postar sobre o assunto, como senti bastante dificuldades de encontrar material que sanasse todas as dúvidas e fosse mais objetivo, resolvi abordar esse assunto. Para ajudar na compreensão do assunto criei um aplicação WPF que recebe alguns dados de textboxes, monta o Dataset, cria o arquivo *.dbf e insere os valores do Dataset.>

Este artigo aplica-se aos seguintes produtos e tecnologias:

<Visual Studio 2005/2008/2010>

<C# .Net>

<Microsoft Visual FoxPro>

<WPF>

<Dataset >

Introdução

Recentemente no trabalho me deparei com a tarefa de extrair os dados de um Dataset e gerar um arquivo *.dbf. Pesquisei bastante uma forma de executar esta tarefa, mas nenhuma foi satisfatória, então baseado em todo material que encontrei consegui executar a tarefa e resolvi postar sobre o assunto, como senti bastante dificuldades de encontrar material que sanasse todas as dúvidas e fosse mais objetivo, resolvi abordar esse assunto. Para ajudar na compreensão do assunto criei um aplicação WPF que recebe alguns dados de textboxes, monta o Dataset, cria o arquivo *.dbf e insere os valores do Dataset.

De onde vem essa extensão *.dbf ?

 Tem sua origem no dBASE o primeiro SGBD largamente utilizado industrialmente, pelo Apple II, Apple Macintosh e PC’s IBM para DOS, onde se tornou um dos softwares mais vendidos durante alguns anos. A partir de meados dos anos oitenta, muitas outras companhias produziram seus próprios "dialetos" ou variações do produto e da linguagem. Entre esses, estão: FoxPro (atual Microsoft Visual FoxPro), Arago, Force, Recital, dbFast, dbXL, QuickSilver, Clipper, xBase++, FlagShip e Harbour.
O formato de arquivo do dBase, o DBF, é muito usado por diversos aplicativos que precisam somente de um formato para armazenar seus dados estruturadamente.
Fonte: http://pt.wikipedia.org/wiki/DBase.

Criando e Preparando o Projeto WPF

Primeiro abriremos o Visual Studio 2010, criar novo projeto e colocar o nome do projeto, conforme a figura 01:

Figura 01
Figura 01 – Criando projeto WPF no Visual Studio 2010.

Após criar o projeto temos que adicionar uma referência ao projeto, clique com o botão direito na pasta References e depois em Add Reference, depois vá na aba COM e selecione “Microsoft ADO Ext. 2.8 for DDL and Security”, e clique em OK conforme figuras 02 e 03:

figura
Figura 02 – Abrindo a janela de referências .


Figura 03 – Selecionando a referência “Microsoft ADO Ext. 2.8 for DDL and Security”, na aba COM .

Agora vamos adicionar alguns componentes ao projeto, no modo design adicione três Labels, duas Textboxes, um Combobox, e um Botão, conforme figura 04:


Figura 04 – Adicionando componentes da toolbox ao projeto GeraDBF.

Codificando o método para criação do Dataset

 Após esse passos vamos a parte mais divertida, a codificação. Clique em qualquer área do formulário e aperte F7, para ir ao codebehind. Agora criaremos o método que cria o Dataset, e faz as devidas validações para a chamada do método que cria o arquivo *.dbf, conforme a Listagem 01:

  1: public DataSet datasetexample()

   2: {

   3:     //Instanciando os objetos Dataset e Datatable para receber os valores do formulário

   4:     DataSet ds = new DataSet();

   5:     DataTable dt = new DataTable();

   6: 

   7:     //Setando o nome da tabela

   8:     dt.TableName = "Arquivo";

   9:     DataColumn col;

  10: 

  11:     //Criando as colunas

  12:     col = new DataColumn();

  13:     col.DataType = Type.GetType("System.Int32");

  14:     col.ColumnName = "Id";

  15: 

  16:     dt.Columns.Add(col);

  17: 

  18:     col = new DataColumn();

  19:     col.DataType = Type.GetType("System.String");

  20: 

  21:     col.ColumnName = "Name";

  22:     dt.Columns.Add(col);

  23: 

  24:     col = new DataColumn();

  25:     col.DataType = Type.GetType("System.String");

  26: 

  27:     col.ColumnName = "Sexo";

  28:     dt.Columns.Add(col);

  29: 

  30:     //Criando e atribuindo os valores as linhas

  31:     DataRow row;

  32:     row = dt.NewRow();

  33: 

  34:     row["Id"] = int.Parse(txtId.Text);

  35:     row["Name"] = txtName.Text;

  36:     row["Sexo"] = cbbSexo.SelectedValue.ToString().Substring(37,9);

  37:     row = dt.NewRow();

  38: 

  39:     dt.Rows.Add(row);

  40: 

  41:     //Adicionando a tabela ao Dataset

  42:     ds.Tables.Add("Arquivo");

  43: 

  44:     /* Efetuando checagem para criação do diretório

  45:     onde será salvo o arquivo *.dbf */

  46:     if (!(Directory.Exists("c:\\GeraDBF")))

  47:     {

  48:         Directory.CreateDirectory("c:\\GeraDBF");

  49:     }

  50: 

  51:     /* Checando a existência do arquivo *.dbf

  52:      e exibindo validação para substituição do arquivo. */

  53:     if (File.Exists("c:\\GeraDBF\\Arquivo.dbf"))

  54:     {

  55:             MessageBoxResult result = MessageBox.Show("Você deseja realmente apagar o arquivo?", "GeraDBF",

  56:                          MessageBoxButton.YesNo,

  57:                          MessageBoxImage.Question);

  58: 

  59:         if (result.Equals(MessageBoxResult.Yes))

  60:         {

  61:             //Deleta o arquivo se a opção for sim

  62:             File.Delete("c:\\GeraDBF\\Arquivo.dbf");

  63: 

  64:             //Chama o método que cria o arquivo *.dbf e o preencha com o Dataset

  65:             criarDBF(ds);

  66:         }

  67: 

  68: 

  69:     }

  70:     else

  71:     {

  72:         //Chama o método que cria o arquivo *.dbf e o preencha com o Dataset

  73:         criarDBF(ds);

  74:     }

  75: 

  76:     return ds;

  77: }

Listagem 01 – Criando o método do tipo Dataset para validar e preencher o Dataset

Codificando o método para criação do arquivo *.dbf e preencher com o Dataset

Criado o método datasetexample(), agora iremos criar o método criarDBF(), que gera o arquivo *.dbf e o preenche com o Dataset, conforme Listagem 02:

   1: public DataSet criarDBF(DataSet ds)

   2:        {

   3:            //Seta as configurações de conexão OLEDB e o caminho do arquivo dbf, e abre a conexão

   4:            OleDbConnection oConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\GeraDBF;Extended Properties=dBase III");

   5:            oConn.Open();

   6: 

   7:            //dDfine o comando de criação

   8:            OleDbCommand cmd = new OleDbCommand(" CREATE TABLE Arquivo (Id INTEGER, Name VARCHAR(16), Sexo VARCHAR(16))");

   9: 

  10:            cmd.Connection = oConn;

  11: 

  12:            //Execute o comando de criação para criar a tabela vazia

  13:            cmd.ExecuteNonQuery();

  14: 

  15:            //Adapter para pegar a base de dados vazia

  16:            OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Arquivo", oConn);

  17: 

  18:            //Atualiza a base de dados vazia com o Dataset, e fecha a conexão

  19:            da.Update(ds, "Arquivo");

  20: 

  21:            oConn.Close();

  22: 

  23:            return ds;

  24:        }

Listagem 02 – Criando o método do tipo Dataset para criar o arquivo *.dbf  e preencher arquivo *.dbf com o Dataset.

Criando chamada do método para gerar arquivo *.dbf no botão

Agora volte ao modo design e dê dois cliques no botão, e chame o método datasetexample(), no evento on_click  do botão, conforme Listagem 03:

   1: private void btnGerarDbf_Click(object sender, RoutedEventArgs e)

   2:        {

   3:            datasetexample();

   4:        }

Listagem 03 – Chamando o método datasetexample(), no evento on_click do  botão

Conclusão

Pronto, agora é só rodar o projeto e testar. Qualquer dúvida é só entrar em contato.

Segue abaixo link para download da solução para Visual Studio 2010, criada nesse post.

Download da solução: http://bit.ly/gOeZj5

Thiago Cavalcante

Thiago Cavalcante - Profissional certificado Microsoft, atuando na área de TI desde 2000, inicialmente trabalhando com infra-estrutura de redes e atualmente trabalhando com Desenvolvimento .Net C#. Membro fundador do Grupo de Profissionais ITPro Brasil, graduando em Sistemas de Informação pela FANOR, na qual é facilitador da Célula Acadêmica Kangaceiros .Net, estudante da plataforma .Net. Blog: http://www.thiagocavalcante.net/ twitter: @thiagocfc