You are on page 1of 22

ADO.

NET
Introdução

Venho por este meio preencher uma lacuna existente na bibliografia portuguesa relativamente ao
ADO.NET. Neste primeiro artigo iremos abordar a arquitectura do ADO.NET e como aceder aos dados
existentes numa base de dados Access e a sua integração com aplicações Windows. Numa próxima
oportunidade iremos abordar a edição e actualização de dados com ADO.NET!

Arquitectura ADO.NET (System.Data)

Para ter acesso à funcionalidade ADO.NET, temos que utilizar componentes para realizar as
tarefas relativas ao acesso a dados. O principal desses componentes é o DataSet. Este
proporciona o acesso a tabelas, linhas, colunas e pode conter diversas tabelas.
Na imagem que se segue, apresenta-se um diagrama com uma visão da arquitectura do ADO.NET

Nota: O acesso às funcionalidades do ADO.NET é feito através do namespace System.Data.

System.Data

Expões os objectos usados para aceder e armazenar dados através da criação de dados
relacionados, armazenados na memória virtual. Esses objectos são independentes da fonte de
dados. O namespace System.Data contem vários componentes, sendo alguns deles:
≡ DataSet
≡ DataTable

DataSet

O DataSet é a base de dados Virtual;


Tem a particularidade de não estar ligada à base de dados, ou seja, desconhece a fonte de dados
(desconectado).

Benefícios de usar o DataSet:

Um DataSet pode conter uma ou mais tabelas, essas tabelas podem ser de diferentes bases de
dados. Cria restrições de integridade nas tabelas e também cria relações entre tabelas. Só os
dados alterados é que são alterados na base de dados, estes dados antes de serem enviados, são
temporariamente armazenados num ficheiro XML.

Tiago Santos Coelho


O componente mais importante é o DataSet, pois é este componente que abrange toda a
funcionalidade de gerir dados armazenados na memória.

DataTable

É um objecto chave dentro do namespace System.Data. Este objecto DataTable tem as seguintes
propriedades:

≡ Columns – Contém uma lista de todas as colunas contidas numa tabela.


≡ Constraints – Regras de dados que sã aplicadas a uma tabela.
≡ ChildRelations – É uma colecção de relacionamentos que define as relações entre as
tabelas e o DataTable.
≡ PrimaryKey – É uma matriz de objectos DataColumn que representa todas as colunas com as
chaves primárias de um DataTable.
≡ Rows – Fornecem os dados actuais contidos numa tabela. Contem uma colecção de objectos
DataRow.
≡ TableName – Representa o nome da DataTable.

DataProvider

O DataProvider tem todos os objectos necessários para aceder a uma base de dados específica.
O VS.NET tem três providers, sendo eles:
≡ SQL Server (optimizado para usar o SQL Server);
≡ Genérico OLEDB (para drivers OLEDB; Base de dados relacionais; Ficheiros; entre outros)
≡ ODBC

System.Data.OleDb

Este namespace contem objectos que fornecem a funcionalidade de aceder a dados através de um
provedor OLE-DB (ex. Access).
Os objectos são:
≡ OleDbConnection
≡ OleDbCommand
≡ OleDbDataSet
≡ OleDbDataReader
≡ OleDbDataAdapter

Connection – É a classe que implementa a interface de conexão.

Command – Objecto que representa uma instrução SQL executada através de um Connection.

DataAdapter – Fornece dados ao DataSet e propaga as alterações do DataSet para a Base de Dados.
O serviço do DataAdapter é “adaptar” os dados dos objectos Command e incluí-los no DataSet,
levando assim os dados do DataSet à Base de Dados através dos objectos Command.

Tiago Santos Coelho


DataReader – Um DataReader é rápido e consome poucos recursos do sistema, sendo assim usado
muitas das vezes em situações específicas.

A diferença entre DataReader e DataSet

Quando falamos de desempenho, a utilização de um DataReader leva vantagem, pois obtém o acesso
aos dados assim que o objecto fica disponível, pelo contrário do DataSet, é necessário aguardar
para que este fique preenchido, além disso o DataReader é do tipo ForwardOnly, ou seja, dados
que são unicamente de leitura e com o acesso desde o primeiro registro até ao último. Com o
DataSet pode-se “andar” para a frente ou para trás nos dados.

Tiago Santos Coelho


Exercícios Práticos

Criação de um novo Projecto

File > New > Project

Isto permite-nos criar um novo projecto.


De seguida, escolhemos o tipo de projecto que queremos iniciar, que neste caso vai ser a
tecnologia C#, como pode verificar na imagem que se segue.

Legenda:
1 – Tecnologia utilizada para elaborar o projecto.
2 – Tipo de Aplicação.

Tiago Santos Coelho


3 – O nome que damos ao nosso projecto.
4 – Localização do projecto gravado no computador.
Após clicar em OK, vai-nos aparecer o seguinte ambiente:

De seguida, vamos a Project

Adicionamos uma nova Classe.

Tiago Santos Coelho


1 – Tipo de item que vamos adicionar, neste caso Class.
2 – Nome que damos ao item Class.

Quando carregar-mos em OPEN, do lado esquerdo vai aparecer-nos o item class que adiciona-mos e
abre-nos o próprio ficheiro que criamos, como podemos ver na imagem que se segue:

Depois de ter efectuado os passos anteriores, até ao momento temos o projecto criado assim como
uma classe para utilizar na criação da conexão à Base de Dados.

Tiago Santos Coelho


Conexão à Base de Dados por gráficos.

Arrastamos o OleDbDataAdapter para o form1 e aparece-nos a configuração Wizard do Data Adapter.


Então, NEXT.

Como não temos nenhuma ligação efectuada, então vamos criar uma nova conexão (New Connection...)

Tiago Santos Coelho


Seleccionamos o Tab Fornecedor e os dados aos quais nos pretendemos ligar são os da Microsoft
Jet 4.0 OLE DB Provider.
Clicar em Seguinte >>

Clicamos no Botão que tem ... e indicamos o caminho da Base de Dados.

Tiago Santos Coelho


Escolhemos a Base de Dados e clicamos em Abrir.

Depois de escolher a Base de Dados testamos a ligação, clicando no botão Testar ligação.
Se tudo estiver bem, aparecerá a seguinte mensagem:

Tiago Santos Coelho


Após, clicamos em OK e novamente OK.

Como podemos ver na imagem já possuímos uma ligação à Base de Dados. Então clicamos em NEXT.

Tiago Santos Coelho


NEXT

Aqui escrevemos a instrução SQL ( SELECT * FROM cliente ) como podemos ver na imagem.
Clicamos em NEXT.

Tiago Santos Coelho


Automaticamente o Data Adapter Configuration Wizard gerou o DataAdapter com os respectivos
SELECT, INSERT, UPDATE, DELETE e Table Mappings.

Clica-se em Finish e vai aparecer-nos uma janela em que clicamos em Include Password

Com isto já criamos a ligação à Base de Dados

Tiago Santos Coelho


Após os passos efectuados, obtemos o oleDbDataAdapater1 e o oleDbConnection1.
Para obtermos o DataSet, clicamos com o botão direito do rato no oleDbDataAdapter1

Aparece-nos as seguintes opções e escolhemos a que está na imagem seleccionada, ou seja,


Generate DataSet.

Tiago Santos Coelho


Escolhemos o nome para o DataSet (que neste caso é DataSet1) e clicamos em OK.

Agora iremos apresentar os dados que a base de dados contem, através de um DataGrid.

Selecciona-se a DataGrid (demonstrada na imagem a laranja) e arrastamos para o Fom1.


Aí escolhemos o tamanho que queremos que a DataGrid tenha.

A DataGrid é uma grelha que nos permite obter a informação de uma ou mais colunas, com as
respectivas linhas de uma tabela da Base de Dados.

Agora vamos programar para que a DataGrid receba os dados da Base de Dados.
Então,

Tiago Santos Coelho


No DataSource (propriedade da DataGrid lado direito da imagem) escolhemos o dataSet11.cliente
que foi o que no passo anterior foi criado a partir do DataSource e .cliente dá indicação da
tabela da base de dados.
Como podemos visualizar, a DataGrid no Form1, adicionou automaticamente os campos da Base de
Dados.
Agora para que se preencha a DataGrid com os dados, temos que efectuar mais alguns passos para
estar totalmente concluído este processo. O adaptador criado anteriormente deverá ser usado
para preencher o DataSet com os dados da tabela. Desta forma, no evento Load() ou no método
InitializeComponent() colocamos a seguinte instrução:

oleDbDataAdapter1.Fill(dataSet11);

Demonstração do Programa em Execução:

Tiago Santos Coelho


Tiago Santos Coelho
Agora vamos proceder ao acesso à base de dados mas através da criação do código manualmente.
Então, criamos um novo projecto:

File > New > Project

Isto permite-nos criar um novo projecto.


De seguida, escolhemos o tipo de projecto que queremos iniciar, que neste caso vai ser a
tecnologia C#, como pode verificar na imagem que se segue.

Legenda:
1 – Tecnologia utilizada para elaborar o projecto.
2 – Tipo de Aplicação.
3 – O nome que damos ao nosso projecto.

Tiago Santos Coelho


4 – Localização do projecto gravado no computador.
Após clicar em OK, vai-nos aparecer o seguinte ambiente:

Depois de ter efectuado os passos anteriores, até ao momento temos o projecto criado assim como
uma classe para utilizar na criação da conexão à Base de Dados.

Agora vamos criar uma estrutura gráfica no From1 para obter os dados da base de dados.

Assim temos os campos que vão receber a informação da Base de Dados, assim como botões <, <<,
>>, >, para se movimentar de dado para dado.

Agora vamos adicionar um Item class.

Tiago Santos Coelho


Damos o nome cliente à classe.

Tiago Santos Coelho


Vamos obter este código após criar a classe.
Agora vamos criar o código para inserir na class cliente:

//em primeiro lugar importamos os namespace necessários:


using System;
using System.Data;
using System.Data.OleDb;

namespace Projecto_Teste1
{
public class cliente
{
private DataSet dscliente;

public cliente()
{
dscliente = new DataSet();
}
public DataSet getcliente()
{
/criação de ligação à base de dados
OleDbConnection oLigar = new OleDbConnection();

//Liga à base de dados através do ficheiro APP.CONFIG


oLigar.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\Projecto_Teste1\\Projecto_DB1.mdb;User Id=admin;Password=;";

//criação do adaptador que selecciona todos os dados da tabela fornecedores


OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM cliente",oLigar);

//preencher o data set (conjunto de dados) com a tabela que o adaptador foi
sacar à base de dados
da.Fill(this.dscliente,"Clientes");

//desliga a conexo com a Base de dados


oLigar.Close();

//retorna só os valores da tabela fornecedores


return this.dscliente;
}
}
}

Tiago Santos Coelho


De seguida vamos ao Form1 e inserimos após esta linhas de código ( public class Form1 :
System.Windows.Forms.Form )

o seguinte código:

//cria o DataSet ao nível do formulário


private DataSet dscliente;

De seguida vamos ao INITIALIZE COMPONENTE e adicionamos o seguinte código:

cliente cli = new cliente();


this.dscliente = cli.getcliente();

this.txtnnumero.DataBindings.Add("Text",dscliente.Tables[0],"id");
this.txtnome.DataBindings.Add("Text",dscliente.Tables[0],"nome");
this.txtidade.DataBindings.Add("Text",dscliente.Tables[0],"idade");
this.txtxtelefone.DataBindings.Add("Text",dscliente.Tables[0],"telefone");
this.txttelemovel.DataBindings.Add("Text",dscliente.Tables[0],"telemovel");
this.txtrua.DataBindings.Add("Text",dscliente.Tables[0],"rua");
Agora clicamos em cada botão e adicionamos o código respeitante a cada um.
Então obtemos:

Para este botão, clicamos duas vezes no botão e escrevemos este código:

private void btnback_Click(object sender, System.EventArgs e)


{
this.BindingContext[this.dscliente,"Clientes"].Position -= 1;
}

Para este botão, clicamos duas vezes no botão e escrevemos este código:

private void btnnext_Click(object sender, System.EventArgs e)


{
this.BindingContext[this.dscliente,"Clientes"].Position += 1;
}

Para este botão, clicamos duas vezes no botão e escrevemos este código:

private void btnfirst_Click(object sender, System.EventArgs e)


{
this.BindingContext[this.dscliente,"Clientes"].Position = 0;
}

Para este botão, clicamos duas vezes no botão e escrevemos este código:

private void btnlast_Click(object sender, System.EventArgs e)


{
//indica o numero de empregados que existe
int c = this.BindingContext[this.dscliente,"Clientes"].Count;
this.BindingContext[this.dscliente,"Clientes"].Position = c;
}

Tiago Santos Coelho


Pressione F5 e execute o programa. Como poderá observar conseguimos efectuar a
movimentação dos registos através dos botões de direcção, tal como fazíamos no ADO
2.7!

Este artigo apenas explora o acesso a dados. Na próxima oportunidade iremos tentar
estudar como editar e actualizar os dados de uma base de dados. Qualquer assunto
relacionado com este artigo pode ser enviado para tiagocoelho@pacpi.com.

Até breve e boa programação.

Tiago Coelho…

Tiago Santos Coelho

You might also like