26
Programação Orientada à Objetos Aula 15 -ADO.NET

Programação Orientada à Objetos Aula 15 -ADO.NET

Embed Size (px)

Citation preview

Page 1: Programação Orientada à Objetos Aula 15 -ADO.NET

Programação Orientada à Objetos

Aula 15 -ADO.NET

Page 2: Programação Orientada à Objetos Aula 15 -ADO.NET

Conteúdo

Visão Geral do ADO.NET

O Namespace System.Data

Arquitetura do ADO.NET

Tipos de Acesso a Bancos de Dados no ADO.NET

Conexões e Transações

Execução de Comandos SQL e Stored Procedures

Acesso a dados com DataReader

Acesso a dados com DataAdapter

Page 3: Programação Orientada à Objetos Aula 15 -ADO.NET

Visão Geral do ADO.NET

ADO.NET é a família de classes do framework .NET projetada para o acesso a dados

É uma evolução da biblioteca ADO (ActiveX Data Objects) - componentes COM de acesso a dados da plataforma Windows

Provê o acesso orientado a conexões: Execução de comandos SQL e recuperação de dados com a classe DataReader

Provê o acesso desconectado: Realização de operações desconectadas, mapeando um banco de dados relacional em um objeto da classe DataSet

Page 4: Programação Orientada à Objetos Aula 15 -ADO.NET

Visão Geral do ADO.NET Disponibiliza as classes necessárias para acesso e

manipulação em BD e arquivos XML.

Uma das vantagens do ADO .NET é a possibilidade de trabalharmos de forma desconectada do BD.

As classes estão no namespace System.Data.

Ainda será necessário um dos seguintes: System.Data.SqlClient System.Data.OleDb System.Data.OracleClient

Page 5: Programação Orientada à Objetos Aula 15 -ADO.NET

Visão Geral do ADO.NET

O SqlClient é usado para acessar BDs SQL Server a partir da versão 7.0.

O OleDb para Access e SQL Server anterior a versão 7.0.

O OracleClient para BDs Oracle.

Podem ser acessador outros BDs a partir de outros namespaces, mas estes devem ser instalados separadamente.

Acesse os sites dos fabricantes para obter o namespace.

Page 6: Programação Orientada à Objetos Aula 15 -ADO.NET

Visão Geral do ADO.NET

A Oracle disponibiliza classes para acesso ao BD que tem performance superior as da Microsoft.

Page 7: Programação Orientada à Objetos Aula 15 -ADO.NET

Provedores de Dados

Quatro provedores são disponíveis para realizar o acesso a dados no ADO.NET SQLServer, Oracle, OLEDB e ODBC Provider

SQL-data

MS SQL Server, Oracle, Jet, Foxpro, ...

Non-SQL-data

Directory Services, Mail, Text, Video, ...

ADO.NETADO.NET

SQLServer

OracleODBC OLEDB

Page 8: Programação Orientada à Objetos Aula 15 -ADO.NET

Namespaces do ADO.NET System.Data

Classes genéricas de acesso a dados: DataSet, DataTable, DataRow, DataColumn, DataRelation, Constraint

System.Data.Common Classes compartilhadas pelos provedores de dados: DataAdapter,

DBCommand, DBConnection, DBTransaction

System.Data.SqlClient, System.Data.Oracle, System.Data.ODBC, System.Data.OleDB Namespaces dos provedores de dados

System.Data.SqlTypes Tipos de dados do Sql Server

Page 9: Programação Orientada à Objetos Aula 15 -ADO.NET

Arquitetura do ADO.NET

Database

Connection-oriented data flow

ADO.NET Managed Providers

DataAdapter

Connection

DataReader

Command

Transaction

ADO.NET Content Components

XML file

Connectionless data flow

DataSet

Tables

Relations

DataTable

ReadXmlWriteXml

DataTable DataRelation

Update

Fill

Page 10: Programação Orientada à Objetos Aula 15 -ADO.NET

Tipos de Acesso

Acesso orientado a conexão Mantém a conexão ativa com o banco de dados Os dados permanecem atualizados (up-to-date) Ideal para aplicações com pequenas transações e poucas operações

concorrentes

Acesso desconectado A conexão não fica ativa, é aberta e fechada Dados copiados para memória Alterações nos dados podem entrar em conflito na atualização e

requerem tratamento adicional Ideal para aplicações com transações demoradas e com muitas

operações em paralelo (web)

Page 11: Programação Orientada à Objetos Aula 15 -ADO.NET

Banco de Dados de Exemplo DER e Diagrama de Classes do banco de dados de

exemplo create table [Veiculo]( [ID] [int] NOT NULL, [Modelo] [varchar](50) NULL, [Ano] [int] NULL, [Preco] [float] NULL)

Page 12: Programação Orientada à Objetos Aula 15 -ADO.NET

Banco de Dados Exemplo

Insert create procedure spVeiculoInsert (@ID int, @Modelo varchar(50), @Ano int, @Preco float) as insert into Veiculo values(@ID, @Modelo, @Ano, @Preco)

Delete create procedure spVeiculoDelete (@ID int) as delete from Veiculo where ID = @ID

Update create procedure spVeiculoUpdate (@ID int, @Modelo varchar(50), @Ano int, @Preco float) as update Veiculo set Modelo = @Modelo, Ano = @Ano, Preco = @Preco where ID = @ID

Page 13: Programação Orientada à Objetos Aula 15 -ADO.NET

Acesso Orientado a Conexão

DbConnection Representa a conexão com o BD

DbCommand Representa um comando SQL

DbTransaction Representa uma transação

DataReader Resultado de um comando SQL

Permite o acesso seqüencial às linhas de uma tabela Database

ADO.NET Connected Model

.NET Application

DbConnection

Command

DataReader

DbCommand DbTransaction

Page 14: Programação Orientada à Objetos Aula 15 -ADO.NET

Conexões com o Banco de Dados

Descendentes de DbConnection são utilizados para realizar a conexão com o banco de dados OdbcConnection, OleDbConnection, OracleConnection,

SqlConnection

É necessário definir strings com os parâmetros de conexão de acordo com o banco de dados

string connectionStr = "Data Source=Server;Initial Catalog=Database;Integrated Security=True";

string connectionStr = "Data Source=Server;Initial Catalog=Database;User ID=sa;Password=senha";

Page 15: Programação Orientada à Objetos Aula 15 -ADO.NET

Conectando ao Servidor

Conexão com o SQL Server utilizando autenticação do próprio banco de dados

string connectionStr = "Data Source=Server;Initial Catalog=Database;User ID=sa;Password=senha";

SqlConnection conn = new SqlConnection(connectionStr);

conn.Open();

... Execução de comandos ...

conn.Close();

Page 16: Programação Orientada à Objetos Aula 15 -ADO.NET

Desconectando com Try-Finnaly É necessário garantir o fechamento da conexão

para liberar os recursos do banco de dados try { conn.Open(); ... } catch (Exception error) { ... } finally { conn.Close(); }

Page 17: Programação Orientada à Objetos Aula 15 -ADO.NET

Transações Transações garantem que um conjunto de alterações

em um banco de dados seja realizado de forma atômica

Descendentes de DbTransaction são usados para controlar as transações em um banco de dados O método Commit confirma a transação O método Rollback aborta a transação

Exemplo conn.Open(); SqlTransaction tx = conn.BeginTransaction(); tx.Commit(); conn.Close();

Page 18: Programação Orientada à Objetos Aula 15 -ADO.NET

Níveis de Isolamento

ReadCommited Dados escritos em uma transação somente são vistos por outras

transações após o commit

ReadUncommited Dados não “commitados” são vistos por outras transações

RepeatableRead Dados lidos em uma transação não podem ser alterados por outras

transações

Serializable Serializa o acesso aos dados no banco de dados

Page 19: Programação Orientada à Objetos Aula 15 -ADO.NET

Comandos

Descendentes de DbCommand são responsáveis pela execução de comandos em um banco de dados OdbcCommand, OleDbCommand, OracleCommand, SqlCommand

A propriedade CommandType do comando define o tipo de operação realizada Text – Permite definir um comando em linguagem SQL StoredProcedure – Permite executar um procedimento

armazenado no banco TableDirect – Permite acessar diretamente uma tabela

Page 20: Programação Orientada à Objetos Aula 15 -ADO.NET

Exemplos de Comandos Text

string select = "select * from Veiculo"; SqlConnection conn = new SqlConnection(connectionStr); conn.Open(); SqlCommand cmd = new SqlCommand(select, conn);

StoredProcedure SqlCommand cmd = new SqlCommand("spVeiculoInsert", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@ID", obj.Id);

TableDirect SqlCommand cmd = new SqlCommand("Veiculo", conn); cmd.CommandType = CommandType.TableDirect;

Page 21: Programação Orientada à Objetos Aula 15 -ADO.NET

Métodos de Execução Métodos utilizados na execução dos comandos

ExecuteNonQuery Utilizado em comandos que não retornam um resultado:

delete, insert, update Retorna um inteiro com o número de linhas afetadas

ExecuteReader Utilizado em comandos select que retornam um conjunto de

dados Retorna um objeto DataReader, utilizado para o acesso

seqüencial aos dados

ExecuteScalar Utilizado em comandos select que retornam um único valor

Page 22: Programação Orientada à Objetos Aula 15 -ADO.NET

Executando um StoredProcedure

Inserção com execução de procedimento armazenado SqlConnection conn = new SqlConnection(connectionStr); SqlCommand cmd = new SqlCommand("spVeiculoInsert", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@ID", obj.Id); cmd.Parameters.AddWithValue("@Modelo", obj.Modelo); cmd.Parameters.AddWithValue("@Ano", obj.Ano); cmd.Parameters.AddWithValue("@Preco", obj.Preço); conn.Open(); try { cmd.ExecuteNonQuery(); } finally { conn.Close(); }

Page 23: Programação Orientada à Objetos Aula 15 -ADO.NET

Lendo com DataReader

Seleção com comando SQL retornando um DataReader Types.Veiculos objs = new Types.Veiculos(); SqlConnection conn = new SqlConnection(connectionStr); SqlCommand cmd = new SqlCommand("select * from Veiculo", conn); conn.Open(); SqlDataReader datareader = cmd.ExecuteReader(...); try { while (datareader.Read()) { Types.Veiculo obj = new Types.Veiculo(); obj.Id = Convert.ToInt32(datareader[0]); ... objs.Add(obj); } } finally { datareader.Close(); }

Page 24: Programação Orientada à Objetos Aula 15 -ADO.NET

Acesso Desconectado

DbConnection

Representa a conexão com o BD

DbCommand

Representa um comando SQL

DataAdapter

Fill – Preenche o DataSet a partir do BD

Update – Atualiza o BD a partir do DataSet

DataSet

Armazena os dados do banco na memória

.Net Application

DataSet

DataAdapter

DbCommand

Database

DbConnection

Connection-less Model

Page 25: Programação Orientada à Objetos Aula 15 -ADO.NET

Preenchendo o DataSet

Usando o DataAdapter para preencher o DataSet SqlConnection conn = new SqlConnection(connectionStr); SqlCommand cmd = new SqlCommand("select * from

Veiculo", conn); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds, "Veiculo");

Mostrando o DataSet em um DataGridView dataGridView1.DataSource = ds; dataGridView1.DataMember = "Veiculo"; conn.Close();

Page 26: Programação Orientada à Objetos Aula 15 -ADO.NET

Atualizando o Banco de Dados Preparando o DataAdapter para atualizar o BD

SqlConnection conn = new SqlConnection(connectionStr); SqlCommand cmd = new SqlCommand("select * from

Veiculo", conn); SqlDataAdapter da = new SqlDataAdapter(cmd); SqlCommandBuilder cb = new SqlCommandBuilder(da);

Recuperando o DataSet da interface DataSet ds = (dataGridView1.DataSource as DataSet);

Atualizando o Banco de Dados da.Update(ds, "Veiculo"); conn.Close();