Compartilhar via


Gerando arquivo *.dbf a partir de um Dataset (pt-Br)

Agora 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

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.

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

http://thiagocfc.files.wordpress.com/2010/12/geradbf01.jpg
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:

http://thiagocfc.files.wordpress.com/2010/12/geradbf02.jpg
Figura 02 – Abrindo a janela de referências .

http://thiagocfc.files.wordpress.com/2010/12/geradbf03.jpg
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:

http://thiagocfc.files.wordpress.com/2010/12/geradbf04.jpg
Figura 04 – Adicionando componentes da toolbox ao projeto GeraDBF.

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:
*

01.public DataSet datasetexample()
02.{
03.//Instanciando os objetos Dataset e Datatable para receber os valores do formulário
04.DataSet ds = new DataSet();
05.DataTable dt = new DataTable();
06. 
07.//Setando o nome da tabela
08.dt.TableName = "Arquivo";
09.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.

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:
*

01.public DataSet criarDBF(DataSet ds)
02.{
03. //Seta as configurações de conexão OLEDB e o caminho do arquivo dbf, e abre a conexão
04.   OleDbConnection oConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\GeraDBF;Extended Properties=dBase III");
05. oConn.Open();
06. 
07. //dDfine o comando de criação
08.   OleDbCommand cmd = new OleDbCommand(" CREATE TABLE Arquivo (Id INTEGER, Name VARCHAR(16), Sexo VARCHAR(16))");
09. 
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.
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. Pronto, agora é só rodar o projeto e testar.
Segue abaixo link para download da solução para Visual Studio 2010.
Download da solução: http://bit.ly/gOeZj5