 VB 
.NET - Como usar objetos DataSet - I
   VB 
.NET - Como usar objetos DataSet - I
Rei morto , rei posto !
Lembra da ADO e do objeto Recordset ?
| Acompanhe o Curso - VB .NET - ADO .NET Prático (Curso) - e veja o que mudou na versão 2012. | 
Pois bem , agora estamos em tempos de VB.NET , ASP.NET e ADO.NET. Se você procurar pelo objeto recordset na nova plataforma vai perceber que ele é coisa do passado. (embora você ainda possa usar objetos recordsets com ADO.NET). Apenas para relembrar veja os artigos sobre o assunto :
O objeto DataSet é o foco principal da programação ADO.NET.
A principal característica do DataSet é ser totalmente desconectado , você pode usar um DataSet para armazenar dados de um banco de dados e pode também mover os dados de um DataSet para um banco de dados , mas o próprio DataSet não faz conexão alguma com o banco de dados , ele nem mesmo tem um objeto para realizar tal conexão .
A ligação entre o banco de dados e DataSet é feita pelo objeto DataAdapter (Adaptador de dados). Abaixo uma ilustração que procura mostrar a interação entre os objetos ADO.NET e o modelo desconectado com o DataSet.

O objeto DataSet da ADO.NET é uma representação na memória dos dados e fornece um consiste modelo independente de programação relacional de uma fonte de dados . O DataSet inclui as tabelas , relacionamentos , restrições , etc.
Quando usar um DataSet ?
A menos que você não precise usar as capacidades avançadas do DataSet , deverá sempre usar o objeto DataReader , pois ele oferece o melhor desempenho. Agora se você precisar usar uma das propriedades inerentes ao objeto DataSet listadas abaixo , ele deverá ser a sua escolha:
Como preencher um DataSet usando um objeto DataAdapter ?
Como já dissemos , embora o DataSet armazene os dados ele não conhece nada da fonte de dados e precisa que alguém busque esses dados para preenchê-lo. Entra em cena então o objeto DataAdapter : OledbDataAdapter e SqlSataAdapter.
Sua função basicamente é a seguinte :
Não pense que o serviço do DataAdapter pare por ai ; quando os dados que foram alterados no DataSet precisam voltar para o banco de dados para atualizar a fonte de dados , novamente o DataAdapter atua :
Para acessar o banco de dados , executar o comando SQL via DataAdapter , trazer os dados e preencher o DataSet usamos o método Fill .
O método Fill retorna a linhas de uma fonte de dados usando a declaração SELECT definida por uma propriedade SelectCommand associada. O objeto Connection associado com a declaração SELECT precisa ser válido mas não precisa ser aberto. Se a conexão for fechada antes de você chamar o método Fill ela será aberta para que os dados possam ser retornados e em seguida fechada novamente. Se a conexão estiver aberta ela permanecerá aberta após o uso do método Fill.
O método Fill então irá incluir as linhas ao objeto DataTable de destino , criando o objeto DataTable , se ele ainda não tiver sido criado. Ao criar o objeto DataTable a operação Fill normalmente cria somente colunas com medadata.
Se o DataAdapter encontrar colunas duplicatas enquanto preenche o DataTable ele irá gerar nomes para as colunas seguintes usando o padrão "columnname1","columnname2", "columnname3" e assim por diante . Quando múltiplos conjuntos de registros forem incluidos em um DataSet cada conjunto de registro será colocado em uma tabela separada.
Então para começar vamos precisar criar um objeto Connection e um objeto Command antes de poder recuperar os dados que precisamos , vamos lá... :
1- Inicie o Microsoft Visual Studio .Net 7.0 e abra um novo projeto selecionando - New Project.
2- Na janela New Project Selecione em Project Type : Visual Basic Projects e em Templates: ASP.NET Web Application . Vamos dar o nome ao nosso projeto de DataSet1. No final clique em OK.
3-Insira no formulário padrão os seguintes componentes: Um DataGrid , um Button e um TextBox. No evento Click do botão - Button1 - insira o seguinte código :
| Private
    Sub Button1_Click(ByVal 
    sender As System.Object, ByVal e
    As System.EventArgs) Handles 
    Button1.Click 'define a string de conexão com o banco de dados Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TextBox1.Text 
 'define o objeto OledbConnection usando a string de conexãoDim conexao As New OleDbConnection(strConn) 
 'define a instrução SQL que será usada para extrair as linhas da tabela AuthorsDim sql As String = "Select * from Authors Where Au_ID < 20" 
 'cria o objeto OleDbCommandDim comando As New OleDbCommand(sql, conexao) 
 'Cria o objeto DataAdapterDim adaptador As New OleDbDataAdapter(comando) 
 'Cria o objeto DataSetDim dsbiblio As New DataSet() 
 'preenche o dataset adaptador.Fill(dsbiblio, "Authors") 
 'exibe os dados em um datagrid DataGrid1.DataSource = dsbiblio End Sub | 
Veja na figura abaixo o resultado da exibição do DataSet no DataGrid.
|  | - No código 
    acima perceba que eu não abri a conexão para preencher o DataSet . Apenas 
    usei : adaptador.Fill(dsbiblio, "Authors") - Eu poderia ter feito assim : conexao.Open() 'preenche o dataset adaptador.Fill(dsbiblio, "Authors") conexao.Close() 
 ou ainda poderia ter aberto a conexão e não ter fechado, também ia funcionar. Nota: O mesmo código pode ser usado 
    quase sem alteração alguma para exibir os dados de uma tabela em um DataGrid 
    em uma página ASP.NET. 
 | 
E se eu quiser preencher um DataSet com dados de mais de uma tabela ? Eu posso carregar a tabela Publisher do banco de dados Biblio.mdb ?
A resposta é : Sim , sem problemas.
Como já disse o DataSet possui o objeto DataTable e , o objeto DataTable é a representação em memória de uma única tabela com seus campos, registros , chaves, índices e constraints. Como o DataSet possui também uma coleção de objetos DataTable ele pode conter dados de mais de uma tabela , seus relacionamentos , chaves , etc... . Vejamos como fazer isto de duas maneiras :
1- Criando dois objetos DataAdapter
Eu apenas vou ter que criar mais um objeto DataAdapter com os dados da tabela Publishers que eu quero retornar. Veja como ficará o código :
| Private
    Sub Button1_Click(ByVal 
    sender As System.Object, ByVal e
    As System.EventArgs) Handles 
    Button1.Click 
 'define a string de conexão com o banco de dadosDim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TextBox1.Text 
 'define o objeto OledbConnection usando a string de conexão Dim conexao As New OleDbConnection(strConn) 
 'define a instrução SQL que será usada para extrair as linhas da tabela AuthorsDim sql As String = "Select * from Authors Where Au_ID < 20" 
 'define a instrução SQL2 que será usada para extrair as linhas da tabela PublishersDim sql2 As String = "Select PubID , Name , [Company Name] from Publishers Where PubID < 20" 'Cria o objeto DataAdapter Dim adaptador As New OleDbDataAdapter(sql, conexao) Dim adaptador1 As New OleDbDataAdapter(sql2, conexao) 
 'Cria o objeto DataSetDim dsbiblio As New DataSet() 
 'preenche o dataset com tabela Authors adaptador.Fill(dsbiblio, "Authors") 'preenche o dataset tabela Publishers adaptador1.Fill(dsbiblio, "Publishers") 
 'exibe os dados em um datagrid DataGrid1.DataSource = dsbiblio End Sub | 
Perceba que eu apenas defini mais uma instrução SQL relativa a tabela Publishers e criei dois objetos DataAdapter. O resultado obtido será o seguinte:
|  |  | 
| figura 1.0 | figura 2.0 | 
2- Usando somente um objeto DataAdapter
Outra forma de obter o mesmo resultado sem criar um novo objeto DataAdapter é mudar a propriedade CommandText do objeto Command e usar novamente o método Fill para preencher o DataSet (eu poderia também criar um novo objeto Command). Veja como fica o código neste caso:
| Private
    Sub Button1_Click(ByVal 
    sender As System.Object, ByVal e
    As System.EventArgs) Handles 
    Button1.Click 'define a string de conexão com o banco de dados Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TextBox1.Text 
 'define o objeto OledbConnection usando a string de conexãoDim conexao As New OleDbConnection(strConn) 
 'define a instrução SQL que será usada para extrair as linhas da tabela Authors Dim sql As String = "Select * from Authors Where Au_ID < 20" 'cria o objeto OleDbCommandDim comando As New OleDbCommand(sql, conexao) 
 'Cria o objeto DataAdapterDim adaptador As New OleDbDataAdapter(comando) 'Cria o objeto DataSet Dim dsbiblio As New DataSet() 
 'preenche o dataset com tabela Authors adaptador.Fill(dsbiblio, "Authors") 
 comando.CommandText = "Select PubID , Name , [Company Name] from Publishers Where PubID < 20" adaptador.Fill(dsbiblio, "Publishers") 
 'exibe os dados em um datagrid DataGrid1.DataSource = dsbiblio End Sub 
 | 
O resultado obtido será o mesmo da figura 1.0 e 2.0 já mostradas acima.
Nota: Qualquer número de DataAdapters pode ser usado em conjunção com o DataSet. Cada DataAdapter pode ser usado para preencher (Fill) uma ou mais objetos DataTable . Os objetos DataRelations e Constraint podem ser incluidos no DataSet localmente , possibilitando assim que você relacione dados de múltiplas fonte de dados .
Exemlo : um DataSet pode conter dados de um banco de dados SQL Sever e dados de um banco de dados DB2. Abaixo temos um exemplo de código que usa duas fontes de dados : SQL Server 2000 e Microsoft Access , relacionadas via objeto DataRelation.
| Dim 
    custConn As SqlConnection= New SqlConnection("Data Source=localhost;Integrated 
    Security=SSPI;Initial Catalog=northwind;") Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", custConn) Dim orderConn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:\Program Files\Microsoft Office\"Office\Samples\northwind.mdb;") 
    Dim orderDA As OleDbDataAdapter = New 
    OleDbDataAdapter("SELECT * FROM Orders", orderConn) | 
Na sequência deste artigo vou mostrar como trabalhar com os objetos DataTables, acessar os dados de um DataSet , apagar registros e otras cosias mas...
Acompanhe a continuação no link:...  
Como usar objetos DataSet II 
 
  
| 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: