aula c# - banco de dados

44
1

Upload: wendel

Post on 17-Nov-2015

226 views

Category:

Documents


8 download

DESCRIPTION

Aula C# Banco de Dados

TRANSCRIPT

  • 1

  • 2

    Linguagem de Programao Comercial

    C# e ADO.NET

    Acesso a Banco de Dados

  • 3

    Aula 8

    Viso Geral

    SQL

    ADO.NET

    Arquitetura

    Classes

  • 4

    Viso Geral

    A maior parte das aplicaes necessitam manter dados Persistente As informaes so mantidas

    mesmo quando a aplicao que as utiliza/mantm termina

    Eficiente As informaes devem ser armazenadas e posteriormente recuperadas de forma rpida

    Para manter dados desta forma em geral so utilizados Bancos de Dados, controlados por ferramentas chamadas Sistemas Gerenciadores de Banco de Dados (SGBDs)

  • 5

    Viso Geral

    Tabelas Estruturas que compes o banco de dados formada por linhas e colunas Linhas (Tuplas) representam uma instncia da

    informao (registro) representada pela tabela

    Colunas representam os diversos atributos da informao representada pela tabela

    Chave a informao composta por um ou mais atributos (coluna) que garante a unicidade de um registro em uma tabela Primria a chave que define a unicidade de

    um registro em uma tabela

    Estrangeira o relacionamento de um ou mais campos de uma tabela com a chave primria de outra tabela

  • 6

    Viso Geral

    Relacionamento Indica a associao entre entidades distintas no banco. Um para Um (1:1) Relao unvoca entre as

    tabelas. Neste caso decide-se qual tabela ter uma chave estrangeira para a outra

    Um para muitos (1:N) Um registro associa-se a N outros. Neste caso a tabela do lado N possui uma chave estrangeira para a tabela onde existe 1 registro

    Muitos para muitos (M:N) Relao com multiplicidade de ambos os lados. implementada usando-se uma tabela auxiliar.

  • 7

    SQL

    Structured Query Language - Linguagem de Consultas Estruturada

    Linguagem para :

    Definir Dados (criar e manter tabelas)

    Manipular Dados (inserir, atualizar e remover registros)

    Consultar Dados (buscar dados na forma desejada)

    Definir o escopo de uma transao no banco

  • 8

    SQL - INSERT

    Permite inserir um novo registro na tabela desejada, com um conjunto de valores definidos para suas colunas (atributos).

    INSERT INTO () VALUES ()

    A lista de campos e de valores separada por vrgulas.

  • 9

    SQL - UPDATE

    Permite atualizar um ou mais dados de um registro j existente

    UPDATE

    SET =,

    =

    WHERE =

    A clusula WHERE permite limitar os registros que desejamos atualizar (filtro). Sem ela

    todas as linhas da tabela so atualizadas...

  • 10

    SQL - DELETE

    Permite remover um ou mais registros de uma tabela

    DELETE FROM

    WHERE =

    A clusula WHERE permite limitar os registros que desejamos remover (filtro).

    Sem ela todas as linhas da tabela so

    removidas...

  • 11

    SQL - SELECT

    Permite obter os dados de uma ou mais tabelas de forma conjunta

    SELECT

    FROM

    WHERE

    GROUP BY

    ORDER BY

  • 12

    SQL - SELECT

    Imagine a tabela abaixo (chamada TABELA_EXEMPLO):

    SELECT COLUNA1,COLUNA3 FROM TABELA_EXEMPLO

    Ser executarmos o comando acima teremos:

    COLUNA1 COLUNA2 COLUNA3 COLUNA4

    1 XXX AA 43

    5 YYY B 567

    9 ZZZZ CC 46

    COLUNA1 COLUNA3

    1 AA

    5 B

    9 CC

  • 13

    SQL - SELECT

    Quando colocamos mais de uma tabela na clusula FROM temos a combinao de todas as linhas das tabelas (produto cartesiano)

    Imaginemos as seguintes tabelas:

    MODELO_ID MODELO

    1 CELTA

    2 CIVIC

    3 PEUGEOT 206

    CARRO_ID REF_MODELO PLACA

    1 2 ABC 2346

    2 3 BTX 9965

    MODELO CARRO

  • 14

    SQL - SELECT

    Se executarmos o comando

    SELECT * FROM MODELO, CARRO

    Teremos:

    No utilizamos o relacionamento

    As informaes em cinza no fazem sentido.

    MODELO_ID MODELO CARRO_ID REF_MODELO PLACA

    1 CELTA 1 2 ABC 2346

    2 CIVIC 1 2 ABC 2346

    3 PEUGEOT 206 1 2 ABC 2346

    1 CELTA 2 3 BTX 9965

    2 CIVIC 2 3 BTX 9965

    3 PEUGEOT 206 2 3 BTX 9965

  • 15

    SQL - SELECT

    Podemos utilizar a clusula WHERE para filtrar as combinaes que nos interessam (s trazer as linhas que respeitam a condio)

    Por exemplo:

    SELECT *

    FROM MODELO,CARRO

    WHERE MODELO_ID = REF_MODELO

    Resultaria na tabela abaixo:

    Nosso comando SQL podia ser traduzido como: Quero todas as informaes sobre os carros e seus respectivos modelos.

    MODELO_ID MODELO CARRO_ID REF_MODELO PLACA

    2 CIVIC 1 2 ABC 2346

    3 PEUGEOT 206 2 3 BTX 9965

  • 16

    SQL - SELECT

    Podemos ter clusulas WHERE ainda mais complexas, compostas de vrias expresses unidas por AND (E) e OR (OU)

    Por exemplo:

    SELECT *

    FROM MODELO,CARRO

    WHERE MODELO_ID = REF_MODELO

    AND PLACA=BTX 9965

    Resultaria na tabela abaixo:

    Nosso comando SQL podia ser traduzido como: Quero todas as informaes do carro com placa BTX 9965 e de seu modelo.

    MODELO_ID MODELO CARRO_ID REF_MODELO PLACA

    3 PEUGEOT 206 2 3 BTX 9965

  • 17

    ADO.NET

    Arquitetura

  • 18

    ADO.NET

    um conjunto de classes que possibilitam a comunicao de aplicaes .NET com

    bancos de dados e outras formas de

    persistir dados (ex: XML)

    Pode trabalhar de duas formas:

    Conectada A cada comando executado no banco a aplicao se conecta ao banco e faz

    o que for necessrio

    Desconectada A aplicao se conecta ao banco, traz as informaes para memria e

    trabalha com elas assim. De tempos em

    tempos se conecta ao banco para atualizar as

    informaes neste.

  • 19

    Data Set

    ADO.NET

    Banco de

    Dados Connection Command Parameter

    Data

    Reader

    Data

    Adapter

  • 20

    Connection

    a classe que prov a conectividade com o banco de dados

    Pode ser de dois tipos:

    SqlConnection conexo com bancos SQL Server

    OleDbConnection conexo com outros bancos

    Mtodos importantes

    Open() conecta-se ao banco de dados

    Close() desconecta-se do banco de dados

    A Conexo pode tambm ser implicitamente aberta por um Data Adapter

  • 21

    Connection

    Para fazer a conexo com o banco o objeto connection recebe uma string com vrios parmetros relativos a conexo. Esta chamada de Connection String

    Esta string varia de banco para banco: SQL Server Provider=SQLNCLI;Server=myServerAddress;Datab

    ase=myDataBase;Uid=myUsername;Pwd=myPassword;

    Oracle Provider=msdaora;Data Source=MyOracleDB;User

    Id=myUsername;Password=myPassword;MySQL

    MySQL Provider=MySQLProv;Data Source=mydb;User

    Id=myUsername;Password=myPassword;

  • 22

    Command

    Esta classe representa um comando SQL

    Este comando se acopla a uma conexo para ser executado em um banco de

    dados

    Um comando pode ser criado de duas formas

    Utilizar o mtodo CreateCommand do objeto Connection

    Instanciar um novo comando (com new) e definir sua propriedade Connection como

    sendo a conexo que ser utilizada

  • 23

    Command

    Os comandos, assim como as conexes podem ser de dois tipos:

    SqlCommand Para bancos SQL Server

    OleDbCommand Para outros bancos

    O comando possui tambm uma propriedade CommandText que a

    string representando o comando SQL

    (Insert, Update, Delete, Select) que

    desejamos executar

  • 24

    Command Executando os comandos

    Existem diversos mtodos para executar diferentes comandos: ExecuteScalar() Retorna o valor da primeira

    coluna, da primeira linha retornada pela consulta. til para consultas (SELECTs) que retornam apenas um valor (Ex: SELECT COUNT(*) FROM CARRO)

    ExecuteNonQuery() Executa comandos SQL que no so consultas (INSERT, UPDATE,DELETE, CREATE), retornando o nmero de linhas afetadas pelo comando

    ExecuteDataReader() Executa uma consulta e traz como resultado um objeto DataReader que contm os dados retornados pela consulta.

  • 25

    DataReader

    Maneira mais simples de ler resultados de uma consulta ao banco

    Permite apenas a leitura seqencial (para frente) do resultado

    Propriedades: FieldCount - nmero de colunas da linha que

    est sendo processada

    IsClosed indica se o reader est aberto para leitura ou j foi fechado

    RecordsAffected Nmero de registros afetados pelo comando realizado

  • 26

    DataReader

    Mtodos:

    Read() Avana para a prxima linha do resultado obtido

    GetName(int i) Obtm o nome da i-sima coluna da linha em que estamos

    GetValue(int i) Obtm o valor da i-sima coluna da linha em que estamos

    IsDBNull(int i) Verifica se a i-sima coluna da linha atual est vazia no banco (null)

    Close() fecha (termina o uso) deste Reader

  • 27

    Parameter

    Muitas vezes queremos definir dinamicamente parte de nosso comando SQL

    Imagine o exemplo de obter os dados do carro pela placa:

    SELECT *

    FROM MODELO,CARRO

    WHERE MODELO_ID = REF_MODELO

    AND PLACA=BTX 9965

  • 28

    Parameter

    Se quisermos definir a placa a ser consultada partir de um campo

    de texto da interface poderiamos

    fazer algo como:

    command.CommandText = "SELECT * FROM MODELO,CARRO WHERE MODELO_ID =

    REF_MODELO AND PLACA= " +

    txbPlaca.Text + ";

  • 29

    Parameter

    Porm este tipo de abordagem possui problemas:

    Imagine um usurio mal intecionado

    Imagine que ele possua algum conhecimento de SQL

    Este usurio pode colocar um texto malicioso no campo txbPlaca (ex: algo

    como XXX; DELETE * FROM CARRO) que afete

    no s o valor, mas o comportamento da

    consulta

    Isto uma falha de segurana conhecida chamada SQL Injection (Incluso de SQL)

  • 30

    Parameter

    Para evitar este tipo de problema possvel definir parmetros nas consultas

    Os parmetros so substitudos por valores definidos de uma forma segura,

    sem alterar a estrutura da query ( o

    parmetro ocupar apenas a sua devida

    posio na query)

    A classe Parameter como as outras classes do ADO.NET existe em dois tipos:

    SqlParameter Parmetros para SQL Server

    OleDbParameter Para outros bancos

  • 31

    Parameter Como Utilizar

    comandoSQL.CommandText = "SELECT * FROM

    MODELO,CARRO WHERE MODELO_ID

    =REF_MODELO AND PLACA=@Placa";

    SqlParameter parametro = new SqlParameter();

    parametro.ParameterName=@Placa;

    parametro.Value = txbPlaca.Text;

    comandoSQL.Parameters.Add(parametro);

  • 32

    DataSet

    uma representao desconectada de parte de um ou mais bancos de dados

    Isto significa que aps obter os dados do banco o DataSet se desconecta deste e

    mantm os dados em memria

    (permitindo l-los ou alter-los)

    Em um momento posterior o DataSet se reconecta ao banco e atualiza este com

    os seus dados alterados.

  • 33

    DataSet Principais Componentes

  • 34

    DataSet

    Um DataSet precisa de uma maneira para traduzir as suas tabelas para o

    banco de dados e vice versa quando se

    conectam

    Esta responsabilidade cabe a um ou mais DataAdapters

  • 35

    DataAdapter

    uma ponte de ligao entre o DataSet e o banco de dados ou outra fonte de

    dados

    Possui referncias a conexo e a um grupo de comandos SQL que sero

    utilizados na obteno, atualizao,

    insero e remoo de dados do banco

    O Adapter pode receber no construtor a conexo que dever utilizar com o

    banco de dados.

  • 36

    DataAdapter

    Propriedades:

    SelectCommand, InsertCommand, DeleteCommand, UpdateCommand

    comandos que sero utilizados pelo Adapter

    Mtodos

    Fill(DataSet dataSet,String nomeTabela) preenche a tabela nomeTabela no data set

    usando a consulta definida em

    SelectCommand

    Update(DataSet dataSet,String nomeTabela) atualiza o banco de dados com os dados da

    tabela nomeTabela do data set

  • 37

    ADO.NET

    Alm do ADO.NET

  • 38

    Transaes

    Muitas vezes precisamos executar um conjunto de operaes relacionadas em um banco de dados

    Se algumas dessas operaes no forem efetuadas podemos ter informaes inconsistentes no final da

    execuo

    Um exemplo comum uma transferncia bancria onde sacamos de uma conta A uma quantia X e a

    depositamos na conta B. Ao terminar devemos ter

    na conta A seu valor X e na conta B seu valor +X

    Se uma destas operaes no for executada os valores finais no sero como esperados e temos

    um cenrio inconsistente com a operao

    realizada

  • 39

    Transaes

    Para evitar estes problemas existe o conceito de transao

    Uma transao define um escopo de execuo onde ou todas as operaes so executadas

    com sucesso ou, se ocorrer um erro em pelo

    menos um dos passos o sistema volta todas as

    operaes feitas para o seu estado anterior

    (rollback)

    Desta forma ou estamos em um estado consistente final (se todas as operaes foram

    feitas) ou no estado consistente inicial (onde

    nenhuma das operaes foi realizada)

  • 40

    Transaes

    A plataforma .Net disponibiliza uma classe TransactionScope para manter

    uma transao

    Utilizando-se de uma ferramenta do Windows (MSDTC Microsoft Distributed

    Transaction Coordinator Coordenador

    de Transaes Distribuidas) possvel

    inclusive manter o contexto de uma

    transao entre bancos distintos.

  • 41

    Transaes - Exemplo

    using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))

    {

    try

    {

    //Aqui vo as operaes que queremos fazer dentro da transao

    ...

    //Se chegou aqui podemos fechar a transao com sucesso

    //Estamos no estado consistente final

    scope.Complete();

    }

    catch (Exception ex)

    {

    //Ocorreu algum erro! Como no chegamos ao comando //scope.Complete() voltamos automaticamente ao estado //inicial

    }

    }

  • 42

    Mapeadores Objeto X Relacional

    Aplicaes C# e Java - Orientadas a Objetos

    Bancos de Dados Modelo Relacional

    Devido a esta diferena em geral precisamos mapear as entidades do

    banco para os objetos utilizados pelas

    nossas aplicaes e depois mapear estas

    de volta para o banco para atualiz-lo.

    Este um trabalho em geral repetitivo (a estrutura do cdigo muda muito pouco):

  • 43

    Mapeadores Objeto X Relacional

    Para facilitar este trabalho existem algumas bibliotecas (frameworks) que

    podem ser utilizadas em conjunto com a

    aplicao para fazer parte deste

    trabalho para ns.

    Os mais conhecidos so:

    Hibernate (Java) e NHibernate (.NET)

    IBatis (Java) e IBatis.NET (.NET)

  • 44

    LINQ

    Sigla para Language Integrated Query (Linguagem Integrada de Consulta)

    Surgiu na verso 3.5 da plataforma .NET. Suportado pelo Visual Studio 2008

    Possibilita utilizar uma linguagem prpria de consulta de dados(com alguma

    similaridade com SQL) que pode ser

    utilizada contra bancos de dados,

    arquivos XML e estruturas da linguagem,

    como Listas e Dicionrios...