ADO.NET - Uma visão geral IV  :  O objeto  DataSet

 

Vamos falar agora sobre DataSet. Se você já se aventurou a criar algum programa para banco de dados usando o Visual Basic já ouviu pelo menos falar no objeto Recordset . Afinal era ele que permitia o acesso , exibição e a manipulação dos dados .

 

O objeto DataSet veio para substituir com vantagens o objeto recordset e guarda poucas similaridades com o objeto recordset. Enquanto o objeto recordset representa uma coleção de tabelas de dados O objeto DataSet representa uma cópia do banco de dados em memória.

 

A classe DataSet é membro do namespace System.Data e representa o primeiro dos dois maiores componentes da arquitetura ADO.NET  o outro membro seriam os provedores Data .NET. Podemos resumir os atributos como segue:

O objeto DataSet fornece as principais funcionalidades para criar aplicações para banco de dados desconectados , embora suporte também o modelo conectado através de leitores de dados (DataReader).

 

A classe DataSet é derivada da classe System.ComponentModel.MarshalByValueComponent da qual ela recebe a habilidade de ser serializada , incluída na caixa de ferramentas do VS.NET e visualmente desenhada em um descritor. Os principais métodos  e eventos da classe DataSet são :

 

Membro Descrição
Propriedades
CaseSensitive obtêm ou define se a comparação entre strings será sensível a caixa alta/caixa baixa
DataSetName Define ou obtêm o nome do DataSet
DefaultViewManager Obtém uma visão padrão dos dados permitindo busca , ordenação e filtragem
EnforceConstraints Especifica se uma regra de relação definida será seguida apos a ocorrência de uma atualização
ExtendedProperties Uma coleção de informação customizadas que reside no DataSet
HasErrors Indica se há erros em qualquer linha de qualquer tabela
Namespace Obtêm ou define um namespace XML para o DataSet
Prefix Define ou obtêm um conjunto de prefixos XNL para o namespace
Coleções
Relations Uma coleção de relações hospedadas em um objeto DataRelationCollection que liga tabelas através de chaves estrangeira
Tables Uma coleção de tabelas que armazena os dados atuais
Métodos
AcceptChanges Grava todas as alterações para o DataSet
Clear Remove todas as linhas de todas as tabelas
Clone Faz uma cópia da estrutura mas não os dados de um DataSet
Copy Faz uma cópia a estrutura e os dados de um DataSet
GetChanges Retorna uma cópia do DataSet com apenas as colunas alteradas ou aquelas que coincidem com o filtro definido em DataRowState
GetXml Retorna uma representação exm XML dos dados
GetXmlSchema Retorna uma representação XML da estrutura de um DataSet
HasChanges Retorna um valor indicando que existe mudanças pendentes
InferXmlSchema Infere a estrutura de um DataSet baseada em um arquivo ou fluxo
Merge Mescla o DataSet com o provedor
ReadXml Carrega um esquema XML e dados para um DataSet
ReadXmlSchema Carrega um esquem XML para um DataSet
  Descarta as alterações feitas em um DataSet
Reset Reverte o DataSet ao seu estado original
WriteXML Escreve os dados e o esquema XML para um arquivo ou fluxo de dados
WriteXmlSchema Escreve o esquema XML para um arquivo ou fluxo
Eventos
MergeFailed Evento disparado quando uma mesclagem falha devido a uma violação de regras de validação.

 

Preenchendo um DataSet

 

Podemos preencher um DataSet basicamente de duas formas :  O modo desconectado e o modo conectado.

 

1- Modo desconectado - usando um DataAdapter através de seu método Fill : O método Fill invoca o objeto Command referenciado na propriedade SelectCommand do data adapter ;  a seguir os dados são carregados no DataSet via mapeamento através da propriedade TableMappings do data adapter. Além disto devido a natureza desconectada do objeto DataSet podemos carregar um DataSet via código através de sua coleção Table.

 

Podemos também implementar a integridade entre os dados de um DataSet usando os objetos UniqueConstraint e ForeignKeyConstraint além de criar relacionamentos entre as tabelas do DataSet.

 

Vou mostrar exemplo onde iremos criar vários objetos em tempo de execução usando um DataSet e um DataGrid acessando as tabelas Fornecedores e Produtos no banco de dados Northwind.mdb. O relacionamento entre as tabelas Fornecedores e Produtos é  mostrada abaixo:

 

 

Vamos preencher o DataSet com os dados da tabela fornecedores e produtos a seguir criar um relacionamento entre as colunas CódigoDoFornecedor e exibir os fornecedores e seus respectivos produtos em um DataGrid de forma a exibir os detalhes dos produtos para cada fornecedor. Então vamos ao código...

 

1- A primeira coisa a fazer é importar o namespace System.Data.OleDb pois vamos realizar uma conexão com um banco de dados Access ( Northwind.mdb)

Imports System.Data.OleDb

2- A seguir vamos declarar as variáveis objeto que vamos usar no projeto :  ds para o objeto DataSet e dg para o objeto DataGrid

 

Private ds As DataSet

Private dg As DataGrid

 

3- Vamos usar o evento Load do formulário form1.vb para iniciar os objetos  DataGrid e fazer a conexão com a base de dados. Para isto vamos criar uma sub-rotina que será disparada assim que o evento ocorrer:

 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

   iniciarObjetos()

End Sub

 

4- A seguir temos o código da sub-rotina iniciarObjetos :

 

Public Sub iniciarObjetos()

  dg = New DataGrid()

  dg.Dock = DockStyle.Fill

  dg.CaptionText = "Fornecedores/Produtos"

 

  Me.Text = "Usando um DataSet com DataGrid"

   Me.Controls.Add(dg)

  conectar()

  dg.SetDataBinding(ds, "Fornecedores")

End Sub

 

5- Abaixo temos o código da sub-rotina conectar :

 

Private Sub conectar()

Try

     Dim strconexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Northwind.mdb"

        Dim conn As New OleDbConnection(strconexao)

        Dim dafornecedores As OleDbDataAdapter = New OleDbDataAdapter()

     dafornecedores.TableMappings.Add("Table", "Fornecedores")

     conn.Open()

     Dim cmfornecedores As New OleDbCommand("Select * from fornecedores", conn)

     cmfornecedores.CommandType = CommandType.Text

    

     dafornecedores.SelectCommand = cmfornecedores

     ds = New DataSet("Fornecedores")

     dafornecedores.Fill(ds)

     Dim daprodutos As OleDbDataAdapter = New OleDbDataAdapter()

     daprodutos.TableMappings.Add("Table", "Produtos")

        Dim cmdprodutos As OleDbCommand = New OleDbCommand("Select * from Produtos", conn)

     daprodutos.SelectCommand = cmdprodutos

     daprodutos.Fill(ds)

     conn.Close()

        Dim dr As DataRelation

        Dim dc1 As DataColumn

        Dim dc2 As DataColumn

     dc1 = ds.Tables("Fornecedores").Columns("CódigoDoFornecedor")

     dc2 = ds.Tables("Produtos").Columns("CódigoDoFornecedor")

     dr = New System.Data.DataRelation("Produtos do Fornecedor", dc1, dc2)

     ds.Relations.Add(dr)

Catch erro As Exception

     MsgBox("Erro")

End Try

End Sub

 

Quando você executar o projeto irá obter uma tela parecida com a da figura abaixo:

 

 

Para exibir os produtos de um fornecedor basta clicar no sinal de + a lado do código do fornecedor: A tela como da figura abaixo será exibida e basta você clicar no link - Produtos do Fornecedor - para exibir os produtos deste fornecedor.

 

 

Abaixo os produtos do fornecedor de código igual a 7 . Para retornar ao formulário dos fornecedores basta clicar na seta superior no formulário.

 

 

Pronto ! completamos o ciclo dos principais objetos ADO.NET , com isso quis oferecer uma visão , ainda que não muito profunda da tecnologia ADO.NET.

 

Agora é você estudar , se aprofundar e por em prática no seu dia a dia...

 

Você é quem faz a diferença...

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti