244
TREINAMENTOS Desenvolvimento Web com ASP.NET MVC 4

Aspnet mvc

Embed Size (px)

Citation preview

  • 1. TRE INAME NTO SDesenvolvimento Web com ASP.NET MVC 4

2. Desenvolvimento Web com ASP .NET MVC 430 de agosto de 2013SumrioiSobre a K191Seguro Treinamento2Termo de Uso3Cursos412Banco de Dados 1.1 Sistemas Gerenciadores de Banco de Dados . 1.2 SQL Server . . . . . . . . . . . . . . . . . . . . 1.3 Bases de Dados (Databases) . . . . . . . . . . 1.4 Tabelas . . . . . . . . . . . . . . . . . . . . . . 1.5 CRUD . . . . . . . . . . . . . . . . . . . . . . . 1.6 Chaves Primria e Estrangeira . . . . . . . . . 1.7 Exerccios de Fixao . . . . . . . . . . . . . . ADO.NET 2.1 Driver . . . . . . . . . . . . . 2.2 ODBC . . . . . . . . . . . . . 2.3 ODBC Manager . . . . . . . 2.4 Criando uma conexo . . . . 2.5 Inserindo registros . . . . . . 2.6 Exerccios de Fixao . . . . 2.7 Exerccios Complementares 2.8 SQL Injection . . . . . . . . . 2.9 Exerccios de Fixao . . . . 2.10 Exerccios Complementares 2.11 Listando registros . . . . . . 2.12 Exerccios de Fixao . . . . 2.13 Exerccios Complementares 2.14 Connection Factory . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .www.facebook.com/k19treinamentos. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .1 1 2 2 4 6 9 10. . . . . . . . . . . . . .23 24 25 25 26 26 27 28 28 29 30 30 31 32 32 i 3. S UMRIOii2.15 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.16 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17 Desaos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3456ii33 35 35Entity Framework 3.1 Mltiplas sintaxes da linguagem SQL . . . . 3.2 Orientao a Objetos VS Modelo Relacional 3.3 Ferramentas ORM . . . . . . . . . . . . . . . 3.4 Instalando o Entity Framework . . . . . . . 3.5 Congurao . . . . . . . . . . . . . . . . . . 3.6 Convenes de Mapeamento . . . . . . . . 3.7 Exerccios de Fixao . . . . . . . . . . . . . 3.8 Data Annotations . . . . . . . . . . . . . . . 3.9 Exerccios de Fixao . . . . . . . . . . . . . 3.10 Gerenciamento de entidades . . . . . . . . 3.11 Exerccios de Fixao . . . . . . . . . . . . . 3.12 Repositrios . . . . . . . . . . . . . . . . . .. . . . . . . . . . . .37 37 37 38 39 40 41 47 50 55 55 57 59. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .Code First Migrations 4.1 Code First Migrations . . . . . . . . . . 4.2 Exerccios de Fixao . . . . . . . . . . 4.3 Acrescentando uma nova entidade . . 4.4 Exerccios de Fixao . . . . . . . . . . 4.5 Operaes do Code First Migrations . 4.6 Exerccios de Fixao . . . . . . . . . . 4.7 Migrao para uma verso especca . 4.8 Gerando Script SQL . . . . . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .61 61 67 71 73 74 75 77 78Viso Geral do ASP .NET MVC 5.1 Necessidades de uma aplicao web 5.2 ASP .NET MVC . . . . . . . . . . . . . 5.3 MVC e Front Controller . . . . . . . . 5.4 Visual Studio . . . . . . . . . . . . . . 5.5 Exemplo de uma Aplicao Web . . . 5.6 Exerccios de Fixao . . . . . . . . . 5.7 Integrao com Entity Framework . 5.8 Scaffold . . . . . . . . . . . . . . . . . 5.9 Exerccios de Fixao . . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .79 79 80 80 81 82 83 88 88 89Camada de Apresentao 6.1 Razor e ASPX . . . . . . . . . . . 6.2 Exerccios de Fixao . . . . . . 6.3 Exerccios Complementares . . 6.4 ViewBag e Strogly Typed Views 6.5 Exerccios de Fixao . . . . . . 6.6 HTML Helpers . . . . . . . . . . 6.7 Exerccios de Fixao . . . . . . 6.8 Layouts . . . . . . . . . . . . . . 6.9 Exerccios de Fixao . . . . . . 6.10 Partial views . . . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .93 93 95 96 97 99 102 111 115 118 124. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .www.k19.com.br 4. iiiS UMRIO6.11 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 789Camada de Controle 7.1 Actions . . . . . . . . 7.2 ActionResult . . . . . 7.3 Parmetros . . . . . . 7.4 Exerccios de Fixao 7.5 TempData . . . . . . . 7.6 Exerccios de Fixao 7.7 Rotas . . . . . . . . . . 7.8 Exerccios de Fixao. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .Validao 8.1 Controller . . . . . . . . . . . 8.2 View . . . . . . . . . . . . . . 8.3 Exerccios de Fixao . . . . 8.4 Anotaes . . . . . . . . . . . 8.5 Validao no lado do Cliente 8.6 Exerccios de Fixao . . . .. . . . . . . .. . . . . .Sesso 9.1 Identicando os navegadores 9.2 Sesses no ASP .NET MVC . . . 9.3 Session Mode . . . . . . . . . . 9.4 Exerccios de Fixao . . . . .10 Filtros 10.1 Tipos de Filtros . . . . 10.2 Filtro de Autorizao 10.3 Exerccios de Fixao 10.4 Filtro de Ao . . . . . 10.5 Exerccios de Fixao 10.6 Filtro de Resultado . . 10.7 Exerccios de Fixao 10.8 Filtro de Exceo . . . 10.9 Exerccios de Fixao. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .. . . . . .. . . .. . . . . . . . .. . . . . . . .129 129 130 131 132 135 136 137 139. . . . . .143 143 144 145 148 149 150. . . .153 153 153 154 155. . . . . . . . .161 161 162 164 170 171 174 176 176 17711 Tratamento de Erros 11.1 Try-Catch . . . . . . . 11.2 Custom Errors . . . . 11.3 Http Errors . . . . . . 11.4 Exerccios de Fixao. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .181 182 183 183 185A ASP.NET Web API A.1 REST . . . . . . . . . . A.2 Resources . . . . . . . A.3 URIs . . . . . . . . . . A.4 Operaes . . . . . . A.5 Media Type . . . . . . A.6 Exerccios de Fixao. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .189 189 190 190 190 192 192www.facebook.com/k19treinamentosiii 5. S UMRIOB Projeto B.1 Modelo . . . . . . . . . . . . . . . . . . . . . . . . B.2 Exerccios de Fixao . . . . . . . . . . . . . . . . B.3 Persistncia - Mapeamento . . . . . . . . . . . . B.4 Exerccios de Fixao . . . . . . . . . . . . . . . . B.5 Persistncia - Congurao . . . . . . . . . . . . B.6 Exerccios de Fixao . . . . . . . . . . . . . . . . B.7 Persistncia - Repositrios . . . . . . . . . . . . . B.8 Exerccios de Fixao . . . . . . . . . . . . . . . . B.9 Exerccios de Fixao . . . . . . . . . . . . . . . . B.10 Apresentao - Template . . . . . . . . . . . . . . B.11 Exerccios de Fixao . . . . . . . . . . . . . . . . B.12 Cadastrando e Listando Selees . . . . . . . . . B.13 Exerccios de Fixao . . . . . . . . . . . . . . . . B.14 Removendo Selees . . . . . . . . . . . . . . . . B.15 Exerccios de Fixao . . . . . . . . . . . . . . . . B.16 Cadastrando, Listando e Removendo Jogadores B.17 Exerccios de Fixao . . . . . . . . . . . . . . . . B.18 Removendo Jogadores . . . . . . . . . . . . . . . B.19 Exerccios de Fixao . . . . . . . . . . . . . . . . B.20 Membership e Autorizao . . . . . . . . . . . . . B.21 Exerccios de Fixao . . . . . . . . . . . . . . . . B.22 Exerccios de Fixao . . . . . . . . . . . . . . . . B.23 Exerccios de Fixao . . . . . . . . . . . . . . . . B.24 Controle de Erro . . . . . . . . . . . . . . . . . . . B.25 Exerccios de Fixao . . . . . . . . . . . . . . . . B.26 Enviando email . . . . . . . . . . . . . . . . . . . B.27 Exerccios de Fixao . . . . . . . . . . . . . . . .iv. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .C Respostasiv. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .197 197 197 198 198 199 199 199 199 201 202 202 205 205 208 208 210 210 214 214 216 216 224 225 226 226 227 227 231www.k19.com.br 6. 1S UMRIOSobre a K19 A K19 uma empresa especializada na capacitao de desenvolvedores de software. Sua equipe composta por prossionais formados em Cincia da Computao pela Universidade de So Paulo (USP) e que possuem vasta experincia em treinamento de prossionais para rea de TI. O principal objetivo da K19 oferecer treinamentos de mxima qualidade e relacionados s principais tecnologias utilizadas pelas empresas. Atravs desses treinamentos, seus alunos se tornam capacitados para atuar no mercado de trabalho. Visando a mxima qualidade, a K19 mantm as suas apostilas em constante renovao e melhoria, oferece instalaes fsicas apropriadas para o ensino e seus instrutores esto sempre atualizados didtica e tecnicamente.www.facebook.com/k19treinamentos1 7. S UMRIO2Seguro Treinamento Na K19 o aluno faz o curso quantas vezes quiser! Comprometida com o aprendizado e com a satisfao dos seus alunos, a K19 a nica que possui o Seguro Treinamento. Ao contratar um curso, o aluno poder refaz-lo quantas vezes desejar mediante a disponibilidade de vagas e pagamento da franquia do Seguro Treinamento. As vagas no preenchidas at um dia antes do incio de uma turma da K19 sero destinadas ao alunos que desejam utilizar o Seguro Treinamento. O valor da franquia para utilizar o Seguro Treinamento 10% do valor total do curso.2www.k19.com.br 8. 3S UMRIOTermo de Uso Termo de Uso Todo o contedo desta apostila propriedade da K19 Treinamentos. A apostila pode ser utilizada livremente para estudo pessoal . Alm disso, este material didtico pode ser utilizado como material de apoio em cursos de ensino superior desde que a instituio correspondente seja reconhecida pelo MEC (Ministrio da Educao) e que a K19 seja citada explicitamente como proprietria do material. proibida qualquer utilizao desse material que no se enquadre nas condies acima sem o prvio consentimento formal, por escrito, da K19 Treinamentos. O uso indevido est sujeito s medidas legais cabveis.www.facebook.com/k19treinamentos3 9. S UMRIO4S TO EN AM EIN TREINAMENTOS TR EIN AM EN TOTRSConhea os nossos cursos K01- Lgica de Programao K02 - Desenvolvimento Web com HTML, CSS e JavaScript K03 - SQL e Modelo Relacional K11 - Orientao a Objetos em Java K12 - Desenvolvimento Web com JSF2 e JPA2 K21 - Persistncia com JPA2 e Hibernate K22 - Desenvolvimento Web Avanado com JFS2, EJB3.1 e CDI K23 - Integrao de Sistemas com Webservices, JMS e EJB K41 - Desenvolvimento Mobile com Android K51 - Design Patterns em Java K52 - Desenvolvimento Web com Struts K31 - C# e Orientao a Objetos K32 - Desenvolvimento Web com ASP.NET MVCwww.k19.com.br/cursos4www.k19.com.br 10. CAPTULOB ANCO DE D ADOS1Em geral, as aplicaes necessitam armazenar dados de forma persistente para consult-los posteriormente. Por exemplo, a aplicao de uma livraria precisa armazenar os dados dos livros e dos autores de forma persistente. Suponha que esses dados sejam armazenados em arquivos do sistema operacional. Vrios fatores importantes nos levam a descartar tal opo. A seguir, apresentamos as principais diculdades a serem consideradas na persistncia de dados.Segurana: O acesso s informaes potencialmente condenciais deve ser controlado de forma que apenas usurios e sistemas autorizados possam manipul-las. Integridade: Restries relacionadas aos dados armazenados devem ser respeitadas para que as informaes estejam sempre consistentes. Consulta: O tempo gasto para realizar as consultas aos dados armazenados deve ser o menor possvel. Concorrncia: Em geral, diversos sistemas e usurios acessaro concorrentemente as informaes armazenadas. Apesar disso, a integridade dos dados deve ser preservada.Considerando todos esses aspectos, conclumos que um sistema complexo seria necessrio para persistir as informaes de uma aplicao de maneira adequada. Felizmente, tal tipo de sistema j existe e conhecido como Sistema Gerenciador de Banco de Dados (SGBD).Figura 1.1: Sistema Gerenciador de Banco de DadosSistemas Gerenciadores de Banco de Dados No mercado, h diversas opes de sistemas gerenciadores de banco de dados. Os mais populares so: Oracle Database SQL Server www.facebook.com/k19treinamentos1 11. B ANCO DE D ADOS2 MySQL Server PostgreSQLSQL Server Neste treinamento, utilizaremos o SQL Server Express, que mantido pela Microsoft. O SQL Server Express pode ser obtido a partir do site:http://www.microsoft.com/express/Database/.Microsoft SQL Server Management Studio Express Para interagir com o SQL Server Express, utilizaremos um cliente com interface grca chamado de Microsoft SQL Server Management Studio Express.Bases de Dados (Databases) Um sistema gerenciador de banco de dados capaz de gerenciar informaes de diversos sistemas ao mesmo tempo. Por exemplo, as informaes dos clientes de um banco, alm dos produtos de uma loja virtual ou dos livros de uma livraria. Suponha que os dados fossem mantidos sem nenhuma separao lgica. Implementar regras de segurana especcas seria extremamente complexo. Tais regras criam restries quanto ao contedo que pode ser acessado por cada usurio. Por exemplo, determinado usurio poderia ter permisso de acesso aos dados dos clientes do banco, mas no s informaes dos produtos da loja virtual, ou dos livros da livraria. Para obter uma organizao melhor, os dados so armazenados separadamente em um SGDB. Da surge o conceito de base de dados (database). Uma base de dados um agrupamento lgico das informaes de um determinado domnio.Criando uma base de dados no SQL Server Express Para criar uma base de dados no SQL Server Express, utilizamos o comando CREATE DATABASE. 2www.k19.com.br 12. 3B ANCO DE D ADOSwww.facebook.com/k19treinamentos3 13. B ANCO DE D ADOS4Repare que alm da base de dados livraria h outras bases. Essas bases foram criadas automaticamente pelo prprio SQL Server Express para teste ou para guardar algumas conguraes. Quando uma base de dados no mais necessria, ela pode ser removida atravs do comando DROP DATABASE.Tabelas Um servidor de banco de dados dividido em bases de dados com o intuito de separar as informaes de domnios diferentes. Nessa mesma linha de raciocnio, podemos dividir os dados de uma base a m de agrup-los segundo as suas correlaes. Essa separao feita atravs de tabelas. Por exemplo, no sistema de um banco, interessante separar o saldo e o limite de uma conta, do nome e CPF de um cliente. Ento, poderamos criar uma tabela para os dados relacionados s contas e outra para os dados relacionados aos clientes.nome Jos MariaCliente idade cpf 27 31875638735 32 30045667856numero 1 2Conta saldo 1000 2000limite 500 700Tabela 1.1: Tabelas para armazenar os dados relacionados aos clientes e s contasUma tabela formada por registros (linhas) e os registros so formados por campos (colunas). Por exemplo, considere uma tabela para armazenar as informaes dos clientes de um banco. Cada registro dessa tabela armazena em seus campos os dados de um determinado cliente.Criando tabelas no SQL Server Express As tabelas no SQL Server Express so criadas atravs do comando CREATE TABLE. Na criao de uma tabela necessrio denir quais so os nomes e os tipos das colunas.4www.k19.com.br 14. 5B ANCO DE D ADOSwww.facebook.com/k19treinamentos5 15. B ANCO DE D ADOS6No SQL Server os nomes das tabelas so precedidas pelo ID do usurio que possui a tabela. No caso do usurio sa, o ID dbo. Portanto o nome da tabela Livros ca dbo.Livros. Se uma tabela no for mais desejada ela pode ser removida atravs do comando DROP TABLE.CRUD As operaes bsicas para manipular os dados persistidos so: inserir, ler, alterar e remover. Essas operaes so realizadas atravs de uma linguagem de consulta denominada SQL (Structured Query Language). Essa linguagem oferece quatro comandos bsicos: INSERT, SELECT, UPDATE 6www.k19.com.br 16. 7B ANCO DE D ADOSe DELETE. Esses comandos so utilizados para inserir, ler, alterar e remover registros, respectivamente.www.facebook.com/k19treinamentos7 17. B ANCO DE D ADOS88www.k19.com.br 18. 9B ANCO DE D ADOSChaves Primria e Estrangeira Suponha que os livros da nossa livraria sejam classicados por editoras. As editoras possuem nome e telefone. Para armazenar esses dados, uma nova tabela deveria ser criada. Nesse momento, teramos duas tabelas (Livro e Editora). Constantemente, a aplicao da livraria dever descobrir qual a editora de um determinado livro ou quais so os livros de uma determinada editora. Para isso, os registros da tabela Editora devem estar relacionados aos da tabela Livro. Na tabela Livro, poderamos adicionar uma coluna para armazenar o nome da editora dos livros. Dessa forma, se algum quiser recuperar as informaes da editora de um determinado livro, deve www.facebook.com/k19treinamentos9 19. B ANCO DE D ADOS10consultar a tabela Livro para obter o nome da editora correspondente. Depois, com esse nome, deve consultar a tabela Editora para obter as informaes da editora. Porm, h um problema nessa abordagem. A tabela Editora aceita duas editoras com o mesmo nome. Dessa forma, eventualmente, no conseguiramos descobrir os dados corretos da editora de um determinado livro. Para resolver esse problema, deveramos criar uma restrio na tabela Editora que proba a insero de editoras com o mesmo nome. Para resolver esse problema no SQL Server Express, poderamos adicionar a propriedade UNIQUE no campo nome da tabela Editora. Porm, ainda teramos mais um problema. Na tabela Livro, poderamos adicionar registros vinculados a editoras inexistentes, pois no h nenhuma relao explcita entre as tabelas. Para solucionar esses problemas, devemos utilizar o conceito de chave primria e chave estrangeira. Toda tabela pode ter uma chave primria, que um conjunto de um ou mais campos que devem ser nicos para cada registro. Normalmente, um campo numrico escolhido para ser a chave primria de uma tabela, pois as consultas podem ser realizadas com melhor desempenho. Ento, poderamos adicionar um campo numrico na tabela Editora e torn-lo chave primria. Vamos chamar esse campo de id. Na tabela Livro, podemos adicionar um campo numrico chamado editora_id que deve ser utilizado para guardar o valor da chave primria da editora correspondente ao livro. Alm disso, o campo editora_id deve estar explicitamente vinculado com o campo id da tabela Editora. Para estabelecer esse vnculo, o campo editora_id da tabela Livro deve ser uma chave estrangeira associada chave primria da tabela Editora. Uma chave estrangeira um conjunto de uma ou mais colunas de uma tabela que possuem valores iguais aos da chave primria de outra tabela. Com a denio da chave estrangeira, um livro no pode ser inserido com o valor do campo editora_id invlido. Caso tentssemos fazer isso, obteramos uma mensagem de erro.Exerccios de FixaoAbra o Microsoft SQL Server Management Studio Express utilizando NOME_DA_MAQUINA SQLEXPRESS como Server Name, SQL Server Authentication como Authentication, sa como Login e sa como Password. 110www.k19.com.br 20. 112B ANCO DE D ADOSCaso exista uma base de dados chamada Livraria, remova-a conforme a gura abaixo:www.facebook.com/k19treinamentos11 21. B ANCO DE D ADOS12Crie uma nova base de dados chamada livraria, conforme mostrado na gura abaixo. Voc vai utilizar esta base nos exerccios seguintes. 312www.k19.com.br 22. 134B ANCO DE D ADOSCrie uma tabela chamada Editoras conforme as guras abaixo.www.facebook.com/k19treinamentos13 23. B ANCO DE D ADOS14Altere os campos para torn-los obrigatrios, NO permitindo que eles quem em branco NU LL.Alm disso o campo Id deve ser uma chave primria.14www.k19.com.br 24. 15B ANCO DE D ADOSO campo Id dever ser incrementado automaticamente. Dena ele com a propriedade Identity segundo a gura abaixo:5Crie uma tabela chamada Livros conforme as guras abaixo: www.facebook.com/k19treinamentos15 25. B ANCO DE D ADOS16Lembrando de NO marcar a opo ALLOW NULL. Alm disso o campo Id deve ser uma chave primria e automaticamente incrementada. Voc precisa tornar o campo EditoraId uma chave estrangeira. Clique com o boto direito sobre a coluna EditoraId e selecione a opo Relantioships..., conforme a gura abaixo: 16www.k19.com.br 26. 17B ANCO DE D ADOSDevemos acrescentar o relacionamento entre livro e editora. Clique em Add e posteriormente no boto direita na linha Tables and Columns Specication.Devemos informar qual a chave primria que a coluna EditoraId da tabela Livros faz referncia. www.facebook.com/k19treinamentos17 27. B ANCO DE D ADOS18Para isto, informe a tabela Editoras como Primary Key Table e indique a coluna Id como a chave primria referenciada. Selecione a coluna EditoraId como a coluna que ir fazer referncia a chave primria da tabela Editoras.6Adicione alguns registros na tabela Editoras. Veja exemplos na gura abaixo:Adicione alguns registros na tabela Livros. Veja exemplos na gura abaixo: 18www.k19.com.br 28. 19B ANCO DE D ADOSConsulte os registros da tabela Editoras, e em seguida consulte a tabela Livros. Veja exemplos logo abaixo: 7www.facebook.com/k19treinamentos19 29. B ANCO DE D ADOS8Altere alguns dos registros da tabela Livros. Veja o exemplo abaixo:920Altere alguns dos registros da tabela Editoras. Veja o exemplo abaixo:20www.k19.com.br 30. 2110B ANCO DE D ADOSRemova alguns registros da tabela Livros. Veja o exemplo abaixo:Remova alguns registros da tabela Editoras. Preste ateno para no remover uma editora que tenha algum livro relacionado j adicionado no banco. Veja o exemplo abaixo: 11www.facebook.com/k19treinamentos21 31. B ANCO DE D ADOS22Faa uma consulta para buscar todos os livros de uma determinada editora. Veja um exemplo na gura abaixo: 1222www.k19.com.br 32. CAPTULOADO.NET2No captulo anterior, aprendemos que utilizar bancos de dados uma tima alternativa para armazenar os dados de uma aplicao. Entretanto, voc deve ter percebido que as interfaces disponveis para interagir com o SQL Server Express no podem ser utilizadas por qualquer pessoa. Para utiliz-las, necessrio conhecer a linguagem SQL e os conceitos do modelo relacional. Em geral, as interfaces dos outros SGDBs exigem os mesmos conhecimentos.SELECT * FROM tbl_funcionarios WHERE nome LIKE %jonas%; INSERT INTO tbl_funcionarios (nome, codigo, salario) VALUES (Rafael, 1234, 1000);Figura 2.1: Usurios comuns no possuem conhecimento sobre SQL ou sobre o modelo relacionalPara resolver esse problema, podemos desenvolver aplicaes com interfaces que no exijam conhecimentos tcnicos de SQL ou do modelo relacional para serem utilizadas. Dessa forma, usurios comuns poderiam manipular as informaes do banco de dados atravs dessas aplicaes. Nessa abordagem, os usurios interagem com as aplicaes e as aplicaes interagem com os SGDBs.www.k19.com.brCadastro de Funcionrios Nome: Cdigo: Salrio:Figura 2.2: Usurios comuns devem utilizar interfaces simpleswww.facebook.com/k19treinamentos23 33. ADO.NET24Driver As aplicaes interagem com os SGDBs atravs de troca de mensagens. Os SGDBs denem o formato das mensagens. Para no sobrecarregar o canal de comunicao entre as aplicaes e os SGDBs, as mensagens trocadas devem ocupar o menor espao possvel. Geralmente, protocolos binrios so mais apropriados para reduzir o tamanho das mensagens e consequentemente diminuir a carga do canal de comunicao. Por isso, os SGDBs utilizam protocolos binrios.findrollbackgetReference persist begin getTransaction commit10110 111000 10010Figura 2.3: Diminuindo o tamanho das mensagens para no sobrecarregar o meio de comunicaoMensagens binrias so facilmente interpretadas por computadores. Por outro lado, so complexas para um ser humano compreender. Dessa forma, o trabalho dos desenvolvedores seria muito complexo, aumentando o custo para o desenvolvimento e manuteno das aplicaes.11 01 01 01 00 01 11 11 11 0 10 010 11 110 01 0 10 01 10 1 10 111 10 110 11 0 01 01 00 01 101 11 1 010 01011010111 0010110001 1010111101 0111011100 0101101001 1101011101 00101100111011010111 0010110001 1010111101 0111011100 0101101001 1101011101 0010110011Figura 2.4: Mensagens binrias so altamente complexas para os seres humanosPara resolver esse problema e facilitar o desenvolvimento das aplicaes, as empresas propriet24www.k19.com.br 34. 25ADO.NETrias dos SGDBs, normalmente, desenvolvem e distribuem drivers de conexo. Um driver de conexo atua como um intermedirio entre as aplicaes e os SGDBs. Os drivers de conexo so tradutores de comandos escritos em uma determinada linguagem de programao para comandos denidos de acordo com o protocolo de um SGDB. Utilizando um driver de conexo, os desenvolvedores das aplicaes no manipulam diretamente as mensagens binrias trocadas entre as aplicaes e os SGDBs.Mais Sobre Em alguns casos, o protocolo binrio de um determinado SGDB fechado. Consequentemente, a nica maneira de se comunicar com ele atravs de um driver de conexo oferecido pelo fabricante desse SGDB.ODBC Suponha que os proprietrios dos bancos de dados desenvolvessem os drivers de maneira totalmente independente. Consequentemente, cada driver teria sua prpria interface, ou seja, seu prprio conjunto de instrues. Dessa maneira, o desenvolvedor da aplicao precisa conhecer as instrues de cada um dos drivers dos respectivos bancos que ele for utilizar. Para facilitar o trabalho do desenvolvedor da aplicao, a Microsoft deniu uma especicao chamada ODBC (Open Database Connectivity) para padronizar a interface dos drivers de conexo. Assim, quando uma empresa proprietria de um banco de dados pretende desenvolver um driver, ela segue essa especicao com o intuito de populariz-lo. Os drivers de conexo que respeitam a especicao ODBC, ou seja, possuem um conjunto de comandos padronizados, so chamados de drivers de conexo ODBC.ODBC Manager Para que drivers ODBC possam ser instalados em uma mquina e as aplicaes consigam utiliz-los necessrio ter o ODBC Manager, que j vem instalado no Windows. O driver de conexo ODBC j est disponvel para utilizao, podemos consultar o ODBC Manager do Windows. O ODBC Manager pode ser executado atravs do item Ferramentas Administrativas do Painel de Controle. www.facebook.com/k19treinamentos25 35. ADO.NET26Criando uma conexo Com o driver de conexo ODBC instalado na mquina j possvel criar uma conexo com o banco de dados correspondente. O que necessrio para estabelecer uma conexo com o banco de dados? Escolher o driver de conexo; Denir a localizao do banco de dados; Informar o nome da base de dados; Ter um usurio e senha cadastrados no banco de dados. Todas essas informaes so denidas na chamada string de conexo. 1 string stringDeConexao = @ " driver ={ SQL Server }; 2 server = MARCELO - PCSQLEXPRESS ; database = livraria ; uid = sa ; pwd = sa ; " ; Cdigo C# 2.1: Denindo a string de conexoAps a denio da string de conexo, podemos utilizar a classe System.Data.Odbc.OdbcConnection do .NET Framework. Essa classe responsvel por criar conexes ODBC. 1 OdbcConnection conexao = new OdbcConnection ( stringDeConexao ) ; Cdigo C# 2.2: Criando uma conexo ODBCInserindo registros Estabelecida a conexo com o banco de dados, j podemos executar comandos. Por exemplo, possvel inserir registros nas tabelas. O primeiro passo para executar um comando deni-lo em linguagem SQL de acordo com a sintaxe do SGDB utilizado. 26www.k19.com.br 36. 27ADO.NET1 string textoDoComando = @ " INSERT INTO Editoras ( Nome , Email ) 2 VALUES ( Abril , abril@email . com ) ; " ;Mais Sobre O caractere @ antes de um valor literal do tipo string indica que os caracteres dentro da string no devem ser processados como caracteres especiais.Em seguida, devemos criar um objeto da classe System. Data.Odbc.OdbcCommand a partir do cdigo sql e da conexo previamente criados. O comando no executado quando os objetos dessa classe so instanciados. 1 OdbcCommand comando = new OdbcCommand ( textoDoComando , conexao ) ; Cdigo C# 2.4: Criando um comando ODBCPor m, o comando pode ser executado atravs do mtodo ExecuteNonQuery(). A conexo deve ser aberta antes de executar o comando. 1 conexao . Open () ; 2 comando . ExecuteNonQuery () ;Importante A mesma conexo pode ser reaproveitada para executar vrias operaes. Quando no houver mais operaes a serem executadas, devemos nalizar a conexo ODBC atravs do mtodo Close(). Finalizar as conexes ODBC que no so mais necessrias importante pois libera recursos no SGBD. 1 conexao . close () ; Cdigo C# 2.6: Finalizando uma conexo ODBCMais Sobre Em C#, para evitar que o uma conexo no seja fechada aps a sua utilizao, podemos aplicar um bloco using. 1 using ( OdbcConnection conexao = new OdbcConnection ( stringDeConexao ) ) 2 { 3 // utiliza a conexao 4 } Cdigo C# 2.7: Utilizando um bloco usingNo cdigo acima, quando o bloco using que est associado conexo ODBC terminar, automaticamente, essa conexo ser fechada.Exerccios de Fixao www.facebook.com/k19treinamentos27 37. ADO.NET28Crie um projeto do tipo Console Application no Microsoft Visual C# Express, chamado ODBC. 1Crie uma classe chamada InsereEditora no projeto ODBC para inserir registros na tabela Editoras. 21 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30using System . Data . Odbc ; namespace Odbc { class InsereEditora { static void Main ( string [] args ) { string stringDeConexao = @ " driver ={ SQL Server }; server = MARCELO - PCSQLEXPRESS ; database = livraria ; uid = sa ; pwd = sa ; " ; System . Console . Write ( " Digite o Nome da Editora : " ) ; string nome = System . Console . ReadLine () ; System . Console . Write ( " Digite o Email da Editora : " ) ; string email = System . Console . ReadLine () ; string textoInsereEditora = @ " INSERT INTO Editoras ( Nome , Email ) VALUES ( " + nome + @ " , " + email + @ " ) " ; using ( OdbcConnection conexao = new OdbcConnection ( stringDeConexao ) ) { OdbcCommand command = new OdbcCommand ( textoInsereEditora , conexao ) ; conexao . Open () ; command . ExecuteNonQuery () ; } } } } Cdigo C# 2.8: InsereEditora.csExerccios Complementares1Crie uma classe chamada InsereLivro no projeto ODBC para inserir registros na tabela Livros.SQL Injection A implementao da insero de registros feita anteriormente possui uma falha grave. Os dados obtidos do usurio atravs do teclado no so tratados antes de serem enviados para o SGDB. Esses dados podem conter caracteres especiais. Se esses caracteres no so tratados, o comportamento esperado da operao afetado. Eventualmente, registros no so inseridos como deveriam ou brechas de segurana podem se abrir. Por exemplo, considere a classe InsereEditora do exerccio de xao. Se o usurio digitar 28www.k19.com.br 38. 29ADO.NETOReilly e [email protected], o cdigo SQL gerado pela aplicao seria: 1 INSERT INTO Editoras ( nome , email ) VALUES ( O Reilly , oreilly@email . com )Observe que o caractere aspas simples aparece cinco vezes no cdigo SQL acima. O SGDB no saberia dizer onde de fato termina o nome da editora. Ao tentar executar esse cdigo, um erro de sintaxe lanado pelo SQL Server. Para resolver esse problema manualmente, devemos adicionar dois caracteres seguidos. 1 INSERT INTO Editoras ( nome , email ) VALUES ( O Reilly , oreilly@email . com )Os valores recebidos dos usurios devem ser analisados e os caracteres especiais contidos nesses valores devem ser tratados. Esse processo extremamente trabalhoso, pois o conjunto de caracteres especiais e a forma de trat-los diferente em cada SGDB. A responsabilidade do tratamento dos caracteres especiais contidos nos valores de entrada dos usurios pode ser repassada para os drivers ODBC. Dessa forma, o cdigo das aplicaes se torna independente das particularidades desse processo para cada SGDB.Mais Sobre O processo de tratamento dos caracteres especiais das entradas dos usurios denominado sanitize.1 2 3 4 5 6 7 8 9 10 11 12 13 14// pegando os dados da editora pelo teclado string nome = System . Console . ReadLine () ; string email = System . Console . ReadLine () ; // definindo a sentena SQL com parmetros string textoDoComando = @ " INSERT INTO Editoras ( Nome , Email ) VALUES (? , ?) ; " ; // criando um comando odbc OdbcCommand comando = new OdbcCommand ( textoDoComando , conexao ) ; // atribuindo valores aos parmetros comando . Parameters . AddWithValue ( " @Nome " , nome ) ; comando . Parameters . AddWithValue ( " @Email " , email ) ; Cdigo C# 2.12: Sanitizando as entradas dos usuriosObserve que a sentena SQL foi denida com parmetros atravs do caractere ?. Antes de executar o comando, necessrio atribuir valores aos parmetros. Isso feito com o mtodo AddWithValue(). Esse mtodo realiza a tarefa de sanitizar os valores enviados pelo usurio.Exerccios de FixaoTente causar um erro de SQL Injection ao inserir editoras com a classe InsereEditora. (Dica: tente entradas com aspas simples) 3www.facebook.com/k19treinamentos29 39. ADO.NET30Altere o cdigo da classe InsereEditora para eliminar o problema do SQL Injection. Observe o cdigo abaixo: 41 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33using System . Data . Odbc ; namespace Odbc { class InsereEditora { static void Main ( string [] args ) { string stringDeConexao = @ " driver ={ SQL Server }; server = MARCELO - PCSQLEXPRESS ; database = livraria ; uid = sa ; pwd = sa ; " ; System . Console . Write ( " Digite o Nome da Editora : " ) ; string nome = System . Console . ReadLine () ; System . Console . Write ( " Digite o Email da Editora : " ) ; string email = System . Console . ReadLine () ; string textoInsereEditora = @ " INSERT INTO Editoras ( Nome , Email ) VALUES (? ,?) " ; using ( OdbcConnection conexao = new OdbcConnection ( stringDeConexao ) ) { OdbcCommand command = new OdbcCommand ( textoInsereEditora , conexao ) ; command . Parameters . AddWithValue ( " @Nome " , nome ) ; command . Parameters . AddWithValue ( " @Email " , email ) ; conexao . Open () ; command . ExecuteNonQuery () ; } } } } Cdigo C# 2.13: InsereEditora.cs5Agora tente causar novamente o problema de SQL Injection ao inserir novas editoras.Exerccios ComplementaresProvoque um erro de SQL Injection na classe InsereLivro. (Dica: tente entradas com aspas simples.) 23Altere o cdigo para eliminar o problema do SQL Injection.4Agora tente causar novamente o problema de SQL Injection ao inserir novos livros.Listando registros Depois de inserir alguns registros, interessante consultar os dados das tabelas para conferir se a insero foi realizada com sucesso. 30www.k19.com.br 40. 31ADO.NETO processo para executar um comando de consulta parecido com o de insero. necessrio denir a sentena SQL e criar um objeto da classe OdbcCommand. 1 2 3 4 5// definindo a sentena SQL string textoDoComando = @ " SELECT * FROM Editoras ; " ; // criando um comando odbc OdbcCommand comando = new OdbcCommand ( textoDoComando , conexao ) ; Cdigo C# 2.15: Criando um comando de seleoA diferena que para executar um comando de consulta necessrio utilizar o mtodo ExecuteReader() ao invs do ExecuteNonQuery(). Esse mtodo devolve um objeto da classe System.Data.Odbc.OdbcDataReader. 1 OdbcDataReader resultado = comando . ExecuteReader () ; Cdigo C# 2.16: Executando um comando de consultaOs dados contidos no OdbcDataReader podem ser acessados atravs dos nomes das colunas. 1 string nome = resultado [ " Nome " ] as string ; 2 string email = resultado [ " Email " ] as string ; Cdigo C# 2.17: Recuperando os campos do primeiro registro do resultadoO cdigo acima mostra como os campos do primeiro registro do resultado da consulta so recuperados. Agora, para recuperar os outros registros necessrio avanar o OdbcDataReader atravs do mtodo Read(). 1 2 3 4 5 6 7string nome1 = resultado [ " nome " ] as string ; string email1 = resultado [ " email " ] as string ; resultado . Read () ; string nome2 = resultado [ " nome " ] as string ; string email2 = resultado [ " email " ] as string ; Cdigo C# 2.18: Recuperando os campos dos dois primeiros registros do resultadoO prprio mtodo Read() devolve um valor booleano para indicar se o reader conseguiu avanar para o prximo registro. Quando esse mtodo devolver false signica que no h mais registros para serem recuperados. 1 while ( resultado . Read () ) 2 { 3 string nome = resultado [ " nome " ] as string ; 4 string email = resultado [ " email " ] as string ; 5 } Cdigo C# 2.19: Recuperando os campos de todos os registros do resultadoExerccios de Fixaowww.facebook.com/k19treinamentos31 41. ADO.NET32Insira algumas editoras utilizando a classe InsereEditora que voc criou nos exerccios anteriores. 6Adicione uma nova classe ao projeto ODBC chamada ListaEditora. O objetivo listar as editoras que foram salvas no banco. Veja o cdigo dessa classe. 71 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29using System . Data . Odbc ; namespace Odbc { class ListaEditora { static void Main ( string [] args ) { string stringDeConexao = @ " driver ={ SQL Server }; server = MARCELO - PCSQLEXPRESS ; database = livraria ; uid = sa ; pwd = sa ; " ; using ( OdbcConnection conexao = new OdbcConnection ( stringDeConexao ) ) { string textoListaEditora = " SELECT * FROM Editoras " ; OdbcCommand command = new OdbcCommand ( textoListaEditora , conexao ) ; conexao . Open () ; OdbcDataReader resultado = command . ExecuteReader () ; while ( resultado . Read () ) { long ? id = resultado [ " Id " ] as long ?; string nome = resultado [ " Nome " ] as string ; string email = resultado [ " Email " ] as string ; System . Console . WriteLine ( " {0} : {1} - {2} n " ,id , nome , email ) ; } } } } } Cdigo C# 2.20: ListaEditora.csExerccios Complementares5Crie uma classe para listar os livros cadastrados na base de dados.Connection Factory Voc deve ter percebido que para cada ao executada no banco de dados, ns precisamos criar uma conexo. Isso gera um problema relacionado string de conexo car armazenada em diversos locais. Imagine que o driver do banco foi atualizado e mudamos a sua verso. Isso implicaria fazer diversas alteraes no cdigo em cada ocorrncia da string de conexo, tornando o cdigo mais suscetvel a erros e dicultando a sua manuteno. Para resolver esta situao, ns poderamos criar uma classe responsvel pela criao e distribuio de conexes, mantendo assim uma nica referncia para a string de conexo, e qualquer alterao no modo em que nos conectamos base de dados, s implica mudanas nesta classe. 32www.k19.com.br 42. 33ADO.NET1 static class ConnectionFactory 2 { 3 public static OdbcConnection CreateConnection () 4 { 5 string driver = @ " SQL Server " ; 6 string servidor = @ " MARCELO - PCSQLEXPRESS " ; 7 string baseDeDados = @ " livraria " ; 8 string usuario = @ " sa " ; 9 string senha = @ " sa " ; 10 11 StringBuilder connectionString = new StringBuilder () ; 12 connectionString . Append ( " driver = " ) ; 13 connectionString . Append ( driver ) ; 14 connectionString . Append ( " ; server = " ) ; 15 connectionString . Append ( servidor ) ; 16 connectionString . Append ( " ; database = " ) ; 17 connectionString . Append ( baseDeDados ) ; 18 connectionString . Append ( " ; uid = " ) ; 19 connectionString . Append ( usuario ) ; 20 connectionString . Append ( " ; pwd = " ) ; 21 connectionString . Append ( senha ) ; 22 23 return new OdbcConnection ( connectionString . ToString () ) ; 24 } 25 } Cdigo C# 2.22: ConnectionFactory.csAgora podemos obter uma nova conexo apenas chamando ConnectionFactory.CreateConnection(). O resto do sistema no precisa mais conhecer os detalhes sobre a conexo com o banco de dados, diminuindo o acoplamento da aplicao.Exerccios de Fixao81 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26Adicione uma nova classe chamada ConnectionFactory com seguinte cdigo: using System ; using System . Data . Odbc ; using System . Text ; namespace Odbc { static class ConnectionFactory { public static OdbcConnection CreateConnection () { string driver = @ " SQL Server " ; string servidor = @ " MARCELO - PCSQLEXPRESS " ; string baseDeDados = @ " livraria " ; string usuario = @ " sa " ; string senha = @ " sa " ; StringBuilder connectionString = new StringBuilder () ; connectionString . Append ( " driver = " ) ; connectionString . Append ( driver ) ; connectionString . Append ( " ; server = " ) ; connectionString . Append ( servidor ) ; connectionString . Append ( " ; database = " ) ; connectionString . Append ( baseDeDados ) ; connectionString . Append ( " ; uid = " ) ; connectionString . Append ( usuario ) ; connectionString . Append ( " ; pwd = " ) ;www.facebook.com/k19treinamentos33 43. ADO.NET3427 connectionString . Append ( senha ) ; 28 29 return new OdbcConnection ( connectionString . ToString () ) ; 30 } 31 } 32 } Cdigo C# 2.23: ConnectionFactory.csAltere as classes InsereEditora e ListaEditora para que elas utilizem a fbrica de conexo. Execute-as novamente. 91 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30using System . Data . Odbc ; namespace Odbc { class InsereEditora { static void Main ( string [] args ) { System . Console . Write ( " Digite o Nome da Editora : " ) ; string nome = System . Console . ReadLine () ; System . Console . Write ( " Digite o Email da Editora : " ) ; string email = System . Console . ReadLine () ; string textoInsereEditora = @ " INSERT INTO Editoras ( Nome , Email ) VALUES (? ,?) " ; using ( OdbcConnection conexao = ConnectionFactory . CreateConnection () ) { OdbcCommand command = new OdbcCommand ( textoInsereEditora , conexao ) ; command . Parameters . AddWithValue ( " @Nome " , nome ) ; command . Parameters . AddWithValue ( " @Email " , email ) ; conexao . Open () ; command . ExecuteNonQuery () ; } } } } Cdigo C# 2.24: InsereEditora.cs1 using System . Data . Odbc ; 2 3 namespace Odbc 4 { 5 class ListaEditora 6 { 7 static void Main ( string [] args ) 8 { 9 using ( OdbcConnection conexao = ConnectionFactory . CreateConnection () ) 10 { 11 string textoListaEditora = " SELECT * FROM Editoras " ; 12 OdbcCommand command = new OdbcCommand ( textoListaEditora , conexao ) ; 13 conexao . Open () ; 14 OdbcDataReader resultado = command . ExecuteReader () ; 15 16 while ( resultado . Read () ) 17 { 18 long ? id = resultado [ " Id " ] as long ?; 19 string nome = resultado [ " Nome " ] as string ; 20 string email = resultado [ " Email " ] as string ; 21 System . Console . WriteLine ( " {0} : {1} - {2} n " ,id , nome , email ) ;34www.k19.com.br 44. 35ADO.NET22 } 23 } 24 } 25 } 26 } Cdigo C# 2.25: ListaEditora.csExerccios Complementares6 Altere as classes InsereLivro e ListaLivro para que elas utilizem a fbrica de conexo. Executeas novamente.Desaos1Implemente um teste que remove uma editora pelo id.2Implemente um teste que altera os dados de uma editora pelo id.www.facebook.com/k19treinamentos35 45. ADO.NET3636www.k19.com.br 46. CAPTULOE NTITY F RAMEWORK3Mltiplas sintaxes da linguagem SQL No captulo anterior, utilizamos conexes ODBC para fazer uma aplicao C# interagir com os SGDBs. Nessa interao, as consultas so denidas com a linguagem SQL. A sintaxe dessa linguagem diferente em cada SGDB. Dessa forma, a complexidade do trabalho dos desenvolvedores aumenta. Para resolver esse problema, as consultas deveriam ser denidas atravs de um mecanismo independente da linguagem SQL.SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY autor ASC) AS rownumber, id, titulo, autor FROM livros ) WHERE rownumber Install - Package EntityFramework - Version 5.0.0Terminal 3.1: Package Manager ConsoleMais Sobre O Entity Framework tambm pode ser instalado atravs do Manage NuGet Packages. Basicamente, o Manage NuGet Packages a alternativa visual ao Package Manager Console.www.facebook.com/k19treinamentos39 49. E NTITY F RAMEWORK40Figura 3.5: Manage NuGet PackageFigura 3.6: Manage NuGet PackageCongurao O Entity Framework fortemente baseado no conceito de Conveno sobre Congurao. Dessa forma, nenhuma congurao necessria a no ser que seja necessrio alterar o comportamento padro. No comportamento padro do Entity Framework, as conexes com o banco de dados apontaro para . SQLEXPRESS, ou seja, para a instncia do SQL Express rodando na mesma mquina que a 40www.k19.com.br 50. 41E NTITY F RAMEWORKaplicao. Para alterar as conguraes de conexo com o banco de dados, podemos deni-las no arquivo de congurao da aplicao. Para aplicaes web, devemos alterar o arquivo Web.cong. Por outro lado, para aplicaes desktop, devemos alterar o arquivo App.cong. Veja o exemplo abaixo. 1