VB .NET - Como usar objetos DataSet - II
Um objeto DataSet é composto por uma coleção de objetos DataTable , cada um dos objetos mapeia uma estrutura de uma tabela com campos e registros. Cada registro de um objeto DataTable é representado por um objeto DataRow , e , uma coleção de objetos DataRow compõe a coleção RowsCollection que é formada pela propriedade Rows.
Como o objeto DataSet não tem conexão com um banco de dados podemos usar suas propriedades para preencher um DataSet via código. Sim isto mesmo , podemos criar objetos de banco de dados como qualquer outro objeto . Vamos mostrar isto no código abaixo :
Private mDataSet
As
DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub |
O código acima mostra como podemos criar um DataSet e preenchê-lo com dados de duas tabelas , tudo isto via código. Abaixo temos o resultado da apresentação da tabela Alunos e da tabela Notas. Basicamente fizemos o seguinte:
criamos um objeto DataSet
a seguir criamos um objeto DataTable e o incluímos na coleção Tables do DataSet usando o método Add
O objeto DataTable expõe uma coleção de objetos DataColumn na coleção Columns . As colunas são incluídas na tabela usando o método Add
Depois que criamos a estrutura das tabelas incluímos os dados em cada uma delas
No caso da tabela Notas criamos um objeto DataRow , a seguir incluímos uma nova linha usando o método NewRow que em seguida e adicionada na tabela via método Add
Então cada elemento é incluído na tabela através da coleção Item
Abaixo o resultado do processamento do código acima , expondo as tabelas e os dados em um componente DataGrid.
Podemos usar os objetos : Tables , DataTable, Columns e Rows para examinar a estrutura de um banco de dados. Vejamos alguns exemplos de como fazer isto usando as propriedades das coleções (lembre-se que toda coleção possui as propriedades Count , item , etc...)
- Percorrendo tabelas em um objeto DataSet - ds.
Dim dt as DataTable For Each dt in ds.Tables Console.Writeline(dt.TableName) Next |
Dim n as integer For n = 0 To dsTables.Count - 1 Console.Writeline(ds.Tables(n).TableName) Next |
Percorre o Datable através das tabelas existentes | O mesmo resultado é obtido usando um índice numérico |
- Percorrendo linhas em um objeto DataTable - dt
Dim row as DataRow For Each row in dt.rows Console.Writeline(row(0)) Next |
Dim n as integer For n = 0 To dt.rows.Count - 1 Console.Writeline(dt.rows(n)(0)) Next |
Percorre todas as linhas da tabela dt e exibe a primeira coluna - row(0) | O mesmo resultado é obtido usando um índice numérico |
Abaixo um exemplo de código para exibir algumas propriedades da tabela Authors que carregamos previamente no DataSet.
Private
Sub ExibeEstrutura(ByVal
myDataSet As
DataSet)
Dim dt As DataTable Dim dc As DataColumn Dim pk As DataColumn Dim dr As DataRow
For Each dt In myDataSet.Tables Next End Sub |
A seguir resultado do processamento exibindo as propriedades da tabela Authors carregada no DataSet.
|
Para localizar linhas especificas em uma tabela a classe DataTable fornece o método Select . O Método Select retorna um array contendo todas as linhjas na tabela ( um array de objetos DataRow) que coincidem com o critério usado para busca. A sintaxe do método Select é :
Public Overloads Function Select (ByVal FilterExpression As String , ByVal sort As String , ByVal recordStates as System.Data.DataViewRowState ) As System.Data.DataRow()
onde os parâmetros são :
- FilterExpression - Informa o critério para selecionar os registros. (Equivalente a string da cláusula SQL WHERE)
- sort - Especifica como as linhas retornadas serão ordenadas. ( Equivalente a cláusula SQL ORDER BY )
- recordStates - define a versão dos registros que serão retornados. O valor informado neste parâmetro pode ser :
CurrentRows - retorna a versão atual de cada linha , desconsiderando se ela é nova, modificada ou inalterada
Deleted - Retorna somente linhas que foram deletas
ModifieCurrent - Retorna somente linhas que foram modificadas. (O valor atual das linhas)
ModifieOriginal - Retorna somente linhas que foram modificadas. (O valor original das linhas)
New - Retorna somente as linhas novas.
None - Não retorna linhas.
OriginalRows - Retorna linhas que estão na tabela antes da modificação.
Unchanged - Retorna somente linhas inalteradas
Nota : Existe um método Select sobrecarregado que usa somente dois parâmetros : FilterExpression e sort.
Ex: Dim rows () As DataRow = dt.Select("Nome = " 'Macoratti'") retorna somente as linhas com nome igual a Macoratti0
Abaixo temos um código que mostra como usar o método Select com uma tabela. Usamos o método duas vezes , uma para exibir os registros com um filtro definido ( id <5 ) , na outra vez não usamos nenhum parâmetro e exibimos todos os registros.
Private
Sub GetRowsByFilter() Dim customerTable As DataTable customerTable = new DataTable( "Customers" ) ' Inclui colunas customerTable.Columns.Add( "id", GetType(Integer) ) customerTable.Columns.Add( "name", GetType(String) ) ' Define a chave Primária customerTable.Columns("id").Unique = true customerTable.PrimaryKey = new DataColumn() { customerTable.Columns("id") } ' inclui 10 linhas Dim id As Integer For id = 1 To 10 customerTable.Rows.Add(new object() { id, string.Format("customer{0}", id) } ) Next id customerTable.AcceptChanges() ' inclui mais 10 linhas For id = 11 To 20 customerTable.Rows.Add( new object() { id, string.Format("customer{0}", id) } ) Next id Dim strExpr As String Dim strSort As String strExpr = "id > 5" ' ordena pelo campo CompanyName strSort = "name DESC"
PrintRows( foundRows, "todos os registros")
If rows.Length <= 0 Then
Dim r As DataRow
For Each r In rows |
Podemos acessar qualquer registro (linha) de qualquer tabela existente em um DataSet de forma aleatória usando o objeto Rows . Não existem mais os métodos MoveNext , MovePrevious , MoveLast, etc..
Acompanhe a continuação no link:... Como usar objetos DataSet III
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: