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: