 VB .NET - Como usar objetos DataSet  - IV
             
VB .NET - Como usar objetos DataSet  - IV
Para encerrar esta sequência de artigos sobre o objeto DataSet vamos mostrar como criar uma pequena aplicação usando o DataSet tipado através do assistente de configuração do Visual Studio e algumas pinceladas de código aqui e ali para fazer tudo ficar funcionando.
| Acompanhe o Curso - VB .NET - ADO .NET Prático (Curso) - e veja o que mudou na versão 2012. | 
Vou usar como exemplo o acesso a uma base de dados Access Northwind.mdb presente no diretório c:\teste. Vamos acessar a tabela Produtos.
nota: O banco de dados Northwind.mdb que eu estou usando foi alterado para este exemplo:A tabela Produtos tem a seguinte estrutura:

a - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
b- Na caixa de ferramentas selecione a aba - Data - e inclua o componente - OleDbDataAdapter - no formulário padrão - form1.vb.
|  | 
c- A seguir na tela de configuração do Data Adapter clique no botão New Connection...
| 
    
     | 
d- A seguir conforme telas mostradas abaixo , defina o provedor usado na conexão na aba Provedor ; Na aba Conexão selecione o banco de dados e clique no botão - Testar Conexao.
| 
    
     | 
    
     | 
Na tela - Data Adapter Configuration Wizard - selecione - Use SQL statements e clique no botão - Next .

A seguir informe a instrução SQL , conforme abaixo , e clique no botão - Finish .
Nota: Voce pode clicar no botão - Query Builder - para criar a instrução SQL.
|  | 
    
     | 
Observe que estão visíveis no formulário os componentes
OleDbConnection1: responsável pela conexão ao banco de dados;
OleDbDataAdapter1: responsável pela comunicação DataSet e a base de dados;
| Além destes componentes visíveis , na seção Properties temos os componentes : OleDbSelectCommand1 , OleDbInsertCommand1, OleDbUpdateCommand1, OleDbDeleteCommand1 responsáveis pelos comandos SQL que selecionam , inserem , atualizam e excluem dados. 
 
 | 
    
     | 
|  | 
 Vamos agora incluir um DataSet ao nosso projeto. Clique no componente OleDbDataAdapter1 com o botão direito do mouse e selecione : Generate DataSet. 
 | 
| Na próxima janela vamos criar um novo DataSet . Clique em New e informe o nome do DataSet ( Eu vou usar o nome Produtos) . A seguir clique em OK . Pronto ! 
 Produtos representa a classe. 
 Produtos1 representa a instância da classe Produtos. A instância pode ser usada como argumento para preencher o DataSet , atualizar a base de dados , dentre outras operações. 
 |  | 
O projeto agora possui uma classe DataSet e uma instância dela no formulário conforme a figura mostrada abaixo:
| 
    
     | 
Agora que já temos um DataSet no projeto vamos criar um formulário com alguns botões que implementam as seguintes funcionalidades :
Preencher o DataGrid -
Excluir Dados -
Pesquisar Dados -
Atualizar dados -
Atualizar preço dos produtos -
No formulário vamos incluir um componente DataGrid , alguns botões de comando , um GroupBox e algumas Labels , conforme figura abaixo:
 
No componente DataGrid devemos definir as propriedades DataSource e DataMembers assim :
DataSource = Produtos1
DataMember = Produtos
- Preenchendo o DataGrid
No evento Click do botão - Preenche DataGrid - vamos inserir o código que preenche o DataGrid com os dados. ( eu poderia fazer isto de forma automática colocando o código no evento Load do formulário.)
| Private Sub Button1_Click(ByVal 
    sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Produtos1.Clear() 
 | 
- Excluindo um registro
Para excluir um registro , eu vou usar o campo CódigoDoProduto para identificar o produto a ser removido. Vou usar o função InputBox para informar o código do produto a ser excluído. Eu tenho que converter o valor informado para um valor inteiro - Convert.ToInt32(codproduto).
Para remover o registro utilizo o método Remove - Produtos1.Produtos.Rows.Remove(registro). Veja o código abaixo:
| Private
    Sub Button4_Click(ByVal 
    sender As System.Object, ByVal e
    As System.EventArgs) Handles Button4.Click Dim codproduto As String codproduto = InputBox("Informe o codigo do produto a excluir ", "Código do Produto") 
 If codproduto <> "" ThenDim registro As Produtos.ProdutosRow = Produtos1.Produtos.FindByCódigoDoProduto(Convert.ToInt32(codproduto)) ' verifica se encontrou algum registroIf registro Is Nothing Then MsgBox("Não localizei produto com este código") Else Produtos1.Produtos.Rows.Remove(registro) End IfElse MsgBox("Codigo do produto inválido ! ", MsgBoxStyle.Exclamation, "Remover Produto") End IfEnd Sub | 
- Incluindo registros
A inclusão de registros é feita diretamente no DataGrid . Basta se posicionar e informar os valores dos novos dados. Na figura abaixo eu mostro a inclusão de um registro :
|  | 
| Nota : Para incluir uma nova linha na tabela poderíamos ter usado o código abaixo. Estamos fazendo isto no 'queixo duro' por questão de simplicidade. É claro que devemos respeitando a estrutura da tabela produtos , caso contrário ocorrerá um erro. 
 | 
- Atualizando a base de dados
As operações de inclusão e exclusão explicadas acima , somente irão se refletir na base de dados após ser feita a atualização da mesma. Se você fizer qualquer operação que altere os dados e não atualizar a base de dados as mudanças não irão ser refletidas na base de dados.
O código abaixo mostra como atualizar a base de dados com as alterações feitas . No evento Click do botão - Atualizar - insira o código abaixo:
| Private
    Sub Button3_Click(ByVal 
    sender As System.Object, ByVal e
    As System.EventArgs) Handles Button3.Click ' Verifica ocorreu alguma alteração nos dados If Produtos1.HasChanges() Then ' Obtém as alterações efetuadas Dim Alterados As DataSet = Produtos1.GetChanges() ' verifica se realmente houve alterações If Not Alterados Is Nothing Then' manda as alterações para o banco OleDbDataAdapter1.Update(Alterados) Produtos1.AcceptChanges() End IfEnd If End Sub | 
- Primeiro eu verifico se houve alguma alteração nos dados - Produtos1.HasChanges()
- A seguir eu crio um novo DataSet - Alterados - com os dados que foram alterados - Produtos1.GetChanges()
- Depois eu atualizo a fonte de dados - OleDbDataAdapter1.Update(Alterados)
- E finalmente as alterações são passadas para a base de dados : Produtos1.AcceptChanges()
Nota : uma outra forma de fazer a atualização seria usar somente o seguinte código : OleDbDataAdapter1.Update(Produtos1)
- Pesquisando Dados
Podemos pesquisar dados na tabela usando o - campo CódigoDoProduto - . Para fazer isto definimos uma variável registro , á qual será informada o código pelo qual deverá ser feita a busca. Se for encontrado exibimos os valores dos campos do registro.
| Private
    Sub Button2_Click_1(ByVal 
    sender As System.Object, ByVal e
    As System.EventArgs) Handles Button2.Click Dim codproduto As String codproduto = InputBox("Informe o codigo do produto a excluir ", "Pesquisar Código do Produto") 
 If codproduto <> "" ThenDim registro As Produtos.ProdutosRow = Produtos1.Produtos.FindByCódigoDoProduto(Convert.ToInt32(codproduto)) ' Verifica se encontrou o registro If registro Is Nothing Then MsgBox("Produto não localizado !") Else MsgBox(" Produto : " & registro.NomeDoProduto & " Preço R$ " & registro.PreçoUnitário) End IfElse MsgBox("Codigo do produto inválido ! ", MsgBoxStyle.Exclamation, "Pesquisa por código do Produto") End IfEnd Sub | 
- Atualizando todos os registros
Podemos alterar todos os registros da tabela usando um laço para percorrer cada registro da mesma e alterar um campo desejado. No exemplo eu estou realizando um reajuste no preço . O usuário informa o índice e cada campo PreçoUnitário é reajustado segundo a formula :
Registro.PreçoUnitário = Registro.PreçoUnitário + (Registro.PreçoUnitário * (Convert.ToInt32(indice) / 100))
| Private
    Sub Button5_Click(ByVal 
    sender As System.Object, ByVal e
    As System.EventArgs) Handles Button5.Click Dim Registro As Produtos.ProdutosRow Dim i As IntegerDim indice As String indice = InputBox("Informe o percentual (%) do reajuste dos preços dos produtos . Ex: 10 ( 10%) ", "Percentual de Reajuste") 
 If indice <> "" Then' percorre a tabela For i = 0 To Produtos1.Produtos.Rows.Count - 1 ' Pega o registro Registro = Produtos1.Produtos(i) ' Modifica o preço Registro.PreçoUnitário = Registro.PreçoUnitário + (Registro.PreçoUnitário * (Convert.ToInt32(indice) / 100)) Next MsgBox(" Todos os registros foram reajustados com sucesso !", MsgBoxStyle.Information, "Reajuste")Else MsgBox("O valor do indice de reajuste é inválido ! ", MsgBoxStyle.Exclamation, "indice de reajuste") End If | 
Você esta percebendo como é fácil trabalhar com DataSets desta forma. Graças aos DataSets tipados isto é possível . Sim DataSets tipados. !!
Os DataSets podem ser tipados ou não . Um DataSet tipado é um dataset que é derivado de uma classe DataSet e que usa a informação contida em um arquivo de esquema XML ( .xsd ) para gerar uma nova classe. Toda a informação do esquema ( tabelas , colunas, linhas , etc..) é gerada e compilada neste nova classe DataSet. Como esta nova classe é derivada (herdar) da classe DataSet ela assuem toda a funcionalidade da classe DataSet.
Um DataSet não tipado não possui um corresponde arquivo de esquema , ele também possui tabelas , colunas , linhas , etc mas que são expostas somente como uma coleção. Você é quem deverá informar os nomes dos itens presentes nas coleções . Isto pode levar a que os erros sejam detectados somente na hora da compilação. Por exemplo , a linha de código abaixo tem um erro de digitação no nome da tabela que será detectado somente quando você for compilar o código
Ex: dim dt As Datatable = ds.Tables("Prodtos")
Vejamos a seguir a comparação entre dois códigos que acessam dados . Um usa DataSets tipados e outro não tipado:
| Usando DataSet tipados | Usando DataSets não tipados | 
| ' 
    Acessando a coluna CustomerID na 1a linha da tabela Customers Dim s As String | Dim s As String s = CType(dsCustomersOrders1.Tables("Customers").Rows(0).Item("CustomerID"), String) | 
Além de ser mais fácil de usar um DataSet tipado permite que você use o recurso da intellisense no seu código ao usar o editor do Visual Studio. É claro que haverá ocasiões que você vai ter que usar um DataSet não tipado .
Fechamos aqui o clico de artigos sobre a classe DataSet . Há 
ainda muito o que falar sobre ela , farei isto em outros artigos sobre o 
assunto. Aguardem... 
| 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 Facebook
  
 Compartilhe no Twitter
 
Compartilhe no Twitter
 
Referências: