SlideShare uma empresa Scribd logo
C#
     ADO.NET
Leonardo Melo Santos
http://about.me/leonardomelosantos
Conteúdo programático
● Data Providers
  ○   SQL Server .NET Data Provider
  ○   OLEDB e ODBC
  ○   Oracle Data Provider
  ○   Objetos essenciais
● Executando comandos e consultas
  ○ XxxxDataReader, XxxxCommand, XxxxDataAdapter
  ○ Procedures
  ○ Transações
Data providers
● Camada intermediária que permite acesso
  ao banco. Código .NET utiliza provedores
  para manipular dados;
● Quatro diferentes implementados pela
  Microsoft:
  ○   SQL Server .NET Data Provider
  ○   OLEDB .NET Data Provider
  ○   ODBC .NET Data Provider
  ○   Oracle .NET Data Provider
● Diferentes implementados por terceiros.
  ○ MySQL, SQLite, etc.
SQL Server Data Provider
● Acesso a Banco de Dados SQL Server 7.0 ou
  superior
  ○ SQL Server 6.5 utiliza OLEDB
● Namespace System.Data.SqlClient
● Nativo, acesso direto a base
  ○ Maior performance de todos
Outros providers
● OLEDB .NET Data Provider
  ○ Acesso a bases de dados OLEDB
  ○ Access, Oracle...
  ○ System.Data.OleDb
● ODBC .NET Data Provider
  ○ Acesso a bases de dados ODBC
  ○ System.Data.Odbc
Objetos essenciais
● Os provedores de dados contém objetos essenciais
   para o ADO .NET
   ○ XxxxConnection
   ○ XxxxCommand
   ○ XxxxDataReader
   ○ XxxxDataAdapter

   SQL Server       Oracle              ODBC              OleDB

   SqlConnection    OracleConnection    ODBCConnection    OleDBConnection

   SqlCommand       OracleCommand       ODBCCommand       OleDBCommand

   SqlDataReader    OracleDataReader    ODBCDataReader    OleDBDataReader

   SqlDataAdapter   OracleDataAdapter   ODBCDataAdapter   OleDBDataAdapter
Classes XxxxConnection
● Forma de acesso a uma base de dados
● Utilizaremos SqlConnection
● Necessita saber qual a base e de que forma
  será o acesso
  ○ String de conexão
XxxxConnection - Propriedades
● ConnectionTimeout
  ○ Tempo de tentativa para conectar ao banco de
    dados caso não esteja respondendo
  ○ Igual ao que foi informado na string de conexão
● DataBase
  ○ Base de dados conectada
  ○ Igual ao que foi informado na string de conexão
● DataSource
  ○ Banco de dados conectado
  ○ Igual ao que foi informado na string de conexão
XxxxConnection - Propriedade State
● Define o estado atual da conexão Utiliza
  enumeração ConnectionState
● Pode ser:
  ○   Open
  ○   Closed
  ○   Fetching
  ○   Connecting
  ○   Broken
  ○   Executing
XxxxConnection - Métodos
● Open() abre a conexão com o banco
  ○ Segue o caminho definido pela string de conexão
  ○ Muda o estado da conexão para ConnectionState.
    Open
  ○ Pode lançar SqlException
● Close() fecha a conexão
  ○ Ideal de ser chamado no bloco finally de
    tratamento de erros
  ○ Conexão será fechada de qualquer forma
  ○ Chamar o método mesmo com a conexão já
    fechada não causa erro
Exercício
● Criar uma tentativa de conexão com banco
  de dados usando SqlConnection, e só fechar
  a conexão se a mesma estiver no estado
  aberta.
Executando comandos
        SQL
Executando comandos SQL
● Três tipos de comandos a serem executados
  no banco de dados:
  ○ Comandos que não fazem busca
  ○ Comandos que retornam um valor
  ○ Comandos que retornam coleção de valores
Classe XxxxCommand
● Caminho para execução de comandos no
  banco de dados
● Necessitam de uma conexão aberta para
  executar
● Propriedade Connection mantém referência
  ao objeto do tipo SqlConnection
● Criado de duas formas:
  ○ Construtor
  ○ Método CreateCommand() de uma conexão
XxxxCommand - Propriedades essenciais

● CommandText
  ○ Contém o texto SQL a ser enviado ao banco ou
    nome do stored procedure a ser executado
● Connection
  ○ Contém referência a um objeto SqlConnection que
    usará para acessar o banco
● CommandType
  ○ Tipo de execução de comando
  ○ Utiliza enumeração CommandType
  ○ Padrão é CommandType.Text (texto SQL)
Criando XxxxCommand
● Utilizando o construtor
SqlCommand cmd = new SqlCommand(“SELECT * FROM
Cliente”, conexao);

● Construtor vazio e propriedades
SqlCommand cmd = new SqlCommand();
cmd.CommandText = “SELECT * FROM Cliente”;
cmd.Connection = conexao; //previamente criada

● Usando o CreateCommand da conexão
SqlCommand cmd = conexao.CreateCommand();
cmd.CommandText = “SELECT * FROM Cliente”;
Comandos sem busca
● Usada para manutenção de dados
   ○ INSERT, UPDATE, DELETE
● Método ExecuteNonQuery()
   ○ Necessita de conexão aberta
   ○ Retorna quantidade de linhas afetadas

comando.CommandText =
"UPDATE Cliente SET nome='José da Silva' where idade=23";
conexao.Open();
int linhas = comando.ExecuteNonQuery();
if (linhas == 0) {
   throw new Exception("Cliente não encontrado!");
}
Comandos para retornar um valor
● Busca por apenas uma informação
● Retorna a primeira coluna do primeiro
  registro retornado
● Não retorna todo o registro, e sim um valor
● ExecuteScalar
  ○ Retorna object (conversão é necessária)
  ○ Conexão deve estar aberta
Comandos para retornar um valor
● Busca pode ser genérica (retorno só será o
  primeiro valor)
comando.CommandText = "SELECT * FROM Cliente";
conexao.Open();
// Primeira coluna do banco é string. Deve-se fazer
conversão // se o retorno for null, exceção será levantada
na conversão
string nome = (string) comando.ExecuteScalar();


● Busca pode ser específica
comando.CommandText =
"SELECT nome FROM Cliente where cpf=„05482542127‟";
Exercício
1. Executar um comando para realizar uma
   inserção numa tabela;
2. Executar um comando para retornar um
   valor escalar;
Retornando uma coleção de dados
Pode ser através de dois recursos:
● SqlDataReader
  ○ Read-only : não modifica os dados
  ○ Forward-only: segue a ordem crescente
● ExecuteReader
  ○ Cria uma instância do SqlDataReader
  ○ Leitor de dados para dados retornados pelo select
Lendo retorno de consulta com
DataReader
● Criado pelo método ExecuteReader
● Método Read() do SqlDataReader
  ○ Testa se há dados para ler, se houver retorna true,
    se não, false
  ○ Havendo dados, lê os próximos dados
● Recuperando as informações
  ○ Indexadas pela ordem ou pelo nome das colunas
     ■ nomeDataReader[“nomeColuna”]
     ■ nomeDataReader[numeroColuna]
Lendo retorno de consulta com
DataReader
SqlCommand cmd = new SqlCommand("SELECT *
FROM Customers", conexao);
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read()) {
    string nome = (string) dr["nome"];
    int idade = (int) dr["idade"];
    Console.WriteLine(nome);
}
Exercício
1. Consultar uma tabela do SQL Server e
   mostrar os campos no Console, usando o
   recurso SqlDataReader;
Consultando com XxxxDataAdapter
● Modo desconectado
● Alguns cenários de aplicações requerem
  acesso a dados offline
  ○ Não há possibilidade de conexão com a fonte de
    dados
  ○ É necessário economizar recursos
● Uma cópia dos dados é armazenada em
  memória
  ○ Manutenção é feita na memória
  ○ Buscas,Inserção, atualização, remoção
  ○ Dados retornam para a fonte de dados quando
    possível
