Dev (Back & Front)ARTIGO

VB.NET – Criando um banco de dados XML

Se você ainda usa o Visual Basic 5 ou 6 e ainda reluta em migrar
para a linguagem VB.NET, existe uma
longa lista de melhorias e facilidades de que eu poderia listar para
convencê-lo a migrar de linguagem.

O tratamento de arquivos
XML é uma delas. Se você já precisou tratar arquivos XML na
linguagem Visual Basic usando as versões anteriores ao VB.NET,
sabe que a coisa é um tanto
trabalhosa, se comparada com o arsenal de recursos que a
plataforma .NET oferece.

Para convencê-lo, vou
mostrar neste artigo como podemos criar e ordenar um banco de
dados no formato XML usando as classes DataTable, DataSet e DataRows da linguagem Visual Basic na versão do

VB.NET 2010
Express Edition e também na linguagem C# do Visual C# Express Edition.

Para começar, logo de cara,
o VB 5 ou 6 já saem perdendo, sendo que as versões que vou usar
são totalmente gratuitas e sem restrição alguma, enquanto que
uma cópia do VB5 ou VB6, se você achar para vender, vai ter que
pagar – e eu estou me referindo a cópias legais.

Nota: Se
você ainda não baixou o Visual Basic 2010 Express Edition,
clique aqui: VB 2010 Express Edition

O cenário é o
seguinte:

  • Você precisa
    armazenar as informações de código, nomes,
    endereços, cidade, cep, e-mails, telefones dos clientes
    no formato XML;
  • Você tem que
    gerar esse banco de dados de clientes no formato XML;
  • Você precisa
    cadastrar essas informações em uma aplicação
    Windows Forms;
  • Você precisa
    exibir os dados dos clientes cadastrados.

Para esse exemplo, iremos
criar um arquivo XML chamado clientes.xml na
pasta c:\dados com a seguinte estrutura:

<strong><?xml version="1.0" standalone="yes" ?><br />- <Clientes><br />      <Codigo></Codigo><br />      <Nome></Nome><br />      <Endereco></Endereco><br />      <Cidade></Cidade><br />      <Cep></Cep><br />     <Telefone></Telefone><br />     <Email></Email><br />  </Clientes></strong>

Pois bem, vamos iniciar abrindo o VB 2010 Express Edition e criando um projeto do tipo Windows Application. No menu File, selecione New Project e. a seguir. o template Windows Forms Application com o nome criaDBXML.

Com a solução criada, vamos incluir no formulário form1.vb criado por padrão os seguintes controles para criar a interface com o usuário:

  • 7 Label: (adotar o nome padrão : Label1,Label2,etc.);
  • 7 TextBox: txtCodigo, txtNome, txtEndereco, txtCidade, txtCep, txtTelefone, txtEmail;
  • 2 Button: btnSalvar, btnOrdenar;
  • 1 DataGridView – gdvClientes.

O layout do formulário deverá ser parecido com o da figura abaixo:

Nota: Você vai notar que o VB.NET possui mais controles e mais classes e também mais recursos para alinhar os controles no formulário.

Antes de iniciar qualquer código no projeto, devemos definir os namespaces que vamos usar.

Nota: podemos dizer que os Namespaces organizam os objetos em um assembly. Assim, um assembly pode conter um ou mais namespaces, e os namespaces pode conter um ou mais namespaces. Dessa forma, os Namespaces evitam a ambiguidade e organizam referências quando são usados grande grupos de objetos.

Para esse projeto, definimos os seguintes namespaces no início do formulário form1.vb:

Imports System.IO<br />Imports System.Xml

Antes de iniciarmos o código, vamos explicar alguns detalhes. Vamos utilizar a classe XmlDataDocument que permite armazenar dados e estruturas e manipulá-los através de um DataSet. Para incluir dados no arquivo XML, vamos usar as seguintes classes:

  • DataTable: representa uma tabela no formato XML em memória e gerencia dados usando uma coleção de linhas (Rows) e colunas (Columns);
  • DataSource: a propriedade DataSource é usada para visualizar os dados no controle DataGridView;
  • NewRow: para criar uma linha em branco, usamos o método NewRow da classe DataTable;
  • DataSet: a classe DataSet é usada para ler e escrever os dados gerando o arquivo XML através do métodos:
  1. WriteXml(string nomearquivo)
  2. ReadXml(string nomearquivo)

Lembrando que o dataset é uma coleção de objetos do tipo DataTable e gerencia uma coleção de tabelas.

No evento do Load do formulário, vamos definir o código que irá ler os dados do arquivo clientes.xml. Se o arquivo não existir, deveremos tratar a exceção e criar a estrutura da tabela usando um objeto DataTable. A seguir, atribuímos o datatable gerado ao DataGridView exibindo os dados no formulário.

Abaixo temos o código VB.NET e C# que faz esse serviço:

VB.NET

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br />        ds = New DataSet()<br />        Try<br />            ds.ReadXml("c:/dados/clientes.xml")<br />            dt = ds.Tables("Clientes")<br />        Catch ex As FileNotFoundException<br />            dt = New DataTable("Clientes")<br />            dt.Columns.Add("Codigo")<br />            dt.Columns.Add("Nome")<br />            dt.Columns.Add("Endereco")<br />            dt.Columns.Add("Cidade")<br />            dt.Columns.Add("Cep")<br />            dt.Columns.Add("Telefone")<br />            dt.Columns.Add("Email")<br />            ds.Tables.Add(dt)<br />        End Try<br />        gdvClientes.DataSource = dt<br />    End Sub

