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.