DataSet
● Reside no Namespace System.Data
● Dados são armazenados em um DataSet
● Conjunto de dados que contém:
  ○   Tabelas (DataTable)
  ○   Linhas (DataRow)
  ○   Colunas (DataColumn)
  ○   Relacionamentos (DataRelation)
  ○   ...
● Pode conter várias tabelas
● Independente de base de dados
● Não sabe a origem dos dados
XxxxDataAdapter
● Adicionar dados programaticamente não é
  produtivo
● DataSet não sabe um caminho para buscar
  dados do Banco de Dados
  ○ Para isso seria necessária uma conexão
  ○ DataSet é independente de banco
● SqlDataAdapter
  ○ Ponte entre banco de dados e DataSet
  ○ Preenche os dados no DataSet
  ○ Recupera modificações no DataSet e atualiza banco
XxxxDataAdapter
● Possui quatro comandos SqlCommand
  ● SelectCommand: Utilizado para
    preencher os dados no DataSet através
    do método Fill
  ● InsertCommand: Inserção de dados
  ● UpdateCommand: Atualização de
    registros
  ● DeleteCommand: Exclusão de registros
Usando SqlDataAdapter
● Construtor recebe
  ○ Comando SQL a ser executado no SelectCommand
  ○ SqlConnection que será utilizada pelo
    SelectCommand


SqlDataAdapter dap = new SqlDataAdapter(
"SELECT * FROM Customers",conexao);
Usando SqlDataAdapter para DataSet
● Método Fill()
  ○ DataSet a ser preenchido
  ○ Nome da tabela que vai receber os valores (Caso
    um nome não seja indicado, a tabela Table será
    criada)
  ○ SelectCommand deve estar preenchido

DataSet ds = new DataSet();
SqlDataAdapter dap = new SqlDataAdapter(
       "SELECT * FROM Customers",conexao);
dap.Fill(ds);
Consultando os registros de um DataSet
DataSet meuDataSet = new DataSet();
SqlDataAdapter meuDataAdpater = new SqlDataAdapter(
                    "SELECT * FROM CLIENTES", minhaConexao);
meuDataAdpater.Fill(meuDataSet);
minhaConexao.Close(); // Fechando a conexão
if (meuDataSet.Tables[0].Rows.Count > 0) {
   for (int i = 0; i < meuDataSet.Tables[0].Rows.Count; i++)
{
       DataRow linhaAtual = meuDataSet.Tables[0].Rows[i];
       int idFilial = (int)linhaAtual["ID_IN_FILIAL_CIEE"];
       Console.WriteLine(" Filial "+ idFilial + " = " +
                         linhaAtual["DSC_VC_FILIAL_CIEE"] );
   }
} else {
   Console.WriteLine("Nenhum registro encontrado!");
}
Exercício
1. Consultar uma tabela do SQL Server e
   mostrar os campos no Console, usando o
   recurso SqlDataAdapter populando um
   DataSet;
Dúvidas

Mais conteúdo relacionado

PDF
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
PDF
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
PDF
Curso de OO com C# - Parte 02 - Introdução ao C#
PDF
Introducao ao C#
PPT
ASP.Net Módulo 2
PDF
Curso de introdução ao ruby
PPTX
Introdução a linguagem C# (CSharp)
PPTX
SFD - C# para a comunidade
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 02 - Introdução ao C#
Introducao ao C#
ASP.Net Módulo 2
Curso de introdução ao ruby
Introdução a linguagem C# (CSharp)
SFD - C# para a comunidade

Mais procurados (20)

