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

1.922 visualizações

Publicada em

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

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.922
No SlideShare
0
A partir de incorporações
0
Número de incorporações
35
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

  1. 1. C# ADO.NETLeonardo Melo Santoshttp://about.me/leonardomelosantos
  2. 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. 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. 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. 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. 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. 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. 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. 9. XxxxConnection - Propriedade State● Define o estado atual da conexão Utiliza enumeração ConnectionState● Pode ser: ○ Open ○ Closed ○ Fetching ○ Connecting ○ Broken ○ Executing
  10. 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. 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.
  12. 12. Executando comandos SQL
  13. 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. 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. 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. 16. Criando XxxxCommand● Utilizando o construtorSqlCommand cmd = new SqlCommand(“SELECT * FROMCliente”, conexao);● Construtor vazio e propriedadesSqlCommand cmd = new SqlCommand();cmd.CommandText = “SELECT * FROM Cliente”;cmd.Connection = conexao; //previamente criada● Usando o CreateCommand da conexãoSqlCommand cmd = conexao.CreateCommand();cmd.CommandText = “SELECT * FROM Cliente”;
  17. 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 afetadascomando.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. 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. 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 fazerconversão // se o retorno for null, exceção será levantadana conversãostring nome = (string) comando.ExecuteScalar();● Busca pode ser específicacomando.CommandText ="SELECT nome FROM Cliente where cpf=„05482542127‟";
  20. 20. Exercício1. Executar um comando para realizar uma inserção numa tabela;2. Executar um comando para retornar um valor escalar;
  21. 21. Retornando uma coleção de dadosPode 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. 22. Lendo retorno de consulta comDataReader● 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. 23. Lendo retorno de consulta comDataReaderSqlCommand 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. 24. Exercício1. Consultar uma tabela do SQL Server e mostrar os campos no Console, usando o recurso SqlDataReader;
  25. 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. 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. 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. 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. 29. Usando SqlDataAdapter● Construtor recebe ○ Comando SQL a ser executado no SelectCommand ○ SqlConnection que será utilizada pelo SelectCommandSqlDataAdapter dap = new SqlDataAdapter("SELECT * FROM Customers",conexao);
  30. 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 preenchidoDataSet ds = new DataSet();SqlDataAdapter dap = new SqlDataAdapter( "SELECT * FROM Customers",conexao);dap.Fill(ds);
  31. 31. Consultando os registros de um DataSetDataSet meuDataSet = new DataSet();SqlDataAdapter meuDataAdpater = new SqlDataAdapter( "SELECT * FROM CLIENTES", minhaConexao);meuDataAdpater.Fill(meuDataSet);minhaConexao.Close(); // Fechando a conexãoif (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. 32. Exercício1. Consultar uma tabela do SQL Server e mostrar os campos no Console, usando o recurso SqlDataAdapter populando um DataSet;
  33. 33. Dúvidas

×