C#

private void Form1_Load(System.Object sender, System.EventArgs e)<br />{<br />	ds = new DataSet();<br />	try {<br />		ds.ReadXml("c:/dados/clientes.xml");<br />		dt = ds.Tables("Clientes");<br />	} catch (FileNotFoundException ex) {<br />		dt = new DataTable("Clientes");<br />		dt.Columns.Add("Codigo");<br />		dt.Columns.Add("Nome");<br />		dt.Columns.Add("Endereco");<br />		dt.Columns.Add("Cidade");<br />		dt.Columns.Add("Cep");<br />		dt.Columns.Add("Telefone");<br />		dt.Columns.Add("Email");<br />		ds.Tables.Add(dt);<br />	}<br />	gdvClientes.DataSource = dt;<br />}

Para gravar as informações no arquivo XML e exibi-las no DataGridView, vamos usar o evento Click do botão Salvar. Nesse código, criamos um novo registro em branco usando o método NewRow e atribuímos os valores informados nos controles TextBox ao datarow criado.

A seguir, incluímos a linha criada (DataRow) à coleção de linhas do objeto DataTable (dt) e escrevemos no arquivo XML usando o método WriteXml() do dataset. A rotina limpaControles() apenas limpa os controles TextBox do formulário, deixando-os livres para uma nova inclusão de dados:

VB.NET

Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click<br />        Dim dr As DataRow = dt.NewRow()<br />        dr(0) = txtCodigo.Text<br />        dr(1) = txtNome.Text<br />        dr(2) = txtEndereco.Text<br />        dr(3) = txtCidade.Text<br />        dr(4) = txtCep.Text<br />        dr(5) = txtTelefone.Text<br />        dr(6) = txtEmail.Text<br />        dt.Rows.Add(dr)<br />        ds.WriteXml("c:/dados/clientes.xml")<br />        MessageBox.Show(" Dados salvo com sucesso...")<br />        limpaControles()<br />    End Sub

C#

private void btnSalvar_Click(System.Object sender, System.EventArgs e)<br />{<br />	DataRow dr = dt.NewRow();<br />	dr[0] = txtCodigo.Text;<br />	dr[1] = txtNome.Text;<br />	dr[2] = txtEndereco.Text;<br />	dr[3] = txtCidade.Text;<br />	dr[4] = txtCep.Text;<br />	dr[5] = txtTelefone.Text;<br />	dr[6] = txtEmail.Text;<br />	dt.Rows.Add(dr);<br />	ds.WriteXml("c:/dados/clientes.xml");<br />	MessageBox.Show(" Dados salvo com sucesso...");<br />	limpaControles();<br />}

A ordenação das informações é feita no código colocado no evento Click do botão Ordenar. Nesse código, usamos a classe XmlDataDocument() para permitir a ordenação dos dados.

Lemos o arquivo clientes.xml e criamos um DataView para exibir as informações ordenadas por nome no modo Ascendente:

VB.NET

Private Sub btnOrdenar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOrdenar.Click<br />        Dim xmlDatadoc As New XmlDataDocument()<br />        xmlDatadoc.DataSet.ReadXml("c:/dados/clientes.xml")<br />        ds = xmlDatadoc.DataSet<br />        Dim dt As DataView = ds.Tables(0).DefaultView<br />        dt.Sort = "nome ASC"<br />        gdvClientes.DataSource = dt<br />    End Sub

C#

private void btnOrdenar_Click(System.Object sender, System.EventArgs e)<br />{<br />     XmlDataDocument xmlDatadoc = new XmlDataDocument();<br />      xmlDatadoc.DataSet.ReadXml("c:/dados/clientes.xml");<br />     ds = xmlDatadoc.DataSet;<br />     DataView dt = ds.Tables(0).DefaultView;<br />     dt.Sort = "nome ASC";<br />     gdvClientes.DataSource = dt;<br />}

Apenas para constar, segue abaixo o código da rotina limpaControles() que percorre os controles TextBox limpando-os:

VB.NET

Private Sub limpaControles()<br />        Dim ctrl As Control<br />        Dim txt As TextBox<br />        For Each ctrl In Me.Controls<br />            If (ctrl.GetType() Is GetType(TextBox)) Then<br />                txt = CType(ctrl, TextBox)<br />                txt.Text = ""<br />            End If<br />        Next<br />    End Sub

C#

private void limpaControles()<br />{<br />	Control ctrl = default(Control);<br />	TextBox txt = default(TextBox);<br />	foreach ( ctrl in this.Controls)<br />                {<br />	      if ((object.ReferenceEquals(ctrl.GetType(), typeof(TextBox)))) <br />                      {<br />		txt = (TextBox)ctrl;<br />		txt.Text = "";<br />	      }<br />	}<br />}

Executando o projeto e gravando as informações, iremos obter o seguinte resultado:

O arquivo clientes.xml gerado e gravado na pasta c:\dados deverá ter o seguinte conteúdo:

Se você tentar fazer a mesma tarefa usando VB5 ou VB6, também vai conseguir, mas vai gastar mais tempo. Por isso considere migrar suas aplicações para a linguagem VB.NET. Além de ter mais recursos à sua disposição, você vai ter mais tempo livre para viver a vida.

Pegue o projeto completo aqui: CriaDBXML.zip

Eu sei, é apenas XML, mas eu gosto…

é referência em Visual Basic no Brasil e autor dos livros "Aprenda Rápido: ASP" e "ASP, ADO e Banco de Dados na Internet". Mantenedor do site macoratti.net.

Ver perfil