ODP
Aula02 - Lógica de Programação
PPTX
Estruturas de dados com C++ e STL
ODP
Aula05 - Lógica de Programação
PDF
mod3-programação-estruturada
PDF
Javafx Introdução
PDF
Apostila de Introdução a POO com C#
PPTX
Geca - Encontro 0
PPTX
Python + algoritmo
PDF
Introdução à Linguagem Ruby
PDF
mod5-estruturas-dadosdinamicas
PDF
Programação orientada a objetos - IV
PDF
Minicurso javascript
PDF
Java orientação a objetos (variaveis de instancia e metodos)
PDF
Introdução a JavaScript
PPSX
Boas práticas de programação em C# .NET
PDF
JavaScript: agora é sério
PDF
mod4-estruturas-dadosestaticas-ordenacao
ODP
tmn - Introdução ao JavaScript
Aula02 - Lógica de Programação
Estruturas de dados com C++ e STL
Aula05 - Lógica de Programação
mod3-programação-estruturada
Javafx Introdução
Apostila de Introdução a POO com C#
Geca - Encontro 0
Python + algoritmo
Introdução à Linguagem Ruby
mod5-estruturas-dadosdinamicas
Programação orientada a objetos - IV
Minicurso javascript
Java orientação a objetos (variaveis de instancia e metodos)
Introdução a JavaScript
Boas práticas de programação em C# .NET
JavaScript: agora é sério
mod4-estruturas-dadosestaticas-ordenacao
tmn - Introdução ao JavaScript
Anúncio

Destaque (19)

PPT
How to create a Password Protected Page in Blogger
DOCX
Vida saludable
PPTX
Data science
PPTX
Presentacion tp2 historia
PPTX
Cristian angulo power
PDF
El potencial de la Economía Colaborativa en América Latina
PDF
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
PPTX
Maria camila trujillo
PPTX
briceño
PDF
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
PDF
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
PPTX
El poder y la salud
PDF
Posturi ocupate localitate arges 28.03.2016 edu.ro
PPT
DotNet Remoting - .NET framework
PDF
Lập Trình an toàn - Secure programming
PDF
02 - Apresentação de dados em XML com XSL e HTML
PDF
Primeira aula e dinâmica
PDF
02 - Introdução a Projetos parte 2 - v1.0
PPTX
When Cyber Security Meets Machine Learning
How to create a Password Protected Page in Blogger
Vida saludable
Data science
Presentacion tp2 historia
Cristian angulo power
El potencial de la Economía Colaborativa en América Latina
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Maria camila trujillo
briceño
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
El poder y la salud
Posturi ocupate localitate arges 28.03.2016 edu.ro
DotNet Remoting - .NET framework
Lập Trình an toàn - Secure programming
02 - Apresentação de dados em XML com XSL e HTML
Primeira aula e dinâmica
02 - Introdução a Projetos parte 2 - v1.0
When Cyber Security Meets Machine Learning
Anúncio

Semelhante a Curso de OO com C# - Parte 06 - ADO.NET (20)

PPSX
05 - Acesso e Manipulação de Dados através de Classes do ADO.NET
PPT
2006 - ADONET.ppt
PPTX
Acessando Dados com ADO .NET
PPTX
Ado.net.exmplos.praticos
PPTX
Express2012simples 130312140529-phpapp01
PPTX
Aula 10 banco de dados
PPTX
T-SQL na prática com SQL SERVER Express 2012
PDF
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
PPTX
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
PPTX
Programaçao C - Aula 2
PDF
LDP mod 14 - Acesso a bases de dados
PPTX
PDF
Apostila - Banco de Dados
PPTX
TOTVS LINHA RM TREINAMENTO SQL
PPTX
Aula 10 banco de dados
PDF
1 semestre-aula8-introducao-dd le-dml
05 - Acesso e Manipulação de Dados através de Classes do ADO.NET
2006 - ADONET.ppt
Acessando Dados com ADO .NET
Ado.net.exmplos.praticos
Express2012simples 130312140529-phpapp01
Aula 10 banco de dados
T-SQL na prática com SQL SERVER Express 2012
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Programaçao C - Aula 2
LDP mod 14 - Acesso a bases de dados
Apostila - Banco de Dados
TOTVS LINHA RM TREINAMENTO SQL
Aula 10 banco de dados
1 semestre-aula8-introducao-dd le-dml

Mais de Leonardo Melo Santos (16)

