Guia ADO.NET: DataSet, DataReader e DataAdapter

Classificado em Computação

Escrito em em português com um tamanho de 9,85 KB

O que é

O ADO.NET é uma completa reformulação do mecanismo de acesso a dados, sendo uma nova geração dessa arquitetura, completamente integrada ao .NET Framework. Oferece um vasto número de classes, resultando em uma comunicação fácil e eficiente com o SGBD, permitindo todas as operações necessárias.

Os componentes do ADO.NET foram desenhados para tratar o acesso e a manipulação dos dados. Os componentes que podemos chamar de pilares do ADO.NET são: DataSet e o provedor .NET, que é um conjunto de componentes que inclui os objetos Connection, Command, DataReader e DataAdapter.

ADO x ADO.NET

Se você conhece um pouco de ADO, já sabe que ela é uma tecnologia de acesso a dados ideal para ambientes de redes locais. Porém, quando pensamos em aplicações distribuídas na Internet, enfrentamos problemas relacionados à conexão e à velocidade de transmissão de dados.

A ADO.NET foi criada para trabalhar com o acesso desconectado aos dados e faz a conexão com a fonte de dados através de um objeto DataAdapter (por exemplo, SqlDataAdapter e OleDbDataAdapter), e não através de um provedor OLE DB como a ADO. Com isso, o desempenho é otimizado.

A ADO tenta resolver esses problemas fornecendo um modelo em que podemos usar o objeto Recordset para acesso a dados desconectado, gerenciando os dados em memória. No entanto, o Recordset representa uma única tabela de dados; se for necessário trabalhar com dados de mais de uma tabela, será preciso recorrer a SQL.

A ADO.NET oferece o objeto DataSet, que pode representar em memória várias tabelas. Os objetos DataTable são usados para representar e tratar essas tabelas; além disso, podemos criar relacionamentos entre essas tabelas através de objetos DataRelation. Dessa forma, o DataSet consegue ser uma representação mais próxima do banco de dados.

No quesito dados, basta dizer que enquanto a ADO se baseia na COM, a ADO.NET se baseia em XML. Dados em formato XML são mais fáceis de trafegar pela rede mundial, por serem apenas texto, não exigindo conversão.

Utilizando o DataSet

O DataSet é uma estrutura de dados totalmente desconectada do banco de dados; baseia-se em XML e armazena na memória todos os dados recebidos da base. Isso permite manipular os dados fora do banco e depois devolver os dados modificados.

O DataSet assemelha-se a um banco de dados, pois armazena as informações em uma estrutura semelhante: você pode criar várias tabelas, colunas, relacionamentos, utilizar tabelas de origem de dados diferentes, percorrer registros a qualquer momento e inclusive transportar essa estrutura de um ponto a outro utilizando web services.

Para utilizar o DataSet devemos seguir passos semelhantes aos usados com o DataReader, com algumas modificações. Os tópicos abaixo descrevem os componentes envolvidos:

  • Connection - Abre e fecha a conexão; necessita de uma string de acesso.
  • Command - Processa o comando Transact-SQL no SGBD.
  • DataAdapter - Obtém dados do SGBD e preenche o DataSet.
  • DataSet - Estrutura de dados em XML que será preenchida pelo DataAdapter.

Utilizando o DataReader

O DataReader é a forma de acesso mais rápida à base de dados e tem um consumo muito baixo de memória, pois dispõe de menos recursos sobre os dados retornados; ele lê em apenas uma direção, sem retorno. Porém, só consegue carregar dados para um controle por vez.

Para cada provedor você usa um DataReader específico. Por exemplo, para a classe SqlClient usa-se o SqlDataReader e, para OleDb, usa-se o OleDbDataReader, pois cada provedor tem implementações específicas.

O DataReader assemelha-se muito à ADO: você precisa explicitamente abrir e fechar a conexão (Connection) com o SGBD. Para utilizar essa classe, siga os passos abaixo:

  • Connection - Abre e fecha a conexão; necessita de uma string de acesso.
  • Command - Processa o comando Transact-SQL no SGBD.
  • DataReader - Faz a leitura do retorno.

Acesso ao ADO.NET

Classe Connection

A classe Connection é utilizada em qualquer tipo de acesso ao SGBD, seja conectado ou desconectado. Ela recebe parâmetros importantes de acordo com o tipo de banco de dados que você utilizará (por exemplo, parâmetros específicos para OLE DB ou ODBC).

Objetos Command

Os objetos Command são usados para executar declarações SQL e procedimentos armazenados (stored procedures). Os métodos usados para realizar essas tarefas são:

  • ExecuteReader - Executa declarações SQL que retornam linhas de dados, como SELECT.
  • ExecuteNonQuery - Executa declarações SQL que não retornam dados, como INSERT, UPDATE, DELETE e SET.
  • ExecuteScalar - Retorna um único valor, como o resultado de uma função agregada: SUM, AVG, COUNT, MAX e MIN.

Para criar um comando você deve ter uma conexão criada. Para um banco de dados SQL Server, por exemplo, utiliza-se um objeto SqlCommand; para provedores OLE DB, utiliza-se o objeto OleDbCommand.

Propriedades e métodos mais usados

  • FieldCount - Informa o número de colunas da linha de dados atual.
  • IsClosed - Indica se o objeto DataReader está fechado.
  • RecordsAffected - Especifica o número de linhas alteradas, excluídas ou incluídas na execução de uma declaração SQL.
  • Item(n) - Obtém o valor da n-ésima coluna no seu formato nativo.
  • Close - Método que fecha o objeto.
  • GetName - Retorna o nome da n-ésima coluna.
  • Read - Permite ao DataReader avançar para o próximo registro.
  • IsDbNull - Informa se a n-ésima coluna possui um valor nulo.

Objeto DataTable

Um objeto DataTable representa uma ou mais tabelas de dados em memória. Os objetos DataTable estão contidos em um DataSet e/ou DataView. Abaixo, as principais propriedades do objeto DataTable:

  • Columns - Representa as colunas da tabela através da coleção de objetos DataColumn (DataColumnCollection).
  • Rows - Representa as linhas da tabela através da coleção de objetos DataRow (DataRowCollection).
  • PrimaryKey - Representa a chave primária da tabela através dos objetos DataColumn.
  • TableName - Define o nome do DataTable na coleção DataTableCollection de um DataSet.
  • AcceptChanges - Efetiva as alterações realizadas no DataTable no banco de dados.
  • NewRow - Gera um novo objeto DataRow que representa uma linha de dados.
  • Copy - Copia os dados e a estrutura do DataTable.
  • Clear - Limpa os dados de um DataTable.
  • RejectChanges - Ignora as alterações feitas no DataTable.

DataBind

O termo DataBind é muito utilizado no .NET. Ele representa a capacidade do controle de ler automaticamente um DataReader ou DataSet e exibir os dados na tela.

Com esse recurso, o programador não precisa mais iterar manualmente sobre o retorno do banco para popular os controles. As principais propriedades dos controles para usar o recurso DataBind são:

  • DataSource - Define a fonte de dados.
  • DataBind - Aciona a leitura da fonte de dados.
  • DataValueField - Define o valor para ListBox, DropDownList, etc.
  • DataTextField - Define o texto que será apresentado na tela para ListBox, DropDownList, etc.

DataView

Usamos o DataView para mostrar uma visão dos dados contidos em um DataTable. Assim, é possível ter vários DataViews ligados ao mesmo DataTable, cada um exibindo uma visão diferente dos dados. O DataTable possui um DataView padrão acessível pela propriedade DefaultView.

As principais propriedades e métodos do objeto DataView são:

  • RowFilter - Expressão usada para filtrar os dados exibidos pelo DataView.
  • RowStateFilter - Define a versão dos dados que serão exibidos pelo DataView.
  • Count - Informa o número de linhas no DataView após a aplicação dos filtros (RowFilter e RowStateFilter).
  • Item - Obtém uma linha de dados de uma tabela especificada.
  • Sort - Define a coluna e o tipo de ordenação do DataView (ASC para ascendente ou DESC para descendente).
  • AddNew - Inclui uma nova linha no DataView.
  • Table - Define qual o objeto DataTable de origem para o DataView.
  • Delete - Exclui uma linha do DataView.
  • Find - Busca por uma linha no DataView.

Entradas relacionadas: