ADO.NET 2.0 - Criando e usando um DataTableReader


O objeto DataTableReader apresenta o conteúdo de um DataTable ou DataSet na forma de um ou mais conjuntos de dados do tipo somente-leitura e somente-para-frente.

Quando você cria uma DataTableReader de um DataTable , o objeto DataTableReader  resultante contém um conjunto de dados com os mesmos dados que o DataTable a partir do qual foi criado, exceto para qualquer linhas que tenham sido marcadas como deletadas. As colunas aparecem na mesma ordem que o DataTable original.

O DataTableReader pode conter múltiplos conjuntos de dados se ele for criado pela chamada do método CreateDataReader. Os registros estarão na mesma ordem que os DataTables na coleção Tables do DataSet.

As classes DataTable e DataSet possuem um método CreateDataReader que retorna o conteúdo de um DataTable ou o conteúdo da coleção das tabelas do objeto DataSet como do tipo somente-leitura, e somente-para-frente.

Na versão anterior ao utilizar o objeto DataReader você tinha não podia usar a conexão enquanto a leitura dos dados estivesse sendo feita, você tinha que fechar a conexão explicitamente após a leitura dos dados.

O objeto DataTableReader é similar ao objeto DataReader mas mantém os dados no estado desconectado. Ou seja podemos dizer que ele é um DataReader desconectado.

O objeto DataTableReader é mais leve se comparado com o DataTable ou DataSet e mesmo assim ele continua contendo a mesma estrutura do DataTable.

vejamos um exemplo de código que cria um DataTableReader usando o método CreateDataReader do objeto DataTable. Iremos acessar o a tabela Employees do banco de dados Northwind.mdb e exibir o nome e sobrenome dos funcionários em um ListBox.

- Crie um novo projeto no Visual Basic 2005 e chamando-o de ExDataTableReader.

No formulário padrão inclua um controle Button e um controle ListBox.

Na janela DataSource crie um datasource com o banco de dados Northwind.mdb. Após feita esta operação a aplicação deverá apresentar a seguinte estrutura:

Janela Data Source Janela Solution Explorer

No evento Click do botão de comando inclua o seguinte código :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


'obtem a string de conexão da aplicação

Dim con As String = My.Settings.NorthwindConnectionString


'Monta sql que seleciona todos os registros da tabela employees do banco de dados Northwind.mdb

Dim sql As String = "Select * from Employees"


'cria um adapter

Dim adapter As OleDbDataAdapter = New OleDbDataAdapter(sql, con)


'cria um datatable

Dim tabela As DataTable = New DataTable("Employees")


'preenche o datatable

adapter.Fill(tabela)


'cria um DataTableReader a partir do DataTable

Dim dtbReader As DataTableReader = tabela.CreateDataReader


'exibe o nome e sobrenome no listbox

While dtbReader.Read

   ListBox1.Items.Add(dtbReader.GetValue(2).ToString + " " + dtbReader.GetValue(1).ToString)

End While

End Sub

Executando o projeto teremos:

Pegue o código do projeto aqui :

Nota: Podemos retornar múltiplos


Dim connection As SqlConnection = New SqlConnection(connectionString)
Try
   Dim str As String = String.Empty
   Dim ds As DataSet = New DataSet
   Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM Customers", connection)
   Dim adapter As SqlDataAdapter = New SqlDataAdapter(cmd)
   Dim dtCustomers As DataTable = New DataTable("Customers")
   adapter.Fill(dtCustomers)
   ds.Tables.Add(dtCustomers)

   adapter.SelectCommand = New SqlCommand("SELECT * FROM Orders", connection)
   adapter.Fill(ds, "Orders")
    Dim dtReader As DataTableReader = ds.CreateDataReader
Try
   Do
      While dtReader.Read
         str = dtReader.GetValue(0).ToString
      End While
   Loop While dtReader.NextResult
Finally
   CType(dtReader, IDisposable).Dispose()
End Try
Finally
   CType(connection, IDisposable).Dispose()
End Try

Até o próximo artigo...

referências:

- Creatind and Using a DataTableReader - http://msdn2.microsoft.com/en-us/library/ws7ad65f.aspx


José Carlos Macoratti