ado.net e dot.net

Post on 19-Jun-2015

488 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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.

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…

top related