ADO .NET - O Acesso aos dados

Vamos abordar um assunto muito importante : o acesso aos dados. Quando falamos de acesso a dados logo imaginamos um banco de dados e nas formas que temos para extrair dele a informação que precisamos. Esta é na verdade uma visão um tanto simplista pois que os dados podem estar armazenados sob diversas formas. Quando falamos em dados estamos falando em informação : um número , uma figura , uma música , um texto , etc...

O acesso aos dados feito de forma tradicional usou até hoje bibliotecas , componentes e ferramentas tais como : ODBC , DAO - Data Access Objects , ADO - ActiveX Data Objects , RDO , RDS , etc. ; somente para citar a tecnologias da Microsoft.

Com a chegada da internet e sua popularização o acesso aos dados tornou-se um fator crítico. O que torna a internet fantástica é que podemos ter acesso a qualquer tipo de informação em praticamente qualquer lugar. O acesso dados tornou-se então a menina dos olhos de todo o sistema por trás da grande WEB. E como o acesso aos dados esta sendo feito ? Com as mesmas tecnologias e ferramentas usadas na década passada.

A plataforma .NET trás como uma de suas novidade a ADO.NET: uma nova tecnologia de acesso a dados que tenta resolver os problemas atuais e passa focar o acesso a dados via Internet , o acesso desconectado. Sim eu disse acesso desconectado.

A arquitetura ADO .NET ( System.Data )

Para acessar a funcionalidade ADO .NET temos que utilizar componentes para realizar as tarefas pertinentes de acesso a dados. O principal componente da arquitetura ADO .NET é o DataSet . O DataSet proporciona o acesso a tabelas , linhas , colunas , relacionamentos , constraints e pode conter diversas tabelas e relacionamentos. A seguir temos um diagrama com uma visão da arquitetura ADO.NET:

Obs: Na verdade o acesso a funcionalidade da ADO .NET é feito através do namespace System.Data da qual a ADO.NET faz parte. Assim , se quisermos ser corretos , temos que tratar realmente dos Namespaces que devem ser importados para serem usados e dos seus objetos . Vejamos um resumo da arquitetura e seus componentes:

System.Data

Expõe os objetos usados para acessar e armazenar dados através da criação de dados relacionados armazenados na memória virtual . Esses objetos são independentes da fonte de dados . O namespace System.Data contém :

DataSet

O mais importante é a classe DataSet pois contém toda a funcionalidade para gerenciar dados armazenados na memória através de um chache de dados desconectado . Abaixo temos sua estrutura:

Podemos ver que o DataSet contém , tabelas , relacionamentos entre tabelas e cada tabela contém um conjunto de linhas e colunas.

Nota: Não tente fazer comparações com o modelo ADO pois a coisa aqui é muito diferente.

Perceba que o DataSet esta relacionado com Tabelas ( Tables ) e Relacionamentos ( Relations ) e que as tabelas contidas no DataSet pertence a classe DataTable.

Os dados internos contidos em um DataSet são mantidos no formato XML e a estrutura do DataSet é definida pelo XSD (XML Schema Definition Language) , ou seja , XML e DataSet estão intimamente ligados.

DataTable

É um objeto chave dentro do namespace System.Data . O objeto DataTable expõe as seguintes propriedades :

  1. Columns - A coleção Columns contém uma lista de todas as colunas contidas em uma tabela.
  2. Constraints - Regras de dados que são aplicadas a um tabela
  3. ChildRelations - É uma coleção de relacionamentos que define as relações entre as tabelas filhas e o DataTable.
  4. PrimaryKey - É uma matriz de objetos DataColumn que representa todas as colunas com as chaves primárias de um DataTable particular.
  5. Rows - Fornecem os dados atuais contidos em uma tabela. Contém uma coleção de objetos DataRow.
  6. TableName - Representa o nome do DataTable

DataRow

O objeto DataRow é um componente essencial do objeto DataTable. É o container para as linhas de dados dentro de uma tabela e permite as funcionalidades : Criar , Atualizar, Obter e Excluir . A seguir temos os métodos e propriedades mais importantes da classe DataRow:

  1. RowState - Indica o estado atual do DataRow podendo ser um dos seguintes valores:
    • Added - A linha foi incluida na tabela e o método AcceptChanges() ainda não foi chamado.
    • Deleted - A linha foi excluida da tabela através do método Delete().
    • Detached - A linha atualmente não faz parte da tabela.
    • Modified - Os dados dentro da linhas foram modificados e AcceptChanges() ainda não foi chamado.
    • Unchanged - Os dados da linha não foram alterados desde a última chamada a AcceptChanges().
  1. BeginEdit() - Função que ativa o modo de edição do DataRow permitindo ao codigo modificar os dados de mais de uma linha de uma vez.
  2. CancelEdit() - Desativa o modo de edição do DataRow e decarta as alterações feitas desde que a chamada a BeginEdit() foi feita.
  3. Delete() - Exclui a linha atual.
  4. EndEdit() - Complete o modo de edição para a linha atual , salvando as alterações no DataSet desde que o método BeginEdit() foi invocado.
  5. AcceptChanges() - Invoca implicitamente o método EndEdit() e dependendo do status de Rowstate (ver acima) as alterações são descartadas ou efetivadas.

DataRelation

A classe DataRelation contém os dados requeridos para descrever o relacionamento entre os objetos Datatable através dos objetos DataColumn.

Ao criar uma DataRelation você esta criando um relacionamento Pai/Filho entre duas tabelas onde as colunas usadas para efetivar o relacionamento devem ser do mesmo tipo. A seguir temos um exemplo de código que cria um DataRelation e o coloca na coleção Relations do DataSet associado. ( As tabelas usadas são do banco de dados Northwind)

DataColumn Parent;
DataColumn Child;

Parent=DataSet.Tables["Customers"].Columns["CustId"];
Child=CustomerDataSet.Tables["Orders"].Columns["CustId"];

DataRelation CustomerOrders = new DataRelation ( "CustormersOrders", Parent , Child);
CustomerDataSet.Relations.Add( CustomerOrders );

System.Data.OleDB

Este Namespace contém os objetos que fornecem a funcionalidade para acessar dados através de um provedor OLE-DB. Os provedores OLE DB usam a funcionalidade nativa do OLE DB através dos serviços COM. Podem ser usados com Oracle , MSAccess , SQL Server 6.5 e outras fontes de dados que suportem os provedores OLE DB.Os objetos são:

System.Data.SQLClient

Este namespace encapsula toda a funcionalidade necessária para gerenciar e manipular dados no Microsoft SQL Server.

Obs: A Microsoft disponibiliza separadamente o provedor ODBC para acesso a fonte de dados ODBC.

Connection - é a classe que implementa a interface de conexão. (IDbConnection interface)

Command - objeto que representa uma instrução SQL or stored procedure executada através de Connection

DataAdapter - Fornece dados ao DataSet e propaga as alterações do DataSet para a fonte de dados. O serviço do DataAdpater é adpatar os dados dos objetos Command e incluí-los no DataSet e levar os dados do DataSet a fonte de dados usando objetos Command.

DataReader - É uma implementação semelhante ao cursor somente-leitura-para-frente ( forward-only ) para uma fonte de dados. Um DataReader é rápido e consome poucos recursos do sistema sendo usado para situações específicas.

Com isto temos uma visão geral , embora resumida , da arquitetura ADO.NET . Apenas lembrando que estamos na versão beta 2 e que até o lançamento da versão final algumas coisas podem ser alteradas. Sei que existem muitas novidades e  que você deve estar estranhando o novo ambiente , mas ,  você se acostuma....

Na sequência vamos mostrar um exemplo prático de como usar toda esta teoria... : Meu primeiro acesso a dados com o VB.NET

Até lá ...

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:


José Carlos Macoratti