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: