ado.net e dot.net

22
Tiago Santos Coelho 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.

Upload: vinyscholl

Post on 19-Jun-2015

474 views

Category:

Documents


0 download

DESCRIPTION

ADO.NET Dot.Net Utilizando o Visual Studio Acesso Banco de Dados

TRANSCRIPT

Page 1: ADO.NET e Dot.Net

Tiago Santos Coelho

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.

Page 2: ADO.NET e Dot.Net

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.

Page 3: ADO.NET e Dot.Net

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.

Page 4: ADO.NET e Dot.Net

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.

Page 5: ADO.NET e Dot.Net

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.

Page 6: ADO.NET e Dot.Net

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.

Page 7: ADO.NET e Dot.Net

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...)

Page 8: ADO.NET e Dot.Net

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.

Page 9: ADO.NET e Dot.Net

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:

Page 10: ADO.NET e Dot.Net

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.

Page 11: ADO.NET e Dot.Net

Tiago Santos Coelho

NEXT

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

Page 12: ADO.NET e Dot.Net

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

Page 13: ADO.NET e Dot.Net

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.

Page 14: ADO.NET e Dot.Net

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,

Page 15: ADO.NET e Dot.Net

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:

Page 16: ADO.NET e Dot.Net

Tiago Santos Coelho

Page 17: ADO.NET e Dot.Net

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.

Page 18: ADO.NET e Dot.Net

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.

Page 19: ADO.NET e Dot.Net

Tiago Santos Coelho

Damos o nome cliente à classe.

Page 20: ADO.NET e Dot.Net

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; } } }

Page 21: ADO.NET e Dot.Net

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; }

Page 22: ADO.NET e Dot.Net

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 [email protected]. Até breve e boa programação. Tiago Coelho…