PDF
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
PDF
Curso de OO com C# - Parte 03 - Plataforma .NET
PDF
Curso de OO com C# - Parte 01 - Orientação a objetos
PPT
Scrum - Visão Geral
PPT
Desenvolvimento de aplicações Java™ para TV Digital
PPT
Web Services XML - .NET framework
PPT
Curso de J2ME - Parte 04 - Otimização
PPT
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
PPT
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
PPT
Curso de J2ME - Parte 01 - Conceitos básicos
PPT
Sistemas Workflow
PPT
Fundamentos de sistemas de informação
PPT
Conceitos básicos de programação orientada a objetos
PDF
Trabalho em equipe e ética no trabalho
PPT
Verificação e validação de software
PPTX
Marketing pessoal e as redes sociais
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 01 - Orientação a objetos
Scrum - Visão Geral
Desenvolvimento de aplicações Java™ para TV Digital
Web Services XML - .NET framework
Curso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 01 - Conceitos básicos
Sistemas Workflow
Fundamentos de sistemas de informação
Conceitos básicos de programação orientada a objetos
Trabalho em equipe e ética no trabalho
Verificação e validação de software
Marketing pessoal e as redes sociais

Último (19)

PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula 18 - Manipulacao De Arquivos python
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Apple Pippin Uma breve introdução. - David Glotz
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Processos na gestão de transportes, TM100 Col18
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
COBITxITIL-Entenda as diferença em uso governança TI
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Aula04-Academia Heri- Tecnologia Geral 2025
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Custos e liquidação no SAP Transportation Management, TM130 Col18

Curso de OO com C# - Parte 06 - ADO.NET

  • 1. C# ADO.NET Leonardo Melo Santos http://about.me/leonardomelosantos
  • 2. Conteúdo programático ● Data Providers ○ SQL Server .NET Data Provider ○ OLEDB e ODBC ○ Oracle Data Provider ○ Objetos essenciais ● Executando comandos e consultas ○ XxxxDataReader, XxxxCommand, XxxxDataAdapter ○ Procedures ○ Transações
  • 3. Data providers ● Camada intermediária que permite acesso ao banco. Código .NET utiliza provedores para manipular dados; ● Quatro diferentes implementados pela Microsoft: ○ SQL Server .NET Data Provider ○ OLEDB .NET Data Provider ○ ODBC .NET Data Provider ○ Oracle .NET Data Provider ● Diferentes implementados por terceiros. ○ MySQL, SQLite, etc.
  • 4. SQL Server Data Provider ● Acesso a Banco de Dados SQL Server 7.0 ou superior ○ SQL Server 6.5 utiliza OLEDB ● Namespace System.Data.SqlClient ● Nativo, acesso direto a base ○ Maior performance de todos
  • 5. Outros providers ● OLEDB .NET Data Provider ○ Acesso a bases de dados OLEDB ○ Access, Oracle... ○ System.Data.OleDb ● ODBC .NET Data Provider ○ Acesso a bases de dados ODBC ○ System.Data.Odbc
  • 6. Objetos essenciais ● Os provedores de dados contém objetos essenciais para o ADO .NET ○ XxxxConnection ○ XxxxCommand ○ XxxxDataReader ○ XxxxDataAdapter SQL Server Oracle ODBC OleDB SqlConnection OracleConnection ODBCConnection OleDBConnection SqlCommand OracleCommand ODBCCommand OleDBCommand SqlDataReader OracleDataReader ODBCDataReader OleDBDataReader SqlDataAdapter OracleDataAdapter ODBCDataAdapter OleDBDataAdapter
  • 7. Classes XxxxConnection ● Forma de acesso a uma base de dados ● Utilizaremos SqlConnection ● Necessita saber qual a base e de que forma será o acesso ○ String de conexão
  • 8. XxxxConnection - Propriedades ● ConnectionTimeout ○ Tempo de tentativa para conectar ao banco de dados caso não esteja respondendo ○ Igual ao que foi informado na string de conexão ● DataBase ○ Base de dados conectada ○ Igual ao que foi informado na string de conexão ● DataSource ○ Banco de dados conectado ○ Igual ao que foi informado na string de conexão
  • 9. XxxxConnection - Propriedade State ● Define o estado atual da conexão Utiliza enumeração ConnectionState ● Pode ser: ○ Open ○ Closed ○ Fetching ○ Connecting ○ Broken ○ Executing
  • 10. XxxxConnection - Métodos ● Open() abre a conexão com o banco ○ Segue o caminho definido pela string de conexão ○ Muda o estado da conexão para ConnectionState. Open ○ Pode lançar SqlException ● Close() fecha a conexão ○ Ideal de ser chamado no bloco finally de tratamento de erros ○ Conexão será fechada de qualquer forma ○ Chamar o método mesmo com a conexão já fechada não causa erro
  • 11. Exercício ● Criar uma tentativa de conexão com banco de dados usando SqlConnection, e só fechar a conexão se a mesma estiver no estado aberta.
  • 13. Executando comandos SQL ● Três tipos de comandos a serem executados no banco de dados: ○ Comandos que não fazem busca ○ Comandos que retornam um valor ○ Comandos que retornam coleção de valores
  • 14. Classe XxxxCommand ● Caminho para execução de comandos no banco de dados ● Necessitam de uma conexão aberta para executar ● Propriedade Connection mantém referência ao objeto do tipo SqlConnection ● Criado de duas formas: ○ Construtor ○ Método CreateCommand() de uma conexão
  • 15. XxxxCommand - Propriedades essenciais ● CommandText ○ Contém o texto SQL a ser enviado ao banco ou nome do stored procedure a ser executado ● Connection ○ Contém referência a um objeto SqlConnection que usará para acessar o banco ● CommandType ○ Tipo de execução de comando ○ Utiliza enumeração CommandType ○ Padrão é CommandType.Text (texto SQL)
  • 16. Criando XxxxCommand ● Utilizando o construtor SqlCommand cmd = new SqlCommand(“SELECT * FROM Cliente”, conexao); ● Construtor vazio e propriedades SqlCommand cmd = new SqlCommand(); cmd.CommandText = “SELECT * FROM Cliente”; cmd.Connection = conexao; //previamente criada ● Usando o CreateCommand da conexão SqlCommand cmd = conexao.CreateCommand(); cmd.CommandText = “SELECT * FROM Cliente”;
  • 17. Comandos sem busca ● Usada para manutenção de dados ○ INSERT, UPDATE, DELETE ● Método ExecuteNonQuery() ○ Necessita de conexão aberta ○ Retorna quantidade de linhas afetadas comando.CommandText = "UPDATE Cliente SET nome='José da Silva' where idade=23"; conexao.Open(); int linhas = comando.ExecuteNonQuery(); if (linhas == 0) { throw new Exception("Cliente não encontrado!"); }
  • 18. Comandos para retornar um valor ● Busca por apenas uma informação ● Retorna a primeira coluna do primeiro registro retornado ● Não retorna todo o registro, e sim um valor ● ExecuteScalar ○ Retorna object (conversão é necessária) ○ Conexão deve estar aberta
  • 19. Comandos para retornar um valor ● Busca pode ser genérica (retorno só será o primeiro valor) comando.CommandText = "SELECT * FROM Cliente"; conexao.Open(); // Primeira coluna do banco é string. Deve-se fazer conversão // se o retorno for null, exceção será levantada na conversão string nome = (string) comando.ExecuteScalar(); ● Busca pode ser específica comando.CommandText = "SELECT nome FROM Cliente where cpf=„05482542127‟";
  • 20. Exercício 1. Executar um comando para realizar uma inserção numa tabela; 2. Executar um comando para retornar um valor escalar;
  • 21. Retornando uma coleção de dados Pode ser através de dois recursos: ● SqlDataReader ○ Read-only : não modifica os dados ○ Forward-only: segue a ordem crescente ● ExecuteReader ○ Cria uma instância do SqlDataReader ○ Leitor de dados para dados retornados pelo select
  • 22. Lendo retorno de consulta com DataReader ● Criado pelo método ExecuteReader ● Método Read() do SqlDataReader ○ Testa se há dados para ler, se houver retorna true, se não, false ○ Havendo dados, lê os próximos dados ● Recuperando as informações ○ Indexadas pela ordem ou pelo nome das colunas ■ nomeDataReader[“nomeColuna”] ■ nomeDataReader[numeroColuna]
  • 23. Lendo retorno de consulta com DataReader SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", conexao); SqlDataReader dr = cmd.ExecuteReader(); while(dr.Read()) { string nome = (string) dr["nome"]; int idade = (int) dr["idade"]; Console.WriteLine(nome); }
  • 24. Exercício 1. Consultar uma tabela do SQL Server e mostrar os campos no Console, usando o recurso SqlDataReader;
  • 25. Consultando com XxxxDataAdapter ● Modo desconectado ● Alguns cenários de aplicações requerem acesso a dados offline ○ Não há possibilidade de conexão com a fonte de dados ○ É necessário economizar recursos ● Uma cópia dos dados é armazenada em memória ○ Manutenção é feita na memória ○ Buscas,Inserção, atualização, remoção ○ Dados retornam para a fonte de dados quando possível
  • 26. DataSet ● Reside no Namespace System.Data ● Dados são armazenados em um DataSet ● Conjunto de dados que contém: ○ Tabelas (DataTable) ○ Linhas (DataRow) ○ Colunas (DataColumn) ○ Relacionamentos (DataRelation) ○ ... ● Pode conter várias tabelas ● Independente de base de dados ● Não sabe a origem dos dados
  • 27. XxxxDataAdapter ● Adicionar dados programaticamente não é produtivo ● DataSet não sabe um caminho para buscar dados do Banco de Dados ○ Para isso seria necessária uma conexão ○ DataSet é independente de banco ● SqlDataAdapter ○ Ponte entre banco de dados e DataSet ○ Preenche os dados no DataSet ○ Recupera modificações no DataSet e atualiza banco
  • 28. XxxxDataAdapter ● Possui quatro comandos SqlCommand ● SelectCommand: Utilizado para preencher os dados no DataSet através do método Fill ● InsertCommand: Inserção de dados ● UpdateCommand: Atualização de registros ● DeleteCommand: Exclusão de registros
  • 29. Usando SqlDataAdapter ● Construtor recebe ○ Comando SQL a ser executado no SelectCommand ○ SqlConnection que será utilizada pelo SelectCommand SqlDataAdapter dap = new SqlDataAdapter( "SELECT * FROM Customers",conexao);
  • 30. Usando SqlDataAdapter para DataSet ● Método Fill() ○ DataSet a ser preenchido ○ Nome da tabela que vai receber os valores (Caso um nome não seja indicado, a tabela Table será criada) ○ SelectCommand deve estar preenchido DataSet ds = new DataSet(); SqlDataAdapter dap = new SqlDataAdapter( "SELECT * FROM Customers",conexao); dap.Fill(ds);
  • 31. Consultando os registros de um DataSet DataSet meuDataSet = new DataSet(); SqlDataAdapter meuDataAdpater = new SqlDataAdapter( "SELECT * FROM CLIENTES", minhaConexao); meuDataAdpater.Fill(meuDataSet); minhaConexao.Close(); // Fechando a conexão if (meuDataSet.Tables[0].Rows.Count > 0) { for (int i = 0; i < meuDataSet.Tables[0].Rows.Count; i++) { DataRow linhaAtual = meuDataSet.Tables[0].Rows[i]; int idFilial = (int)linhaAtual["ID_IN_FILIAL_CIEE"]; Console.WriteLine(" Filial "+ idFilial + " = " + linhaAtual["DSC_VC_FILIAL_CIEE"] ); } } else { Console.WriteLine("Nenhum registro encontrado!"); }
  • 32. Exercício 1. Consultar uma tabela do SQL Server e mostrar os campos no Console, usando o recurso SqlDataAdapter populando um DataSet;