SlideShare une entreprise Scribd logo
1  sur  33
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

Contenu connexe

Tendances

Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Andre Nascimento
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasdiogoa21
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IVGabriel Faustino
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascriptLucas Aquiles
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NETFabiano Roman Beraldi
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaodiogoa21
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 

Tendances (20)

Aula02 - Lógica de Programação
Aula02 - Lógica de ProgramaçãoAula02 - Lógica de Programação
Aula02 - Lógica de Programação
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Aula05 - Lógica de Programação
Aula05 - Lógica de ProgramaçãoAula05 - Lógica de Programação
Aula05 - Lógica de Programação
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Aula python
Aula pythonAula python
Aula python
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Geca - Encontro 0
Geca - Encontro 0Geca - Encontro 0
Geca - Encontro 0
 
Python + algoritmo
Python + algoritmoPython + algoritmo
Python + algoritmo
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicas
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascript
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Java5
Java5Java5
Java5
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NET
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 

En vedette

How to create a Password Protected Page in Blogger
How to create a Password Protected Page in BloggerHow to create a Password Protected Page in Blogger
How to create a Password Protected Page in BloggerBlogger Spice
 
Presentacion tp2 historia
Presentacion tp2 historiaPresentacion tp2 historia
Presentacion tp2 historiaBrenda Frank
 
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.roPosturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.rosparkss
 
Maria camila trujillo
Maria camila trujilloMaria camila trujillo
Maria camila trujilloKmi Trujillo
 
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015sparkss
 
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.roPosturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.rosparkss
 
Posturi ocupate localitate arges 28.03.2016 edu.ro
Posturi ocupate localitate arges 28.03.2016 edu.roPosturi ocupate localitate arges 28.03.2016 edu.ro
Posturi ocupate localitate arges 28.03.2016 edu.rosparkss
 
Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingbeatmaking
 
02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTMLCésar Augusto Pessôa
 
02 - Introdução a Projetos parte 2 - v1.0
02 - Introdução a Projetos parte 2 - v1.002 - Introdução a Projetos parte 2 - v1.0
02 - Introdução a Projetos parte 2 - v1.0César Augusto Pessôa
 
When Cyber Security Meets Machine Learning
When Cyber Security Meets Machine LearningWhen Cyber Security Meets Machine Learning
When Cyber Security Meets Machine LearningLior Rokach
 

En vedette (19)

How to create a Password Protected Page in Blogger
How to create a Password Protected Page in BloggerHow to create a Password Protected Page in Blogger
How to create a Password Protected Page in Blogger
 
Vida saludable
Vida saludableVida saludable
Vida saludable
 
Data science
Data scienceData science
Data science
 
Presentacion tp2 historia
Presentacion tp2 historiaPresentacion tp2 historia
Presentacion tp2 historia
 
Cristian angulo power
Cristian angulo powerCristian angulo power
Cristian angulo power
 
El potencial de la Economía Colaborativa en América Latina
El potencial de la Economía Colaborativa en América LatinaEl potencial de la Economía Colaborativa en América Latina
El potencial de la Economía Colaborativa en América Latina
 
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.roPosturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
 
Maria camila trujillo
Maria camila trujilloMaria camila trujillo
Maria camila trujillo
 
briceño
briceño briceño
briceño
 
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
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
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.roPosturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
 
El poder y la salud
El poder y la saludEl poder y la salud
El poder y la salud
 
Posturi ocupate localitate arges 28.03.2016 edu.ro
Posturi ocupate localitate arges 28.03.2016 edu.roPosturi ocupate localitate arges 28.03.2016 edu.ro
Posturi ocupate localitate arges 28.03.2016 edu.ro
 
DotNet Remoting - .NET framework
DotNet Remoting - .NET frameworkDotNet Remoting - .NET framework
DotNet Remoting - .NET framework
 
Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programming
 
02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML
 
Primeira aula e dinâmica
Primeira aula e dinâmicaPrimeira aula e dinâmica
Primeira aula e dinâmica
 
02 - Introdução a Projetos parte 2 - v1.0
02 - Introdução a Projetos parte 2 - v1.002 - Introdução a Projetos parte 2 - v1.0
02 - Introdução a Projetos parte 2 - v1.0
 
When Cyber Security Meets Machine Learning
When Cyber Security Meets Machine LearningWhen Cyber Security Meets Machine Learning
When Cyber Security Meets Machine Learning
 

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

Similaire à Curso de OO com C# - Parte 06 - ADO.NET (20)

Ado
AdoAdo
Ado
 
Python 04
Python 04Python 04
Python 04
 
Desenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosDesenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a Dados
 
2006 - ADONET.ppt
2006 - ADONET.ppt2006 - ADONET.ppt
2006 - ADONET.ppt
 
Aws glue
Aws glueAws glue
Aws glue
 
Desenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored ProcedureDesenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored Procedure
 
Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySql
 
Apostila Oracle
Apostila OracleApostila Oracle
Apostila Oracle
 
Java13
Java13Java13
Java13
 
Jdbc
JdbcJdbc
Jdbc
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Ado.net.exmplos.praticos
Ado.net.exmplos.praticosAdo.net.exmplos.praticos
Ado.net.exmplos.praticos
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumo
 
Bd sql (1)
Bd sql (1)Bd sql (1)
Bd sql (1)
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
05 - Acesso e Manipulação de Dados através de Classes do ADO.NET
05 - Acesso e Manipulação de Dados através de Classes do ADO.NET05 - Acesso e Manipulação de Dados através de Classes do ADO.NET
05 - Acesso e Manipulação de Dados através de Classes do ADO.NET
 
Java com banco my sql
Java com banco my sqlJava com banco my sql
Java com banco my sql
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 

Plus de Leonardo Melo Santos

Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Leonardo Melo Santos
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETLeonardo Melo Santos
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Desenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalDesenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalLeonardo Melo Santos
 
Curso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 04 - OtimizaçãoCurso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 04 - OtimizaçãoLeonardo Melo Santos
 
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesCurso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesLeonardo Melo Santos
 
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoCurso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoLeonardo Melo Santos
 
Curso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosCurso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosLeonardo Melo Santos
 
Fundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoFundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoLeonardo Melo Santos
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Trabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoTrabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoLeonardo Melo Santos
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de softwareLeonardo Melo Santos
 
Marketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisMarketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisLeonardo Melo Santos
 

Plus de Leonardo Melo Santos (16)

Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
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 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Scrum - Visão Geral
Scrum - Visão GeralScrum - Visão Geral
Scrum - Visão Geral
 
Desenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalDesenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV Digital
 
Web Services XML - .NET framework
Web Services XML - .NET frameworkWeb Services XML - .NET framework
Web Services XML - .NET framework
 
Curso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 04 - OtimizaçãoCurso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 04 - Otimização
 
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesCurso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
 
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoCurso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
 
Curso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosCurso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicos
 
Sistemas Workflow
Sistemas WorkflowSistemas Workflow
Sistemas Workflow
 
Fundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoFundamentos de sistemas de informação
Fundamentos de sistemas de informação
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Trabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoTrabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalho
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de software
 
Marketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisMarketing pessoal e as redes sociais
Marketing pessoal e as redes sociais
 

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;