Vous êtes sur la page 1sur 77

Linguagem de Programao II

Contedo
Unidade 1: Introduo A PLATAFORMA .NET ............................................................. 5 Introduo ................................................................................................................. 5 Dificuldades encontradas no desenvolvimento de sistemas para Windows antes do .NET .......................................................................................................................... 7 A abordagem .NET.................................................................................................. 10 Unidade 2 A Arquitetura .NET..................................................................................... 11 CLR (Commom Language Runtime) ....................................................................... 11 CTS (Common Type System) ................................................................................. 11 CLS (Common Language Specification).................................................................. 12 BCL (Base Classe Library) ...................................................................................... 12 Unidade 3 Viso Geral do ASP .NET .......................................................................... 15 Interao Cliente Servidor ....................................................................................... 15 O que o ASP.NET ................................................................................................ 16 Componentes de uma aplicao ASP.NET ............................................................. 18 Modelo de Compilao e Execuo Dinmica......................................................... 19 Primeira Execuo............................................................................................... 19 Segunda Execuo.............................................................................................. 20 Precompilao ..................................................................................................... 20 ASP.NET AJAX ....................................................................................................... 20 Unidade 4 Criando uma Aplicao Web com o .NET .................................................. 21 O Visual Studio ....................................................................................................... 21 Principais Caractersticas do Visual Studio ............................................................. 21 Templates de Projetos ............................................................................................ 21 Solues e Projetos ................................................................................................ 21 Tela inicial do Visual Studio 2008 ............................................................................ 22 Criando uma Aplicao Web o Visual Studio........................................................... 22 Unidade 5 Criando um Formulrio ASP.NET .............................................................. 25 Adicionando um novo Web Form ASP.NET ............................................................ 25 Unidade 6 Adicionando Cdigo a um Formulrio ASP.NET ........................................ 32 Trabalhando com arquivos Code-Behind ................................................................ 32 Manipuladores de Eventos ...................................................................................... 32 Adicionando Cdigo a um Formulrio...................................................................... 32 Unidade 7 Depurando Aplicaes ASP.NET ............................................................... 37 2

Erros de Sintaxe (Syntax Errors) ............................................................................. 37 Erros em tempo de execuo (runtime)................................................................... 37 Erros de Semntica ................................................................................................. 37 A Classe Debug ...................................................................................................... 38 Habilitando a Depurao ......................................................................................... 38 Adicionando BreakPoints ........................................................................................ 38 Executando a Aplicao em Modo de Depurao ................................................... 39 Execuo Passo a Passo ........................................................................................ 39 Usando a Janela de Depurao .............................................................................. 40 Exibindo a Janela Window ...................................................................................... 40 Depurao Remota ................................................................................................. 40 Tracing .................................................................................................................... 40 Classe TraceContext ............................................................................................... 41 Habilitando o Tracing em uma Aplicao Web ........................................................ 42 Dados do Trace....................................................................................................... 42 Categorias do Trace ................................................................................................ 42 Unidade 8 Validando Entrada de Usurios ................................................................. 44 Controles de Validao ........................................................................................... 44 Caracteres para Expresses Regulares .................................................................. 45 Adicionando Controles de Validao a um Formulrio ............................................ 46 Unidade 9 Master Page e User Controls ..................................................................... 49 Caractersticas da Master Page .............................................................................. 49 Criando uma Master Page....................................................................................... 50 Content Page .......................................................................................................... 50 Caractersticas da Content Page ............................................................................. 50 Criando uma Content Page ..................................................................................... 52 User Controls .......................................................................................................... 53 Caractersticas de um User Control ......................................................................... 53 User Controls e seus Arquivos Associados Code-Behind........................................ 54 Vantagens dos User Controls .................................................................................. 54 Desvantagens dos User Controls ............................................................................ 54 Adicionando um User Control a um Web Form ....................................................... 55 Unidade 10 Acessando Dados com ADO ................................................................... 56 Camada Desconectada ........................................................................................... 56 Camada Conectada ................................................................................................ 56

ADO Object Model .................................................................................................. 56 Camada Desconectada ....................................................................................... 56 Camada Conectada ............................................................................................. 57 Contectando a um Banco de Dados ........................................................................ 58 Criando um Banco de Dados ............................................................................... 58 Criando um Formulrio de Insero de Dados ..................................................... 60 Criando uma Listagem de Dados ......................................................................... 62 Unidade 11 Lendo e Escrevendo Dados XML ............................................................ 65 Criando um Arquivo XML ........................................................................................ 66 Lendo um Arquivo XML ........................................................................................... 66 Unidade 12 Criando um Aplicativo ASP.NET AJAX .................................................... 68 Namespaces ........................................................................................................... 68 Controles ASP.NET AJAX ....................................................................................... 69 Utilizando ASP.NET AJAX ...................................................................................... 69 Unidade 13 Segurana em Aplicaes ASP.NET ....................................................... 72 Autenticao ........................................................................................................... 72 Autorizao ............................................................................................................. 72 Mtodos de Autenticao ASP.NET ........................................................................ 72 Autenticao Windows......................................................................................... 72 Autenticao Baseada em Formulrio ................................................................. 72 SQL Injection........................................................................................................... 75

Unidade 1: Introduo A PLATAFORMA .NET

Introduo
O .NET Framework um componente integral do Windows que oferece suporte criao e execuo da prxima gerao de aplicativos e Servios WEB XML. O .NET Framework foi criado para atender os seguintes objetivos: Fornecer um ambiente de programao orientada a objetos consistente, seja o cdigo objeto armazenado e executado localmente, seja ele executado localmente mas distribudo pela Internet ou seja ele executado remotamente; Fornecer um ambiente da execuo de cdigo que minimiza conflitos de implantao e versionamento de software, muito comum no modelo antigo de componentizao COM/COM+ (conhecido como DLL hell); Fornecer um ambiente da execuo que promova a execuo segura do cdigo, incluindo o cdigo criado por terceiros: desconhecidos ou semiconfiveis; Fornecer um ambiente de execuo que elimina os problemas de desempenho dos ambientes interpretados ou com scripts; Tornar a experincia do desenvolvedor consistente, atravs dos diversos tipos de aplicativos, como aplicativos baseados no Windows e aplicativos baseados na Web. O desenvolvedor pode usar qualquer uma linguagem suportadas pelo .NET para escrever os programas e notar muitas semelhanas ao escrever cdigo para dois ambientes bastante distintos como o desktop e o web, devido camada de abstrao provida pelo .NET; Criar todas as comunicaes nas indstrias padro, para garantir que cdigos baseados no .NET Framework possam se integrar a qualquer outro cdigo. O programador pode reutilizar facilmente cdigo j existente ainda que esteja em outra linguagem, sem que ele precise abrir mo da sua linguagem de preferncia (e.g. o programador pode escrever um programa em C# e utilizar componentes escritos em C#, VB para .NET sem problemas de integrao destes cdigos);

Um servio Web XML, ou simplesmente Web Service como o chamaremos de aqui em diante por simplicidade e coerncia com a linguagem da indstria de software, transcende ao que ns conhecemos como pginas dinmicas, as quais podem ser acessadas a partir de um browser. A idia central de um Web Service consiste em permitir que as aplicaes, sejam elas da Web ou Desktop, ou ainda middleware, se

comuniquem e troquem dados de forma simples e transparente, independente do sistema operacional ou da linguagem de programao.

Para tal fim, no preciso apenas uma plataforma para desenvolvimento Web como o ASP ou CGI, ou ento, um modelo de objetos (COM/COM+) para criar componentes de software reusveis. A idia de um Web Service oferecer uma soluo uniforme, independente do cliente que estiver solicitando um servio qualquer: uma pgina dinmica (ASP, CGI, JSP), um cliente gordo no desktop, ou simplesmente um programa qualquer de terceiros que requeira o servio, um celular, um handheld, no importa. O que interessa que todos os clientes possam usufruir do mesmo servio. Vamos tentar entender o que descrevemos aqui atravs da Figura 1.1.

Por tudo exposto acima, uma plataforma de desenvolvimento completa, que envolve linguagens de programao, compiladores, modelo de objetos etc., se torna necessria para que se consiga englobar de uma forma completamente integrada todos esses requisitos. E essa a proposta de .NET. A linguagem C# (pronuncia-se C Sharp) faz parte desse conjunto de ferramentas oferecidas na plataforma .NET e surge como uma linguagem simples, robusta, orientada a objetos, fortemente tipada e altamente escalvel a fim de permitir que uma mesma aplicao possa ser executada em diversos dispositivos de hardware, independentemente destes serem PCs, handhelds ou qualquer outro dispositivo mvel. Alm do mais, a linguagem C# tambm tem como objetivo permitir o desenvolvimento de qualquer tipo de aplicao: Web service, aplicao Windows convencional, aplicaes para serem executadas num palmtop ou handheld, aplicaes para Internet etc.

Junto linguagem C# encontramos outras linguagens paralelas da prpria Microsoft e que tm tambm a finalidade de dar suporte ao desenvolvimento de sistemas para a plataforma .NET; dentre elas podemos citar: VB e C++.

Neste mdulo, apresentaremos a arquitetura da plataforma .NET a fim de que possa entender onde C# se encaixa nesta plataforma e por que, a despeito da existncia de outras linguagens, inclusive aquelas que tambm do suporte a .NET, C# to importante.

Dificuldades encontradas no desenvolvimento de sistemas para Windows antes do .NET


Algumas das dificuldades encontradas no desenvolvimento de sistemas Windows antes do .NET so:

Complexidade associada a linguagens de programao de difcil sintaxe, e ainda as dores de cabea provocadas pelo gerenciamento da memria heap por parte do programador. Pouca integrao e reaproveitamento de cdigo entre linguagens de programao diferentes; ausncia de implementao de mecanismo de herana entre linguagens diferentes. Diversidade com pouca integrao na resoluo de problemas complexos, dificultando a compreenso e o desenvolvimento dos sistemas. Falta de portabilidade de cdigo executvel entre plataformas diferentes.

Vejamos a evoluo histrica das ferramentas da Microsoft:

Apenas para ilustrar um pouco a situao atual, vamos apresentar um pequeno estudo de caso. Para simplificar o nosso problema, vamos considerar apenas as solues Microsoft. Imaginemos uma situao hipottica na qual solicitada uma soluo de home banking que aceite requisies de um browser da Internet ou qualquer outro dispositivo como handheld, telefone celular etc.; vejamos qual seria a resposta imediata dos recursos de software que eu iria precisar:

1. Uma linguagem de programao para desenvolver as pginas dinmicas: de cara, VBScript ou JScript. 2. Precisamos desenvolver alguns objetos COM ou COM+ no servidor, mas por questes de performance e poder de linguagem, escolhemos a linguagem C++, e claro, o compilador C++ do MS Visual Studio. 3. Vamos precisar de alguns componentes para executar no MS Queue server ou ento no MS transaction server, e escolhemos a linguagem Visual Basic porque temos pessoal que j fez esse tipo de trabalho usando VB. 4. Bem, vamos falar o bvio, mas precisamos tambm de Web designers com domnio de HTML, Flash, ferramentas de editorao grfica etc. 5. Ainda temos um problema para resolver, que o fato de termos clientes heterogneos que no conseguem ler um formato padro como uma Web page em HTML.

Ok, agora o momento de correr atrs do pessoal com todas essas competncias, tentar gerenciar essa salada de tecnologias e linguagens de programao e, de quebra, fazer funcionar tudo direitinho.

E esta era uma situao bem comum no desenvolvimento de software at pouco tempo atrs: ter de costurar uma srie de linguagens + ferramentas + tecnologias + modelos de objetos + linguagens de script vs. linguagens de programao completas + linguagens de marcao.

Usando o .NET podemos proporcionar uma soluo alternativa, de menor complexidade de implementao, mais integrada: 1. Uma linguagem de programao para desenvolver as pginas dinmicas no servidor Web: C# usando o Visual Studio. 2. Uma linguagem de programao para desenvolver objetos reusveis, armazenados em uma DLL no servidor: C# usando o Visual Studio. 3. Uma linguagem de marcao malevel o suficiente de sorte que permita mostrar o contedo em diversos dispositivos: XML, gerado pelo C# ou pr-montado para alguns casos. 4. Todo o trabalho de formatao e transformao dos documentos XML gerados pela soluo de homebank ser feito usando XSL para gerar a linguagem de marcao suportada no lado cliente. Ah! Com que linguagem vamos fazer estas transformaes? Com C# claro!

Mas os nossos desenvolvedores tm um background muito forte em VB, de forma que ns descartamos o C# como alternativa. No tem problema, tudo o que foi dito acima continua vlido, vamos mudar apenas a linguagem de C# para VB. A plataforma .NET permite que usemos a linguagem de programao da qual mais temos domnio e mesmo assim continuamos a usufruir todo o seu potencial.

O exemplo anterior foi apenas para ilustrar o contexto atual de desenvolvimento de sistemas complexos, onde temos de realmente fazer uma ginstica muito grande integrar todas as partes constituintes da nossa soluo. A boa notcia que, como mostramos no exemplo, com .NET esta situao est, digamos assim, findando esse problema, porque, como voc pode ter percebido, a sua soluo caiu de trs linguagens de programao para apenas uma, e o resto das tecnologias que usamos (COM+, por exemplo) se integra perfeitamente com o restante da soluo. Apenas falando no quesito da clareza e reutilizao de cdigo, algumas bibliotecas de classes, como MFC (Microsoft Foundation Class), surgem nesse nterim, mas tm como foco a linguagem C/C++ e no podem ser usadas a partir do Power Builder, por 9

exemplo, ou ento Delphi, que tem a sua prpria biblioteca de componentes reutilizveis. O que equivale a dizer que essas bibliotecas no podem ser usadas a partir de qualquer linguagem de programao, o que torna o reaproveitamento de cdigo ainda mais difcil.

Mesmo tecnologias como COM e CORBA sempre apresentam os mesmos problemas de dificuldade de aprendizado por causa de sua complexidade; ou ento, mesmo quando oferecem um modelo de objetos comum a ser usado por outras linguagens que no VB ou C++,acabam esbarrando no fato de que cada linguagem de programao implementa os tipos de uma forma diferente. E finalmente, quando achamos que conseguimos resolver os problemas dos tipos, somos barrados porque no conseguimos programar relaes de herana entre linguagens diferentes.

Paralelamente s iniciativas da Microsoft, em 1995 surge a linguagem JAVA (na verdade, mais que uma linguagem, uma plataforma de desenvolvimento) e, apesar de oferecer h mais de dez anos a proposta de portabilidade de cdigo executvel, (leia-se, compile uma vez e rode em qualquer plataforma), JAVA-cntrica, o que obriga o programador a aprender uma nova linguagem se realmente quiser usufruir os recursos que ela oferece. Mas voc pode perguntar: e .NET no nos obriga a aprender C#? A resposta no e saberemos mais adiante como isso feito.

A abordagem .NET
Citaremos a seguir algumas das caractersticas de .NET que visam a resolver os problemas citados acima: Independncia de linguagem de programao: o que permite a implementao do mecanismo de herana, controle de excees e depurao entre linguagens de programao diferentes. Reutilizao de cdigo legado: o que implica em reaproveitamento de cdigo escrito usando outras tecnologias como COM, COM+,ATL, DLLs e outras bibliotecas existentes. Tempo de execuo compartilhado: o runtime de .NET compartilhado entre as diversas linguagens que a suportam, o que quer dizer que no existe um runtime diferente para cada linguagem que implementa .NET. Sistemas auto-explicativos e controle de verses: cada pea de cdigo .NET contm em si mesma a informao necessria e suficiente de forma que o runtime no precise procurar no registro do Windows mais informaes sobre o programa que est sendo executado. O runtime encontra essas informaes no prprio sistema em questo e sabe qual a verso a ser executada, sem acusar aqueles velhos conflitos de incompatibilidade ao registrar DLLs no Windows. Simplicidade na resoluo de problemas complexos.

10

Unidade 2 A Arquitetura .NET

Para melhor entendermos tudo o que temos dito at aqui, vamos falar um pouco da arquitetura de .NET e os seus principais componentes.

CLR (Commom Language Runtime)


O CLR, ou tempo de execuo compartilhado, o ambiente de execuo das aplicaes .NET. Como o leitor j deve ter atentado, as aplicaes .NET no so aplicaes Win32 propriamente ditas (apesar de executarem no ambiente Windows),razo pela qual o runtime Win32 no sabe como execut-las. O Win32, ao identificar uma aplicao .NET, dispara o runtime .NET que, a partir desse momento, assume o controle da aplicao no sentido mais amplo da palavra, porque, dentre outras coisas, ele quem vai cuidar do gerenciamento da memria via um mecanismo de gerenciamento de memria chamado Garbage Collector (GC) ou coletor de lixo, acerca do qual falaremos mais tarde. Esse gerenciamento da memria torna os programas menos susceptveis a erros. Mais ainda, o CLR como seu prprio nome o diz, compartilhado e, portanto, no temos um runtime para VB.NET, outro para C# etc. o mesmo para todo mundo.

CTS (Common Type System)


O CTS, ou Sistema Comum de Tipos, que tambm faz parte do CLR, define os tipos suportados por .NET e as suas caractersticas. Cada linguagem que suporta .NET tem de, necessariamente, suportar esses tipos. Apesar de que a especificao no demanda que todos os tipos definidos no CTS sejam suportados pela linguagem, esses tipos podem ser um subconjunto do CTS, ou ainda um superconjunto. No mdulo dois falaremos mais a respeito dos diferentes tipos especificados no CTS. Um conjunto de classes bsicas que define todos os tipos implementado na CTS. Por exemplo: um tipo Enum deve derivar da classe System. Enum e todas as linguagens devem implementar o tipo Enum dessa forma. Todo tipo deriva da classe Object, porque em .NET tudo um objeto e, portanto, todos os tipos devem ter como raiz essa classe. E dessa forma que os diversos tipos nas diversas linguagens so implementados, obedecendo s regras definidas no CTS. Na .NET, e em C# conseqentemente, todos os tipos derivam de uma raiz comum: a classe Object, o que equivale a dizer que todos os tipos so objetos, por definio. 11

CLS (Common Language Specification)


O CLS, ou Especificao Comum da Linguagem, um subconjunto do CTS, e define um conjunto de regras que qualquer linguagem que implemente a .NET deve seguir a fim de que o cdigo gerado resultante da compilao de qualquer pea de software escrita na referida linguagem seja perfeitamente entendido pelo runtime .NET. Seguir essas regras um imperativo porque, caso contrrio, um dos grandes ganhos do .NET, que a independncia da linguagem de programao e a sua interoperabilidade, fica comprometido. A grosso modo, dizer que uma linguagem compatvel com o CLS significa dizer que mesmo quando esta sintaticamente diferente de qualquer outra que implemente .NET, semanticamente ela igual, porque na hora da compilao ser gerado um cdigo intermedirio (e no cdigo assembly dependente da arquitetura do processador) equivalente para duas peas de cdigo iguais, porm escritas em linguagens diferentes. importante entender esse conceito para no pensar que o cdigo desenvolvido em C# no pode interagir com cdigo desenvolvido em VB ou outras linguagens, porque mesmo estas sendo diferentes, todas so compatveis com o CLS.

BCL (Base Classe Library)


Como era de se esperar, uma plataforma que promete facilitar o desenvolvimento de sistemas precisa ter uma biblioteca de classes bsica que alavanque a simplicidade e a rapidez no desenvolvimento de sistemas. este o objetivo da BCL (Biblioteca de Classes Base), oferecer ao desenvolvedor uma biblioteca consistente de componentes de software reutilizveis que no apenas facilitem, mas tambm que acelerem o desenvolvimento de sistemas. Na BCL encontramos classes que contemplam desde um novo sistema de janelas a bibliotecas de entrada/sada, grficos, sockets, gerenciamento da memria etc. Esta biblioteca de classes organizada hierarquicamente em uma estrutura conhecida como namespace. Ao desenvolver um componente de software reusvel, este precisa ser estruturado em um namespace para que possa ser usado a partir de um outro programa externo. A seguir mostramos uma tabela com alguns dos principais namespaces que fazem parte da BCL:

12

13

14

Unidade 3 Viso Geral do ASP .NET

O ASP.NET um framework que possibilita aos programadores a construo de Web sites dinmicos, aplicaes Web, e servios XML. O componente principal do ASP.NET o ASP.NET Web Form, que fornece uma maneira fcil e rpida de construir web sites e aplicaes web. O ASP.NET tambm inclui tecnologia para construo de XML Web Services, que so a base da construo de aplicaes Web distribudas.

Interao Cliente Servidor


Desenvolver aplicaes para serem usadas sobre HTTP muito diferente de criar aplicaes Desktop do tipo Windows Forms pelo fato de o cliente estar dissociado do servidor. Quando o usurio solicita uma pgina, digitando um endereo (URL), em um navegador, o servidor Web responde enviando um documento HTML e muito provavelmente algum cdigo JavaScript a ser executado pelo navegador. A conexo aberta, a solicitao feita pelo navegador, o servidor responde enviando o documento HTML, e a conexo encerrada to logo esse envio seja terminado. Isto dificulta o trabalho de fazer com que uma aplicao Web se comporte como uma aplicao conectada, desktop. O ASP.NET fornece um gerenciador de estados (VIEWSTATE) que a cada nova requisio reconhece o usurio e informao que ele est trabalhando.

15

No lado do cliente, aps carregar a pgina, voc pode submeter a pgina de volta ao servidor, disparando o que chamamos de postback. Isso acontece utilizando funcionalidades do protocolo HTTP, tipicamente os mtodos POST e GET. Em um HTML normal, a submisso de formulrios pode ser acionada a partir de um boto do tipo submit na pgina, e utilizar cdigo client-side para trabalhar a informao antes de ser enviada ao servidor ou mesmo para acionar um evento de postback. No ASP.NET a interao cliente-servidor transparente por usar programao orientada a eventos sobre o protocolo HTTP.

O que o ASP.NET
O ASP.NET um conjunto de tecnologias para desenvolvimento WEB que possibilita as programadores, construir Web Site, Aplicaes Web e Web Services XML. Pelo fato de o ASP.NET ser parte do Framework .NET, voc pode desenvolver aplicaes web em qualquer uma das linguagens .NET. O principal componente do ASP.NET o Web Form. Uma aplicao ASP.NET tpica, consiste de um ou mais Web Form. Um Web Form uma pgina que o usurio visualiza em seu browser, e tambm uma pgina dinmica que processada no servidor e pode acessar recursos do mesmo. Mas tambm pode ser utilizada para interagir com o usurio no navegador utilizando cdigo JavaScript, VBScript ou AJAX. Em outras palavras, uma pgina HTML tradicional pode executar scripts no cliente para executar tarefas bsicas. J uma pgina ASP.NET Web Form pode tambm executar cdigo no lado do servidor para acessar banco de dados, gerar outros Web Forms, ou fazer uso de dispositivos de segurana do servidor.

16

O ASP.NET independente do dispositivo que for usado para acess-lo. Permitindo ao programado desenvolver Web Forms que podero ser vistos em quaisquer dispositivos que tenham um navegador Web. O ASP.NET tambm faz uso do Visual Studio para construir e executar as aplicaes ASP.NET. Isso resulta em um processo de desenvolvimento simplificado que permite a voc testar a aplicao sem precisar criar um ambiente de hospedagem externo. Tambm est embutido no ASP.NET, mtodos de autenticao do tipo Windows ou Forms que auxiliam o programador a manter sua aplicao e dados seguros. Cada aplicao ou site disponibilizado em um servidor Web, roda como um processo dentro do Internet Information Services (IIS). O ASP.NET tambm um ambiente de desenvolvimento Web que inclui funcionalidades para voc desenvolver aplicaes Web com o mnimo de codificao, em qualquer linguagem compatvel com a CLR, incluindo Microsoft Visual Basic, C#, Microsoft JScript .NET, e J#. A seguinte tabela descreve as diversas caractersticas do ASP.NET:

Caractersticas Page e Control Framework

Compilador ASP.NET

Segurana

Forms Authentication Provider

Descrio O ASP.NET permite voc encapsular funcionalidades comuns da interface em controles reusveis de fcil utilizao. Tambm fornece a possibilidade de controle de aparncia do seu web site utilizando temas. Adicionalmente ao temas, voc pode fazer uso de Master Pages, para a criao de layout consistente de pginas em sua aplicao. Todo cdigo ASP.NET compilado, e fornece tipagem forte de dados, otimizao de performance, entre outros benefcios. Depois que o cdigo compilado, o componente CLR compila o cdigo ASP.NET para cdigo nativo, aumentando ainda mais sua performance. O ASP.NET fornece uma infra estrutura avanada de segurana de autenticao de usurios, alm de outras tarefas relacionadas a segurana. Voc pode autorizar usurios utilizando autenticao Windows, que fornecida pelo IIS, e alternativamente voc mesmo pode gerenciar a autenticao usando seu prprio banco de dados atravs de formulrios de autenticao ASP.NET. O ASP.NET sempre executado utilizando uma identidade do Windows, portanto, voc pode deixar sua aplicao segura utilizando as caractersticas do prprio Windows, como listas de controle de acesso NTFS (ACLs) e permisses de banco de

17

State-Management Facilities

ASP.NET Configuration

Health Monitoring and Performance

Debugging Suport

XML Web Services Framework

Extensible Hosting Environment and Application Live-Cycle Management

Extensible Designer Environment

dados. O ASP.NET fornece um gerenciador de estado que permite voc armazenar informaes entre as requisies de pgina, como dados do cliente ou contedo de um carrinho de compras. Aplicaes ASP.NET usam um sistema de configurao que permite voc definir parmetros para seu servidor Web, site, ou aplicaes individuais. Voc pode fazer ajustes de configurao no momento em que suas aplicaes so disponibilizadas no servidor ou a qualquer momento com um mnimo de impacto operacional em sua aplicao e servidores. O ASP.NET inclu funcionalidades que permitem voc monitorar o estado e performance da sua aplicao. Permite a voc monitorar eventos chave que fornece a voc dados sobre erros e condies da sua aplicao. O ASP.NET tema vantagem de uma estrutura de depurao em tempo de execuo que d suporte a depurao cross-language e cross-computer. Voc pode depurar tanto objetos gerenciados como no gerenciados, e todas as linguagens suportadas pela CLR. E o ASP.NET tambm fornece um modo de rastreamento (trace mode) que permite a voc adicionar informaes operacionais a cada pgina da sua aplicao. O ASP.NET da suporte a XML Web Services. Um XML Web Service um componente que contm dados e permite as aplicaes trocar informao atravs de firewalls utilizando padres web como HTTP e mensagens XML. O ASP.NET inclui um ambiente extensvel de gerenciamento do ciclo de vida de uma aplicao do momento em que o usurio acessa pela primeira vez um determinado recurso, como uma pgina, at o momento em que o aplicativo fechado. ASP.NET inclu suporte para designers de criao de Web Server controls para uso com as ferramentas visuais como o Visual Studio.

Componentes de uma aplicao ASP.NET


Os Componentes de uma aplicao ASP.NET incluem:

18

Web Forms e pginas .aspx. Os Web Forms fornecem a Interface do Usurio para as aplicaes Web. User Controls, ou controles .ascx. Os User Controls fornecem a UI para funcionalidades especficas a serem reutilizadas em Web Forms diferentes. Arquivos Code-behind. O arquivo code-behind um arquivo associado ao Web Form que contm o cdigo Server-side para o mesmo. Voc tambm pode optar por criar uma pgina ASP.NET em nico arquivo que contenha o HTML e o cdigo fonte .NET no mesmo arquivo. Arquivos de configurao. So arquivos XML que definem a configurao da aplicao Web no servidor. Cada aplicao Web pode ter um ou mais arquivos. J cada servidor Web, pode ter somente um arquivo machine.config. Global.asax. O arquivo Global.asax contm cdigo para responder eventos a nvel de aplicao que so acionados pelo ASP.NET, como erros no tratados na aplicao. XML Web Service. Permitem a aplicao enviar e receber dados de um XML Web Service. Conexes a Banco de Dados. Permitem a aplicao Web transferir dados de fontes de dados. Itens Adicionais. Arquivos adicionais que voc inclui na aplicao Web como arquivos HTML para contedo esttico, arquivos texto, arquivos XML, arquivos XSLT. CSS. Arquivos que contm folhas de estilo utilizadas no design da aplicao.

Modelo de Compilao e Execuo Dinmica

Primeira Execuo 1. O Cliente realiza uma requisio HTTP Get para o servidor 19

2. O parser do ASP.NET interpreta o cdigo fonte 3. Se o cdigo no estiver compilado em uma DLL, o ASP.NET invoca o compilador. 4. O Runtime carrega e executa o cdigo MSIL que executado pelo run time. Nota: o cdigo MSIL o cdigo em linguagem assembly executado em tempo de execuo. Os vrios compiladores das linguagens .NET como Visual Basic e C#, compilam seus cdigos em MSIL, que ento executado pelo runtime.

Segunda Execuo Quando o usurio solicita a mesma pgina pela segunda vez, os seguintes eventos acontecem: 1. O cliente faz uma requisio GET HTTP para o servidor. 2. O runtime imediatamente carrega e executa o cdigo MSIL que j est compilado pela primeira requisio da pgina. Nota: a recompilao da pgina .aspx pode ocorrer, principalmente se o contedo da mesma foi alterado.

Precompilao Voc pode escolher pr compilar o seu site antes de disponibiliz-lo aos seus usurios. As vantagens da precompilao incluem: Resposta otimizada aos usurios, pois as pginas no precisam se compiladas na primeira execuo das mesmas. Identifica erros de compilao antes de os usurios acessarem o site pela primeira vez. Possibilidade de disponibilizar o site na Web em um servidor de produo sem o cdigo fonte.

ASP.NET AJAX
O ASP.NET tambm disponibiliza um framework livre Microsoft AJAX para ser utilizado em aplicaes interativas. O ASP.NET AJAX permite enviar de forma assncrona uma seo ou parte de uma pgina web ao servidor, e receber uma resposta de forma a no distrair o usurio ou mesmo interromper o que ele estava fazendo na pgina. O ASP.NET AJAX pode ser usado em conjunto com cdigo serverside que automaticamente geram cdigo client-side JavaScript. O ASP.NET AJAX tambm disponibiliza o AJAX Control Toolkit, que uma coleo de controles clientside interativos, juntamente com a biblioteca jQuery.

20

Unidade 4 Criando uma Aplicao Web com o .NET

O Visual Studio
O Visual Studio o ncleo do desenvolvimento do Microsoft .NET. um ambiente completo de desenvolvimento em que voc pode desenhar, desenvolver, depurar aplicaes .NET e Web Services XML.

Principais Caractersticas do Visual Studio


O Visual Studio prov: Suporte para desenvolvimento de diversas linguagens Ferramentas para a construo de aplicaes Web, aplicaes Windows, e Web Services XML. Ferramentas para criao de aplicaes .NET Framework 3.0 como WCF, WPF e WF. Ferramentas para criao de Cascading Style Sheets (CSS. Data Acess Controls, incluindo suporte para LINQ Suporte a desenvolvimento para verses diferentes do Framework .NET. Suporte a ASP.NET AJAX e JavaScript. Suporte a Microsoft Silverlight Suporte a Dynamic Data Gerenciamento de erros incluindo depurao local e remota, alm de tracing. Ajuda e documentao em formato fcil e acessvel.

Templates de Projetos
O Visual Studio fornece templates para a criao de um grande nmero de tipos projetos. Esses templates contem todos os arquivos necessrios e lhe garantem que a IDE est corretamente configurada para o projeto selecionado. Quando voc utiliza esses templates, voc no tem que configurar a infraestrutura necessria de pastas e arquivos que um determinado tipo de projeto necessitem. Isso lhe permite o manter foco no seu projeto e na incluso de funes ao mesmo.

Solues e Projetos
Alguns Templates que o Visual Studio disponibiliza: 21

Template Class Library

ASP.NET Web Application ASP.NET Web Site ASP.NET Web Service application

Descrio Cria classes e componentes reusves que voc pode compartilhar com outros projetos. Cria um aplicativo web com os arquivos bsicos para sua aplicao. Cria um ASP.NET Web site. Cria um XML Web service que poder ser consumido por outros web services ou aplicaes em uma rede. XML Web Services so componentes disponves na Internet projetados para interagir com outras aplicaes. Cria componenetes ASP.NET AJAX customizados. Para voc criar o seu projeto customizado. Esse template cria uma estrutura mnima para voc armazenar sua aplicao. Voc deve manualmente inserir todas referncias, arquivos e componentes que necessitar. Cria um web site com a estrutura mnima necessrio para um Web site com suporte a Dynamic Data.

ASP.NET AJAX Server control. Empty Project

Dynamic Data Web Site

Tela inicial do Visual Studio 2008

Criando uma Aplicao Web o Visual Studio


Para criar um web site ASP.NET utilizamos a opo File -> New Web Site...

22

Abrir a seguinte janela onde selecionamos o Template de Web Site que ser usado:

Selecione o template ASP.NET Web Site, informando a pasta e o nome do site a ser criado em Location (WebSite1), e selecionando a linguagem de programao que ser utilizada no projeto Visual C#.

23

Um novo projeto criado, e exibido automaticamente o cdigo da pgina aspx. No lado esquerdo temos as abas Toolbox, CSS Properties, e Manage Styles. Na lateral direita temos as abas Server Explorer e Properties. Na barra inferior temos os botes Design, Split e Source que Server para alternar a visualizao da rea central entre Design, modo de desenho, Source, exibe o cdigo fonte HTML da pgina, e Split que mostra ambos dividindo a tela horizontalmente ao meio. Ao clicar no menu View > Server Explorer e ser exibida no lado direito da janela do Visual Studio, a estrutura de arquivos do nosso site, automaticamente gerada pelo Visual Studio:

24

Unidade 5 Criando um Formulrio ASP.NET

Nessa unidade criaremos um Web Form ASP.NET para gerar um formulrio de envio de Curriculum Vitae. Esse formulrio ter os campos Nome Endereo Telefone Email E um campo texto para o currculum

Adicionando um novo Web Form ASP.NET


Para criar um novo formulrio Web Form ASP.NET, clique em View > Solution Explorer. Dentro do Solution Explorer clique com o boto direito sobre a pasta da aplicao c:\sites\WebSite1 e selecione a opo Add New Item...

Exibir a seguinte janela para seleo do tipo de Template a ser inserido no Web Site:

25

Selecione o template Web Form, atualize seu nome para Curriculum.aspx, Language Visual C#, e certifique-se de que a opo Place code in separate file encontra-se marcada. Para concluir, clique no boto Add. Observe que no Solution Explorer, aparecer o Web Form includo no site.

Ainda no Solution Explorer, d um duplo clique sobre o Curriculum.aspx, abrir a aba Curriculum.aspx com o cdigo fonte do formulrio:

Dentro dessa aba est o cdigo ASP.NET para criao da pgina Web. Repare que muitas das TAGs que esto nesse cdigo so TAGs HTML normais. dentro desse cdigo que criaremos o nosso formulrio de entrada de currculos. Vamos comear adicionando os controles que iro compor o formulrio na pgina. Para tanto abra a aba Toolbox esquerda do cdigo:

26

Nela aparecem listados todos controles ASP.NET disponveis para o nosso formulrio.

Arraste o controle Label para dentro da janela de cdigo do Web Form Curriculum.aspx, entre as TAGS <div>, dever ficar da seguinte forma:
<form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> </div> </form>

Precisamos alterar o valor das propriedades ID e Text para melhor estruturar o cdigo e identificar os componentes. Aproveitaremos tambm para inserir algumas TAGs br que serviro para melhorar o layout do formulrio e adicionar a propriedade Width=500px na tag asp:TextBox. No cdigo abaixo, em negrito esto os contedos alterados:
<form id="form1" runat="server"> <div> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <br /> <asp:TextBox ID="txtNome" Width="500px" runat="server"></asp:TextBox> <br /> </div> </form>

Voc pode tambm alternar para o modo Design para ver como sua pgina web est ficando, clicando no boto Design, logo abaixo da janela de cdigo:

27

possvel tambm adicionarmos os controles diretamente no modo de design, clicando neles na Toolbox e arrastando eles para dentro do design. E posteriormente alterarmos suas propriedades clicando neles e acessando a aba Properties, ou pelo menu View > Properties Window, que exibir as propriedades do elemento selecionado.

Acionaremos, agora os campos que faltam. Para os campos endereo, telefone e email adicionando outros 3 Labels e TextBoxes, e para o campo curriculum vamos nos modificar tambm das propriedades Columns="50", Rows="25"e TextMode="MultiLine"

28

<form id="form1" runat="server"> <div> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <br /> <asp:TextBox ID="txtNome" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblEndereco" runat="server" Text="Endereco:"></asp:Label> <br /> <asp:TextBox ID="txtEndereco" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblTelefone" runat="server" Text="Telefone:"></asp:Label> <br /> <asp:TextBox ID="txtTelefone" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblEMail" runat="server" Text="EMail:"></asp:Label> <br /> <asp:TextBox ID="txtEMail" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblCurriculum" runat="server" Text="Curriculum:"></asp:Label> <br /> <asp:TextBox ID="txtCurriculum" Width="500px" runat="server" Columns="50" Rows="25" TextMode="MultiLine"></asp:TextBox> <br /> </div> </form>

E por ltimo, adicionaremos o boto para enviar o formulrio de envio arrastando um controle Button para o final do formulrio, alterando a propriedade ID para btnOk e a propriedade Value para Enviar Curriculum:

<form id="form1" runat="server"> <div> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <br /> <asp:TextBox ID="txtNome" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblEndereco" runat="server" Text="Endereco:"></asp:Label> <br /> <asp:TextBox ID="txtEndereco" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblTelefone" runat="server" Text="Telefone:"></asp:Label> <br /> <asp:TextBox ID="txtTelefone" Width="500px" runat="server"></asp:TextBox>

29

<br /> <asp:Label ID="lblEMail" runat="server" Text="EMail:"></asp:Label> <br /> <asp:TextBox ID="txtEMail" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblCurriculum" runat="server" Text="Curriculum:"></asp:Label> <br /> <asp:TextBox ID="txtCurriculum" Width="500px" runat="server" Columns="50" Rows="25" TextMode="MultiLine"></asp:TextBox> <br /> <asp:Button ID="btnOk" runat="server" Text="Enviar Curriculum" /> </div> </form>

Devemos salvar as alteraes feitas no formulrio utilizando a opo File > Save All. Para executar o formulrio e visualizar a pgina compilada apartir do servidor de desenvolvimento do Visual Studio, basta pressionar Control + F5 para execuo direta, ou pressionando F5, ou pressionar o boto de execuo da barra de ferramentas , ou ainda apartir do menu Debug > Start Debugging, opes que iniciam a execuo em modo de depurao que far aparecer a seguinte janela:

30

Basta clicar Ok para seguir. Aps compilar a aplicao e iniciar o servidor o Visual Studio abre o navegador com o formulrio:

31

Unidade 6 Adicionando Cdigo a um Formulrio ASP.NET

Trabalhando com arquivos Code-Behind


O mtodo padro de implementao de cdigo Server-side no Visual Studo, com a utilizao de arquivos code-behind. Quando voc utiliza os arquivos code-behind, a lgica de programao guardada em um arquivo separado dos elementos visual da pgina. Separar a lgica do design possibilita a voc trabalhar em um arquivo, enquanto a interface do usurio trabalhada pelo designers nas pginas ASP.NET. Cada arquivo code-behind contm somente a lgica de programao de um nico Web Form. Cada Web Form de uma aplicao tem seu prprio arquivo code-behind e por default seu nome igual ao do arquivo do Web Form ao qual est associado. Com a diferena de que o code-behind ter a extenso .aspx.vb ou aspx.cs, dependendo da linguagem em que foi escrito. Nesse mdulo utilizaremos somente arquivos codebehind contendo cdigo em C#, ou seja, arquivos com a extenso .aspx.cs.

Manipuladores de Eventos
Quando um usurio interage com um Web Form, um evento disparado. Precisamos desenhar nossa aplicao Web para que execute a tarefa apropriada quando um evento acionado. Um Manipulador de Evento a ao que acontece em resposta ao evento que disparado. Os Web Forms do ASP.NET so orientados a evento. Quando voc clica em um boto submit, um evento gerado. Um evento escrito para esse evento de clicar, ento acionado e pode executar uma tarefa, como salvar os dados em um banco de dados, ou simplesmente redirecionar o usurio para uma pgina diferente.

Adicionando Cdigo a um Formulrio


Como aplicao exemplo criaremos um formulrio onde sero informados o nome de um vendedor, o valor do seu salrio fixo, o total de vendas no ms, e o percentual da comisso sobre o valor das suas vendas. O formulrio criado apresentar o valor total que o vendedor deve receber ao clicarmos em um boto. Criaremos um novo projeto apartir do menu File > New Web Site, selecione o template ASP.NET Web Site, d o nom Comissao, e certifique-se que a linguagem C#.

32

No Solution Explorer, clique duas vezes sobre o arquivo Default.aspx para abri-lo e entre na visualizao do cdigo fonte como abaixo:

Arraste um controle Label para dentro das tags <div> e logo abaixo uma tag <br /> e em seguida um controle do tipo TextBox seguido de outra tag <br />. Altere a propriedade Text do Label para Nome: e a propriedade ID para lblNome, no TextBox altere a propriedade ID para txtNome. Temos nosso primeiro par na tela. Adicione mais 4 pares para Salario Fixo (IDs lblFixo, txtFixo), Total Vendido: (IDs lblVendido, txtVendido), Comissao: (IDs lblComissao, txtComissao), A Receber: (IDs lblReceber, txtReceber). 33

Por ltimo, adicione um controle Button e altere a propriedade ID para btnCalcular e a propriedade Text para Calcular. Dentro da tag <body> seu code de ficar como o abaixo:
<form id="form1" runat="server"> <div> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <br /> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblFixo" runat="server" Text="Salrio Fixo:"></asp:Label> <br /> <asp:TextBox ID="txtFixo" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblVendido" runat="server" Text="Total Vendido:"></asp:Label> <br /> <asp:TextBox ID="txtVendido" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblComissao" runat="server" Text="Comisso:"></asp:Label> <br /> <asp:TextBox ID="txtComissao" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblReceber" runat="server" Text="A Receber:"></asp:Label> <br /> <asp:TextBox ID="txtReceber" runat="server"></asp:TextBox> <br /> <asp:Button ID="btnCalcular" runat="server" Text="Calcular" /> </div> </form>

Altere para o modo de Design:

34

D um duplo clique sobre o boto calcular, abrir a tela de edio do cdigo desse boto, para o evento click:

Vamos inserir o cdigo C# necessrio para o clculo do valor a ser recebido pelo vendedor. Para isso, vamos pegar os valores que o usurio digitou nos campos, convertendo os mesmos para Double, executando o clculo e colocando o valor no campo resultado:
protected void btnCalcular_Click(object sender, EventArgs e) { double fixo = 0; double vendido = 0; double comissao = 0; double receber = 0; if (txtFixo.Text != "") { fixo = Convert.ToDouble(txtFixo.Text); } if (txtVendido.Text != "") { vendido= Convert.ToDouble(txtVendido.Text); } if (txtComissao.Text != "") { comissao = Convert.ToDouble(txtComissao.Text); } receber = fixo + (vendido * comissao / 100); txtReceber.Text = receber.ToString(); }

35

Salve a sua aplicao e execute ela em Debug > Start Debugging. Preencha os dados do formulrio e teste a aplicao:

36

Unidade 7 Depurando Aplicaes ASP.NET

Quando voc desenvolve aplicaes, voc pode encontrar diversos tipos diferentes de erros. Antes de solucion-los voc tem que identificar o tipo de erro e trat-lo apropriadamente. Existem 3 tipos de erros que voc tem que lidar ao desenvolver um aplicativo: erro de sintaxe, erros de runtime, e erros de semntica.

Erros de Sintaxe (Syntax Errors)


Os erros de sintaxe precisam ser solucionados para que o compilador possa compilar a aplicao. Eles se referem a estrutura e as regras associadas aos comandos da linguagem e aplicao. Por exemplo, se voc tentar utilizar o seguinte comando:
if( this.isPostBack) { // bloco de instrues }

E esquecer de fechar o par de parnteses ( ) ou chaves { }, um erro de sintaxe ocorre. O Visual Studio alerta voc sobre esses erros indicando no cdigo enquanto voc desenvolve.

Erros em tempo de execuo (runtime)


So erros que ocorrem quando a aplicao est sendo executada. So tambm conhecidos como excees. Por exemplo, se uma aplicao espera que um determinado arquivo esteja disponvel em algum servidor de uma rede, mas ele no encontrado pela aplicao, ser gerado um erro em tempo de execuo (exception). Esse tipo de erro deve ser gerenciado pela prpria aplicao.

Erros de Semntica
So erros mais difceis de localizar pois sua aplicao ir executar e no ser emitido nenhuma notificao. Mesmo assim, sua aplicao no executa a tarefa esperada. Por exemplo, seu programa exibe um formulrio de entrada com os dados de um cliente e so salvos sem erro nenhum. Mas ao visualizar novamente a informao, alguns dados no aparecem corretamente ou no foi salvo. Isso significa que a semntica da aplicao no est correta.

37

A Classe Debug
A classe Debug oferece mtodos e propriedades que podem ajudar voc a depurar seu cdigo exibindo informaese verificando seu cdigo com declaraes no cdigo. Usando a classe Debug, voc tem a garantia de um cdigo robusto sem afetar a performance e tamanho do cdigo do seu produto na release final. Isso por que os cdigos de depurao da classe no so compilados com o programa na verso Release da aplicao. A classe Debug disponvel globalmente na aplicao importando o namespace System.Diagnostics. No h necessidade de instanciar a classe, ela no tem construtores, e voc no pode herdar a mesma pois do tipo sealed. Mtodos da Classe Debug Mtodo Debug.Write Descrio Escreve a string que voc determinar, ou escreve a sada de um mtodo ToString de um objeto . Escreve uma linha de texto de sua escolha, ou escreve a sada do mtodo toString de um Objeto. Para escrever uma string condicionalmente. Para gerar a sada de uma linha de texto formatado. Para exibir uma mensagem se uma determinada condio for falsa.

Debug.WriteLine

Debug.WriteIf Debug.Print Debug.Assert

Habilitando a Depurao
Voc deve habilitar a depurao caso voc deseje depurar a sua aplicao. Isso feito no arquivo web.config. Dentro do mesmo voc precisa localizar o elemento compilation e alterar o atributo debug para true.
<configuration> <system.web> <compilation debug="true"> ... </system.web> <configuration>

Adicionando BreakPoints
O Visual Studio nos fornece o recurso de BreakPoints, que so nada mais do que pontos de parada da execuo de uma aplicao. Voc pode colocar ou remover em qualquer ponto do seu cdigo C# um Break Point pressionando a tecla F9, ou a partir do menu Debug > Toggle Breakpoint, ou ainda sobre a linha de cdigo clicando o boto direito opo Breakpoint. Ou ainda, clicando sobre a bolinha vermelha que marca o Break Point.

38

Executando a Aplicao em Modo de Depurao


Para executar sua aplicao em modo de debug, voc deve pressionar F5 ou clicar em Start Debugging no menu Debug. Se a depurao no estiver habilitada, voc ser perguntado se quer habilitar o modo de depurao pela caixa de dilogo abaixo. Basta clicar em Ok para habilitar a depurao. Isso ir modificar o arquivo web.config.

Execuo Passo a Passo


Quando o depurador encontra uma linha com um breakpoint, a execuo suspensa. Voc pode ento executar sua aplicao passo a passo e examinar a lgica de sua aplicao. Pressione F10 ou clique em Step Over no menu Debug, se voc quer que a linha atual seja executada sem entrar no cdigo da instruo que est sendo executada, como um mtodo na mesma classe ou em uma classe externa. A execuo ir parar na prxima linha de cdigo. Pressione F11 ou clique na opo Step Into do menu Debug se voc quiser entrar no cdigo da instruo da linha atual, se houver algum. Por default, propriedades so normalmente no usam esse tipo de execuo por no conter cdigo sobre elas.

39

Usando a Janela de Depurao


O Depurador do Visual Studio oferece diversas janelas, coletivamente conhecidas como variable windows que exibem informaes sobre as variveis enquanto voc est depurando. Cada janela tem uma grid de trs colunas: Name, Value e Type. A coluna nome mostra os nomes das variveis adicionadas automaticamente nas janelas Auto e Locals. Na janela Watch, a coluna Name onde voc adiciona suas prprias variveis ou expresses. As colunas Value e Type exibem o valor e o tipo de varivel ou resultado correspondente. Voc pode editar o valor da varivel na coluna Value.

Exibindo a Janela Window


No menu Debug, selecione Windows e ento o nome da janela que voc quer abrir. Voc pode escolher Autos, Locals, Watch ou Watch1 at Watch4. Para exibir esses itens, o depurador deve estar sendo executado ou no modo break.

Depurao Remota
Para voc executar depurao remota, voc deve usar o programa Remote Debugging Monitor ou msvsmon.exe, que uma aplicao qual o Visual Studio se conecta. Por default, o Remote Debugging Monitor roda como uma aplicao Windows, voc pode configur-lo para rodar como servio caso queira que ele seja executado em um servidor remoto. Voc pode executar o assistente a partir do menu Start, pasta Tools. Depois de iniciar o depurador remoto, voc deve configurar os ambientes em ambas as mquinas. Voc tambm deve levar em considerao, as questes de seguranas relacionadas ao acesso remoto.

Tracing
Tracing o processo de receber informao sobre a execuo da aplicao em tempo de execuo. uma maneira de monitorar a sua aplicao. Essa informao pode lhe auxiliar a identificar problemas ou analisar performance, de uma maneira que no afeta a aplicao.Tracing normalmente utilizado em ambiente de produo em que no possvel executar depurao. Voc pode utilizar o tracing para: Ter um diagnstico das informaes de uma requisio a uma pgina ASP.NET Escrever instrues de depurao diretamente no cdigo.

40

Descobrir o cdigo no qual a sua aplicao percorreu.

Classe TraceContext
a classe usada para escrever mensagens em uma pgina ou no trace log em memria. Mtodos da Classe TraceContext: Write : escreve uma mensagem de trace no log Warn : similar ao mtodo Write, porm as mensagens aparecem em vermelho.

Ambos os mtodos possuem 3 overloads, todos os 3 possuem uma mensagem de tracing, e adicionalmente um nome de categoria, e um parmetro to tipo Exception que indica que voc pode informar um erro capturado ou uma exceo definida pelo usurio. Exemplo:
Trace.Warn("Ateno"); Trace.Write("Mensagem de Trace"); Trace.Write("Categoria", "Mensagem de Trace"); Trace.Write("Categoria", "Mensagem de Trace", new Exception("mensagem da exceo"));

Sada:

O parmetro trace permite voc classificar a sada do Trace por categoria alterando o cdigo:
<%@ Page ... Trace="True" TraceMode="SortByCategory" %>

Alternativamente voc tambm pode utilizar SortByTime. Voc pode utilizar a propriedade IsEnable do TraceContext para alterar o estado do tracing dinamicamente ou verificar seu estado:
// habilitando o tracing no cdigo Trace.isEnabled = true; // verificando seu estado

41

if (Trace.IsEnabled) { Trace.Write("Tracing est habilitado!"); }

Habilitando o Tracing em uma Aplicao Web


Voc pode utilizar o seguinte cdigo para ativar o Tracing a nvel de pgina:
<%@ Page Language="C#" Trace="true" ... %>

Ou a nvel de aplicao, alterando o arquivo web.config:


<configuration> ... <system.web> <trace enabled=true /> ... </system.web> </configuration>

Dados do Trace
As informaes do trace a nvel de pgina so adicionadas ao final da pgina .aspx em que estiver habilitado.

Categorias do Trace
Os dados do Trace so divididos em diversas categorias conforme listado: Categoria Request Details Trace Information Descrio Informao sobre a requisio: identificao da sesso (ID), tempo da requisio, tipo de requisio, e status. Sadas padro e customizadas de trace. A coluna From First(s) contem o tempo total desde a execuo at o trace acontecer, e a coluna From Last(s) mostra o tempo restante. Os tempos aqui so importantes para se ter um perfil e para identificar os mtodos que mais demoram para responder. Lista de todos os itens que esto na pgina, junto com o tamanho de cada uma. uma representao da ASP.NET Control Tree. Mostra cada controle, seu ID nico, tipo, nmeros de 42

Control Tree

Session State Application State Headers Collection Form Collection Querystring Collection Server Variables

bytes que utiliza para ser renderizado, e o nmero de bytes que ocupa na ViewState e ControlState. Informao sobre os valores armazenados na sesso (Session), se houver algum. Informao sobre os valores armazenados na Application, se houver algum. Lista de requisio e header de resposta. Lista de controles e seus valores, do formulrio que foi enviado. Lista de valores passados na URL. Lista de toda as variveis do servidor e seus valores.

43

Unidade 8 Validando Entrada de Usurios

A validao de entrada de dados utilizada para garantir que o usurio preencha corretamente os campos de um formulrio antes que o mesmo seja enviado para o servidor. A validao de dados em uma pgina internet serve como um filtro antes que a lgica no servidor seja executada. No ASP.NET, a validao de entrada de dados ocorre no lado do servidor, mas tambm pode acontecer no lado do cliente quando o browser der suporte a validao. Se o browser suportar validao de dados e a mesma estiver habilitada, os mecanismos de validao que voc criou acontecero no lado do cliente antes que os dados sejam enviados ao servidor. O usurio recebe imediatamente a mensagem de alerta caso a regra de validao no seja satisfeita. Por questes de segurana, todas as validaes feitas no lado do cliente so tambm executadas no do servidor.

Controles de Validao
O ASP.NET fornece um conjunto de controles de validao que ajudam voc a identificar erros na entrada de dados. So eles: Controle de Validao RequiredFieldValidator Funo Verifica se um determinado campo foi informado em um controle. Esse o nico controle de validao que requer um valor. Todos os demais aceitam um controle vazio como uma resposta vlida. Compara o valor informado para um campo de entrada com outro campo, um valor fixo, um tipo de dado ou arquivo. Por exemplo, voc pode usar esse controle para fazer uma verificao de digitao de senha comparando o valor desse campo com o outro. Verifique se o valor informado respeita um padro definido por uma expresso regular. Esse controle de validao permite voc verificar se o valor de um controle segue uma seqncia previsvel de caracteres como em email, CEP, CPF,

CompareValidator

RegularExpressionValidator

44

RangeValidator

CustomValidator

ValidationSummary

CNPJ. Verifica se um campo se encontra entre dois valores. Por exemplo, voc pode utilizar esse controle para verificar se a idade que o usurio informou se encontra em uma determinada faixa de valores. Permite a voc escrever um cdigo e criar uma expresso de validao personalizada. Por exemplo, voc pode usar esse controle para verificar se um nmero primo, se confere com algum valor em banco de dados, validar os dgitos verificadores de um CNPJ ou CPF. Exibe na pgina um sumrio de todos os erros de validao encontrados. Esse controle normalmente colocado prximo ao boto Submit para informar prontamente o usurio o status dos dados informados.

Obs: se voc no quer que um determinado controle, por exemplo, um boto, acione a validao do formulrio, voc pode ajustar a propriedade CausesValidation do mesmo para false. Isso muito til em um boto de Cancelar, por exemplo.

Caracteres para Expresses Regulares


A tabela a seguir descreve um conjunto comum de caracteres que voc pode utilizar para customizar as suas expresses regulares: Caractere a Definio Procura o caractere a minsculo. E da mesma forma para todo o alfabeto. Qualquer letra no precedida por uma contra barra (\), ou parte de uma faixa ( [a-z], por ex.), comparado com seu valor literal. Procura o dgito 1. E da mesma forma para todos os caracteres numricos. Qualquer numero ou dgito no precedido por uma contra barra (\), ou parte de uma faixa ([0-9], por exemplo), comparado com seu valor literal. Procura 0 ou 1 literais. Procura 0 at n literais. Procura 1 a n literais (pelo menos 1). Valor inteiro de 0 a n. Tamanho mnimo de n caracteres. Separa mltiplos padres vlidos. Caractere de escape. Procura qualquer caractere. Procura por qualquer no caractere. Procura por um dgito decimal. Procura qualquer caractere no digito. Procura por um ponto.

? * + [0-n] {n} | \ \w \W \d \D \.

45

O exemplo a seguir mostra como utilizar um RegularExpressionValidator para validar um endereo de email:
<asp:TextBox id="txtEMail" runat="server" /> <asp:RegularExpressionValidator id="regExpEMail" runat="server" ControlToValidate="txtEMail" ErrorMessage="Use o formato email@dominio.xxx" ValidationExpression="\w+@\w+\.\w+" Text="*" />

Adicionando Controles de Validao a um Formulrio


Crie um novo web site a partir do menu File > New Web Site..., selecione o template ASP.NET Web Site, d o nome de Cadastro, linguagem Visual C#:

No Solution Explorer, abra o Web Form Default.aspx no modo Source.


<fieldset> <legend>Cadastro de Usurio</legend> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblEMail" runat="server" Text="EMail:"></asp:Label> <asp:TextBox ID="txtEMail" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblIdade" runat="server" Text="Idade:"></asp:Label> <asp:TextBox ID="txtIdade" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblSenha" runat="server" Text="Senha:"></asp:Label> <asp:TextBox ID="txtSenha" TextMode="Password" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblConfirma" runat="server" Text="Confirme a Senha:"></asp:Label> <asp:TextBox ID="txtSenhaConfirma" TextMode="Password" runat="server"></asp:TextBox> </fieldset>

46

Colocaremos agora os controles de validao das entradas de usurio. Primeiro validaremos o campo txtNome, que ser obrigatrio, apartir da Toolbox (View > ToolBox), aba insira um controle RequiredFieldValidator aps o campo Nome. Altere as propriedade ID=Validador1 e ErrorMessage="Campo Obrigatrio" e insira a propriedade ControlToValidate="txtNome". Adicione um controle RangeValidator apso campo Idade e altere as propriedades ID="Validador2", ErrorMessage="Data invlida", e adicione MinimumValue="0", MaximumValue="130" e ControlToValidate="txtIdade". Adicione um controle RegularExpressionValidator aps o campo EMail altere as propriedades ID="Validador3", ErrorMessage="EMail invlido" e adicione ValidationExpression="\w+@\w+\.\w+" e ControlToValidate="txtEMail". Adicione um controle CompareValidator aps o campo Senha e altere as propriedades ID="Validador4", ErrorMessage="Senhas no so iguais" e insira ControlToValidate="txtSenha", ControlToCompare="txtSenhaConfirma". Adicione um controle ValidationSummary e altere seu ID para ID="relatorioValidacao". Apartir da aba Standard adicione um boto e altere as propriedades ID="btnOk" Text="Ok". O cdigo do seu formulrio deve ficar como a seguir:
<fieldset> <legend>Cadastro de Usurio</legend> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="Validador1" ErrorMessage="Campo Obrigatrio" ControlToValidate="txtNome" runat="server"></asp:RequiredFieldValidator> <br /> <asp:Label ID="lblIdade" runat="server" Text="Idade:"></asp:Label> <asp:TextBox ID="txtIdade" runat="server"></asp:TextBox> <asp:RangeValidator ID="Validador2" ErrorMessage="Data invlida" MinimumValue="0" MaximumValue="130" ControlToValidate="txtIdade" runat="server"></asp:RangeValidator> <br /> <asp:Label ID="lblEMail" runat="server" Text="EMail:"></asp:Label> <asp:TextBox ID="txtEMail" runat="server"></asp:TextBox>

47

<asp:RegularExpressionValidator ID="Validador3" ErrorMessage="EMail invlido" ValidationExpression="\w+@\w+\.\w+" ControlToValidate="txtEMail" runat="server"></asp:RegularExpressionValidator> <br /> <asp:Label ID="lblSenha" runat="server" Text="Senha:"></asp:Label> <asp:TextBox ID="txtSenha" TextMode="Password" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblConfirma" runat="server" Text="Confirme a Senha:"></asp:Label> <asp:TextBox ID="txtSenhaConfirma" TextMode="Password" runat="server"></asp:TextBox> <asp:CompareValidator ID="Validador4" ControlToValidate="txtSenha" ControlToCompare="txtSenhaConfirma" ErrorMessage="Senhas no so iguais" runat="server"></asp:CompareValidator> </fieldset> <asp:Button ID="btnOk" runat="server" Text="Ok" />

48

Unidade 9 Master Page e User Controls

As Master Pages do ASP.NET permitem voc criar um layout consistente de pginas em sua aplicao. Voc cria uma nica master page que define o layout e comportamento bsico de todas as pginas ou de um grupo de pginas de sua aplicao. Voc pode ento, criar pginas individuais para exibir o contedo que voc quiser. A master page pode conter texto esttico, elementos HTML, e controles ASP.NET. Possuem a extenso .master, e so identificadas pela diretiva Page=Master em seu cabealho. Voc pode colocar o contedo comum a todo o site em uma master page, um cabealho comum que aparea em mltiplas pginas, por exemplo. Voc pode ter mais de uma master page em seu site para definir layouts diferentes em sees diferentes.

Caractersticas da Master Page


Possue a extenso .master e tem o valor Master na diretiva Page.
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

Por default, o servidor IIS impede que arquivos com a extenso .master sejam vistos em um navegador web. Isso impede o usurio de ver a master page com uma pgina ASP.NET stand alone. Uma master page quase igual a um Web Form, pois pode conter qualquer tipo de controle ASP.NET, incluindo elementos HTML de alto nvel como HTML, head, body e form. Voc pode usar tabelas, formatar a disposio dos elementos com divs, ter imagens, etc. O que diferencia uma master page de um Web Form normal, que ela tem presente um ou mais controles ContentPlaceHolder. ContentPlaceHolder, o controle que define as rea onde o contedo dinmico ser includo. Voc deve colocar os controles ContentPlaceHoder dentro dos elementos head, ou dentro de um form como segue:

<html>

49

<head runat="server"> <title>Aplicao Exemplo</title> <asp:ContentPlaceHolder id="ContentPlaceHolderCabecalho" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> ... <!-- Contedo padro --> <div class="conteudo"> <asp:contentplaceholder id="MainContentPlaceHolder" runat="server" /> ... <!-- contedo --> </div> <div class="rodape"> <asp:contentplaceholder id="ContentPlaceHolderRodape" runat="server"> <asp:label id="lblRodape" runat="server" Text="Texto de Rodap" /> </asp:contentplaceholder id="contentPlaceHolderRodape"> </div> ... </form> </body>

Criando uma Master Page


Para criar uma master page siga os seguintes passos: 1. No Solution Explorer, clique com o boto direito, e selecione Add New Item 2. Na caixa de dialogo Add New Item: a. Na caixa templates, clique em Master Page b. Na lista de linguagens selecione C# c. Marque a opo Place code in a separate file d. Marque a opo Select master page caso queira gerar uma master page aninhada e. Clique no boto Add

Content Page
Content Pages fornecem contedo para uma master page e so Web Forms que referenciam uma master page especfica. Voc tendo uma ou mais master pages no seu projeto, voc pode adicionar novas Content Pages ou converter seus Web Forms existentes em Content Pages.

Caractersticas da Content Page


Voc pode referenciar uma master page utilizando o atributo MasterPageFile na diretiva Page da sua Content Page como abaixo:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master"

50

AutoEventWireup="true" CodeFile="ContentPage.aspx.cs" Inherits="ContentPage" %>

Especificando a master page na diretiva Page, voc pode usar mais de uma master page no seu projeto utilizando master pages diferentes em diferentes Web Forms. Voc tambm pode especificar uma master page a nvel de aplicao no arquivo web.config:
<pages masterPageFile="MasterPage.master" />

Ficando dessa forma indicado que todas as pginas ASP.NET (arquivos .aspx) na aplicao devem ser automaticamente ligados master page indicada. Com exceo dos arquivos que tiverem o atributo MasterPageFile especificados, estes sero linkados a master page indicada por essa diretiva. As Content Page devem ter no mnimo um controle Content e o mesmo deve referenciar um ContentPlaceHolder na master page conforme exemplo:
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> </asp:Content>

No exemplo acima os controles Content referenciam na master page os ContentPlaceHolders head e ContentPlaceHolder1. Ou seja, na master page para a content page acima teramos:
<head runat="server"> <title>Untitled Page</title> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form> </body>

51

Criando uma Content Page


Aps ter criado a master page, no Solution Explorer, clique com o boto direito sobre a pasta do projeto, e selecione Add New Item...

Na caixa de dilogo Add New Item, selecione o template Web Form, marque a opo Select Master Page e clique em Add:

Selecione uma master page e clique Ok:

52

Os controles Content da pgina criada, referenciaro automaticamente os Content Place Holders da master page selecionada.

User Controls
User Controls, ou controles do usurio, so pginas ASP.NET que outros Web Forms podem importar como se fossem Server Controls. User Controls fornecem elementos de interface e outras funcionalidades. Depois de voc criar um user control, qualquer web page da aplicao podem utilizar esse controle. Os User Controls so pginas ASP.NET com extenso .ascx. Podemos criar um user control para ampliar a funcionalidade de um determinado controle, ou constituir um conjunto de diversos controles que junto interajam para executar uma determinada tarefa, por exemplo, um grupo de controles para cadastrar os dependentes de um funcionrio. Os User Controls simplificam a reutilizao de cdigo e a criao de elementos de interface de uso corriqueiro. Por default, o IIS 7.0 no permite que os arquivos com a extenso ascx sejam vistos em um navegador.

Caractersticas de um User Control


Um user control consiste de cdigo HTML, mas no pode conter elementos de alto nvel como as tags HTML, body ou form. Quando o user control inserido em um web form, ele passa a participar do ciclo de eventos deste Web Form. Mas como um user control tambm uma pgina ASP.NET

53

, ele tem sua prpria lgica. Por exemplo, um user control pode gerenciar seu evento de postback no seu prprio controlador de eventos Page_Load.

User Controls e seus Arquivos Associados Code-Behind


Os user controls contm a diretiva Control que equivalente a diretiva Page de um Web Form. Se voc escolher guardar o cdigo de um user controle em um arquivo code-behind, far essa referencia. permitido somente uma diretiva control em cada arquivo .ascx Por exemplo:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>

A diretiva Control suporta quase todos atributos da diretiva Page. Entretanto, no suporta o atributo Trace. Caso voc queira usar o Trace, deve ativar na pgina em que o controle se encontra ou na aplicao.

Vantagens dos User Controls


Os User Controls oferecem as seguintes vantagens: So encapsulados. Possuem namespaces prprios para variveis, o que garante que seus mtodos e propriedades no conflitam com outros existentes nas pgina que em se encontram. Podem ser usados mltiplas vezes. Podem ser escritos em liguagens diferentes da linguagem principal da pgina em que se encontram. Podem ser compartilhados na aplicao.

Desvantagens dos User Controls


O cdigo pode se tornar redundante. Quando o user control compartilhado entre aplicaes, difcil manter a interface e o cdigo, pois voc deve modificar todas as instncias se o controle for genrico. Se o cdigo do user controle genrico ou no for logicamente abstrato, voc precisa reescrever o cdigo em cada pgina em que estiver sendo usado. O cdigo fica visvel. O arquivo com o code-behind visvel a qualquer um que tenha acesso a aplicao web, ano ser que esta seja uma aplicao prcompilada.

Convertendo um Web Form em um User Control Remova todos elementos HTML de alto nvel Mude a diretiva Page para Control Adicione o atributo ClassName a diretiva Control Mude a extenso de aspx para ascx Mude o tipo de classe para UserControl 54

Adicione propriedades ao controle para permitir acesso aos dados privados do user control, se houver algum. Essas propriedades funcionam da mesma maneira que em um Web Form.

Adicionando um User Control a um Web Form


Voc adiciona um user control em um Web Form utilizando a diretiva Register:
<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>

O atributo tagprefix determina um namespace nico para cada controle inserido pgina. O atributo TagName nico para cada user control. O atributo Src o caminho virtual para o arquivo do mesmo. Aps voc registrar o controle, voc pode inserir o mesmo na pgina como qualquer outro controle. Por exemplo:
<uc1:WebUserControl ID="WebUserControl1" runat="server" />

Voc tambm pode arrastar um user control do Solution Explorer para o Web Form. Quando voc faz isso, o Visual Studio automaticamente adiciona a diretiva Register pgina.

55

Unidade 10 Acessando Dados com ADO

O ADO.NET um conjunto de classes que voc pode utilizar para manipular dados, e especificamente desenhado para gerenciar conexes em um ambiente desconectado. Alm de ser uma boa opo para aplicaes web, o ADO.NET utiliza o formato XML para transmisso de dados entre a aplicao e o banco de dados. composto de duas camadas, uma conectada e outra desconectada.

Camada Desconectada
A camada desconectada consiste em um nmero de classes para armazenamento de dados e relaes. A classe DataSet a classe principal de aramazenamento de dados em cach de memria. Contm uma coleo ou mais de objetos DataTable que so compostos de linhas e colunas de dados, chave primria, chave estrangeira, constraints, e informaes sobre os relacionamentos dos dados nos objetos DataTable. Voc pode imaginar a classe DataSet como uma representao em memria do banco de dados.

Camada Conectada
A camada conectada responsvel pelo trfego de dados entre a aplicao e a fonte de dados. A camada conectada especfica para cada banco de dados, como o SQL Server ou arquivo XML. A camada conectada tambm conhecida como provedora de dados e o ADO.NET j vem com alguns provedores de dados prontos para uso, incluindo: SQL Server .NET Framework Data Provider. Para acesso a bases SQL Server 7.0 e verses posteriores. OLE DB .NET Framework Data Provider. Para acessar qualquer fonte OLE DB que voc tenha um provedor OLE DB. ODBC .NET Framework Data Provider. Para acessar qualquer fonte ODBC para qual voc prossua um driver ODBC.

Um grande nmero de terceiros,incluindo IBM e ORACLE, fornecem implementaes de Data Providers para o Framework .NET.

ADO Object Model


Camada Desconectada

56

A camada desconectada independente da fonte de dados pode ser usada para gerenciamento da informao em memria. Em funo disso, pode ser usada com mltiplas fontes de dados, ou dados XML, ou para gerenciar dados locais da aplicao. Opcionalmente, voc pode conectar a alguma fonte de dados usando a camada conectada. composta das seguintes classes, encontradas no namespace System.Data: Tipo Constraint Descrio Representa uma restrio que rege um ou mais objetos DataColumn. Uma constraint uma regra que usada para manter a integridade dos dados em uma tabela. A classe abstrata Constraint tem duas classes derivadas que so usadas para chaves primrias e/ou colunas de valores nicos utilizando a classe UniqueConstraint. A classe base abstrata Constraint tambm contem a ao a ser executada sobre os dados de uma tabela filha quando os dados de uma tabela paid apagada usando a classe ForeignKeyConstraint. Representa uma simples coluna de um DataTable, mltiplos objetos DataColumn representam a estrutura de um DataTable. Representa uma relao pai/filho entre dois objetos DataTable. Um objeto DataRelation unido a um numero igual de objetos DataColumn de dois objetos DataTable diferentes. O bjeto DataRelation permite a navegao entre tabelas relacionadas. Representa um registro de dado em um objeto DataTable. Esse o container geral de objetos que representa um objeto database na memria,consistindo de um ou mais objetos DataTable e zero ou mais objetos DataRelation. Esse classe serializavel. Representa uma tabela de dados em memria. A estrutura composta de um ou mais objetos DataColumn, e a informao salva em objetos DataRow. Essa classe serializavel e pode ser transportada via rede. Obtem o contedo de um mais objetos DataTable na forma de um ou mais read-only, forward-only result sets. Representa uma viso customizada de um DataTable, que pode ser utilizado para ordenar, filtrar, procurar, editar, e navegar.

DataColumn DataRelation

DataRow DataSet

DataTable

DataTableReader DataView

Camada Conectada

A camada conectada, fornece um link entre a fonte de dados e a camada desconectada. Os tipos bsicos, encontrados no namespace System.Data.Common esto listados abaixo. A camada conectada inclui as classes DataAdapter, Connection, Command e DataReader. Que so Data Providers desenhados para manipulao de dados e para rpida acessos leitura de dados, forward-only, read-only.O objeto Commandpermite acesso a comandos do banco de dados, permite retornar dados ao banco, modificar informao, executar stored procedures, e enviar ou receber parmetros. A classe DataReader fornece um stream de dados de alta performance. E a classe DataAdapter

57

fornece a ponte entre o objeto DataSet e a fonte de dados. A classe DataAdapter utiliza o objeto Command para executar comandos SQL na fonte de dados tanto para caregar o DataSet como para reconciliar as mudanas que foram feitas no objeto DataSet, de volta para banco. DBCommand Representa um comando SQL ou stored procedure a ser executada no banco de dados. Esse tipo normalmente dividido em quatro diferente grupos, um para seleo de dados, um para insero, um para atualizao e um quarto para excluso. Representa a conexo fonte de dados e se conecta a ela a partir de uma connection string. Representa uma conexo a um banco de dados e a um conjunto de comandos SQL que so usados para preencher um DataSet e/ou um DataTable, e atualizar a fonte de dados.Esse objeto um mediador entre cliente e servidor, e usa um objeto de conexo e comando para executar suas tarefas. L um stream de registros de um data source (forward-only, readonly).

DbConnection DbDataAdapter

DbDataReader

Os tipos listados so tipos abstratos e precisam ser herdados. Voc precisa utilizar os seguintes tipos para implementaes especficas de banco de dados: Para uso com SQL Server .NET Data Provider, voc precisa das classes SqlDataAdapter, SqlDataReader, SqlCommand, e SqlConnection, encontrados no namespace System.Data.SqlClient. Para uso com OLE DB .NET Data Provider, voc tem OleDbDataAdapter, OleDbDataReader, OleDbCommand, e OleDbConnection, todas sob o namespace System.Data.OleDb. Para uso com ODBC .NET Data Provider, voc tem OdbcDataAdapter, OdbcDataReader, OdbcCommand e OdbcConnection, todas sob o namespace System.Data.Odbc. Para uso com Oracle .NET Data Provider, voc em OracleDataAdapter, OracleDataReader, OracleCommand, and OracleConnection, todas sob o namespace System.Data.OracleClient. Voc pode utilizar essas classes para os bancos Oracle verso 8.1.7 ou mais recentes.

Observao: voc no pode misturar os tipos da camada conectada. Todos os tipos utilizados para gerenciar dados em uma determinada fonte, devem vir do mesmo .NET Data Provider.

Contectando a um Banco de Dados


Criando um Banco de Dados

Crie um novo projeto em File > New Web Site, selecione o template ASP.NET Web Site, de o nome de WebSite3, utiliza a linguagen Visual C#, e clique em Ok. No Solution Explorer, sobre a pasta App_Data, clique em Add New Item... , selecione Sql Server Database, utilize o nome Database.mdf, e clique em Add. 58

Na aba Server Explorer ( View >Server Explorer ), abra expanda o ramo Database.mdf e clique com o boto direito sobre o item Tables:

Clique com o boto direito, selecione Add New Table, e insira a seguinte definio:

Clique com o boto direito sobre a linha id, e selecione a opo Set Primary Key, e na aba Properties marque a opo IsIdentity com Yes:

59

Clique em File > Save Table, nomeie a tabela como Contatos e clique Ok.

Criando um Formulrio de Insero de Dados Na aba Solution Explorer, clique sobre a pgina Default.aspx e abra para edio no modo Source. Criaremos um formulrio de entrada de dados para os campos nome, email, telefone, e um boto salvar que executar a entrada dos dados.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Insero de Dados</title> </head> <body> <form id="form1" runat="server"> <div> <table style="width: 100%;"> <tr> <td>Nome: </td> <td> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> </td> </tr> <tr> <td> EMail: </td> <td> <asp:TextBox ID="txtEMail" runat="server"></asp:TextBox> </td> </tr> <tr>

60

<td> Telefone: </td> <td> <asp:TextBox ID="txtTelefone" runat="server"></asp:TextBox> </td> </tr> <tr> <td> &nbsp; </td> <td> <asp:Button ID="btnSalvar" runat="server" Text="Salvar" /> </td> </tr> </table> </div> </form> </body> </html>

No modo de Design, clique duas vezes sobre o boto Salvar do formulrio e inclua os namespaces na pgina:
using System.Data.SqlClient;

O cdigo para insero:


using using using using using using using using using using using using System; System.Configuration; System.Data; System.Linq; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.HtmlControls; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Xml.Linq; System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnSalvar_Click(object sender, EventArgs e) { // inicializa conexo ao banco // C:\sites\WebSite3\App_Data\Database.mdf // altere conforme a localizao da sua aplicao SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\sites\WebSite3\App_Data\Databa

61

se.mdf;Integrated Security=True;User Instance=True"); conn.Open(); // cria um novo comando SQL SqlCommand cmd = new SqlCommand( "INSERT INTO Contatos (nome, email, telefone) VALUES ( @nome, @email, @telefone )", conn); // cria os parametros do comando SqlParameter[] parametro = new SqlParameter[3]; parametro[0] = new SqlParameter("nome", txtNome.Text); parametro[1] = new SqlParameter("email", txtEMail.Text); parametro[2] = new SqlParameter("telefone", txtTelefone.Text); // substitui parametros no comando cmd.Parameters.AddRange(parametro); // executa comando SQL no banco cmd.ExecuteNonQuery(); // fecha conexao conn.Close(); Response.Redirect("Default.aspx"); } }

Salve e execute a pgina em Debug > Start Debugging, e insira alguns registros. OBSERVAO: para obter a string de conexo do banco, na aba Server Explorer, clique com o boto direito sobre o banco de dados, selecione Properties, e copie a string que se encontra na propriedade Connection String. Criando uma Listagem de Dados Para a listagem utilizaremos o controle de dados DataGrid, que recebe um DataReader como fonte de dados. No solution Explorer, sobre a localizao da aplicao, clique com o boto direito e selecione a opo Add New Item, template Web Form, nomeie o mesmo como listagem.aspx, linguagem C#,e marque a opo Place code in a separate file. Abra o arquivo listagem.aspx para edio, no modo Source, e insira um controle GridView a partir da aba Data da Toolbox, e altere o nome do mesmo para gvListagem.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="listagem.aspx.cs" Inherits="listagem" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">

62

<title>Listagem</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gvListagem" runat="server"> </asp:GridView> </div> </form> </body> </html>

Clique com o boto direito sobre o cdigo e selecione View Code e insira o seguinte cdigo no evento Page_Load, tomando cuidado de importar o namespace using System.Data.SqlClient;.
using using using using using using using using using using using using using System; System.Collections; System.Configuration; System.Data; System.Linq; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.HtmlControls; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Xml.Linq; System.Data.SqlClient;

public partial class listagem : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // inicializa conexo ao banco // C:\sites\WebSite3\App_Data\Database.mdf // altere conforme a localizao da sua aplicao SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\sites\WebSite3\App_Data\Databa se.mdf;Integrated Security=True;User Instance=True"); conn.Open(); // cria um novo comando SQL SqlCommand cmd = new SqlCommand("SELECT * FROM Contatos", conn); // cria um novo DataAdapter apartir do comando SQL SqlDataAdapter adapter = new SqlDataAdapter(cmd); // cria um DataSet para leitura dos dados DataSet ds = new DataSet(); // preenche o DataSet adapter.Fill(ds); // liga o DataSet a GridView gvListagem.DataSource = ds; gvListagem.DataBind();

63

// fecha a conexo conn.Close(); } }

Salve e execute a pgina em Debug > Start Debugging.

64

Unidade 11 Lendo e Escrevendo Dados XML

O XML um formato para a criao de documentos com dados organizados de forma hierrquica, como se v, frequentemente, em documentos de texto formatados, imagens vetoriais ou bancos de dados. um subtipo de SGML (acrnimo de Standard Generalized Markup Language, ou Linguagem Padronizada de Marcao Genrica) capaz de descrever diversos tipos de dados. Seu propsito principal a facilidade de compartilhamento de informaes atravs da Internet. Pela sua portabilidade, j que um formato que no depende das plataformas de hardware ou de software, um banco de dados pode, atravs de uma aplicao, escrever em um arquivo XML, e um outro banco distinto pode ler ento estes mesmos dados. Tambm um formato de cdigo fcil de ler. Veja abaixo exemplo de cdigo XML descrevendo um currculo:
<?xml version="1.0" encoding="UTF-8"?> <curriculo> <InformacaoPessoal> <DataNascimento>23-07-68</DataNascimento> <Nomecompleto>...</Nomecompleto> <Contatos> <Morada> <Rua>R.Topazio</Rua> <Num>111</Num> <Cidade>Porto</Cidade> <Pais>Portugal</Pais> </Morada> <Telefone>9999-9999</Telefone> <CorreioEletronico>email@email.com</CorreioEletronico> </Contatos> <Nacionalidade>Portuguesa</Nacionalidade> <Sexo>M</Sexo> </InformacaoPessoal> <objetivo>Atuar na area de TI</objetivo> <Experiencia> <Cargo>Suporte tecnico</Cargo> <Empregador>Empresa, Cidade - Estado</Empregador> </Experiencia> <Formacao>Superior Completo</Formacao> </curriculo>

65

Criando um Arquivo XML


Podemos gerar facilmente um arquivo XML apartir de um objeto DataTable, tanto criando e alimentando seus dados via cdigo, como obtendo dados atravs de um comando SQL que acesse uma base de dados. Primeiramente criamos o DataTable, e adicionamos as colunas com iro compor a sua estrutura e salvando essa estrutura em um arquivo de template:
DataTable planilha = new DataTable("Template"); planilha.Columns.Add("Matricula"); planilha.Columns.Add("Nome"); planilha.Columns.Add("Nota1"); planilha.Columns.Add("Nota2"); planilha.WriteXmlSchema(@"c:\TemplateAlunos.xml");

Em seguida adicionamos os dados, apartir da estrutura criada, adicionar dados ao XML, utilizando um objeto DataTable e salvando os mesmos:
DataTable planilha = new DataTable("Template"); planilha.Columns.Add("Matricula"); planilha.Columns.Add("Nome"); planilha.Columns.Add("Nota1"); planilha.Columns.Add("Nota2"); planilha.WriteXmlSchema(@"c:\TemplateAlunos.xml"); planilha.ReadXmlSchema(@"c:\TemplateAlunos.xml"); DataRow linha = planilha.NewRow(); //atribuindo valores a linha linha["Matricula"] = "243343"; linha["Nome"] = "Joao Bosco"; linha["Nota1"] = "10"; linha["Nota2"] = "5"; planilha.Rows.Add(linha); planilha.WriteXmlSchema(@"c:\TemplateAlunos.xml"); planilha.WriteXml(@"c:\alunos.xml");

Lendo um Arquivo XML


Da mesma forma, podemos ler um XML utilizando as mesmas estruturas que so utilizadas para acesso a dados e para a sua leitura, tanto acessar sequencialmente sua estrutura como associar seus dados a um controle GridView. Por exemplo, em uma pgina que contenha uma GridView:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

66

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gvXml" runat="server"> </asp:GridView> </div> </form> </body> </html>

Poderamos ter os dados do XML gerado no exerccio anterior associado da seguinte forma:
using using using using using using using using using using using System; System.Configuration; System.Data; System.Linq; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.HtmlControls; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Xml.Linq;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { DataTable tabela = new DataTable(); tabela.ReadXmlSchema(@"c:\TemplateAlunos.xml"); tabela.ReadXml(@"c:\alunos.xml"); gvXml.DataSource = planilha; gvXml.DataBind(); } }

67

Segurana em aplicaes ASP.NET

Unidade 12 Criando um Aplicativo ASP.NET AJAX

Aplicaes AJAX so aplicaes que obtm dados do servidor de forma assncrona em background sem afetar a aparncia e o comportamento da pgina. O ASP.NET AJAX uma srie de extenses para o ASP.NET desenvolvidas pela Microsoft que permitem implementar funcionalidades AJAX, criando pginas com atualizaes parciais, somente nas reas em que sofrem alteraes. Isso d ao usurio uma melhor experincia que emula as interfaces das aplicaes desktop. AJAX no uma tecnologia, mas sim um termo que se refere ao uso de um grupo de tecnologias e a sigla para Asynchronous JavaScript and XML. AJAX usa uma combinao que utiliza: Objeto XMLHttpRequest, que permite troca de dados entre a pgina e o servidor web de forma assicrona. HTML, XHTML e CSS, que prov marcao e estilos para a pgina Web. XML e outros formatos para transferncia de dados como JavaScript Object Notation (JSON) Document Object Model (DOM), que permite ao JavaScript interagir com o documento web.

O Framework ASP.NET AJAX inclu: Server-side ASP.NET AJAX. Incluso no ASP.NET 3.5 para construo de Server controls. Esses componentes tambm esto disponveis no ASP.NET 2.0 em um pacote a parte chamado ASP.NET 1.0 extensions. Client-side ASP.NET AJAX. A Microsoft Ajax Library 3.5 um biblioteca javascript que fornece funcionalidades client-side para o ASP.NET AJAX Framework. integrada ao ASP.NET 3.5 e disponibilizada tambm em download a parte para uso em outro ambiente como PHP. AJAX control toolkit, um projeto open-source, um esforo conjunto entre Microsoft e comunidade que prov infra estrutura para construo de controles ASP.NET AJAX. jQuery , biblioteca javascript focada na manipulao do DOM. ASP.NET 2.0 AJAX Templates, um pacote com uma srie de templates para construo de aplicaes ASP.NET AJAX.

Namespaces
O AJAX implementado em diversos namespaces:

68

Segurana em aplicaes ASP.NET

Namespace System.Web.Configuration

System.Web.Handlers System.Web.Script.Serialization

System.Web.Script.Services System.Web.UI System.Web.UI.Design

Descrio Contm classes que permitem voc configurar o ASP.NET AJAX Extensions via programao Contm classes manipuladoras HTTP que processam requisies ao servidor Contem classes que fornecem serializao e deserializao JSON para tipos gerenciados. Tambm formas para estender e customizar a serializao. Prov atributos para customizar o suporte a web services para o AJAX. Classes e interfaces que permite a comunicao cliente-servidor Classes que podem ser utilizadas para estender o suporte ao ASP.NET AJAX durante o desenvolvimento.

Controles ASP.NET AJAX


Script Manager, utilizado para gerenciar o script cliente em pginas ASP.NET AJAX. Voc deve adicionar um ScriptManager pgian antes de utilizar o UpdatePanel, UpdateProgress ou Timer. Se voc tiver um ScriptManager em uma master page, voc precisar de um ScriptManagerProxy em uma content page se voc quiser utilizar AJAX nela. UpdatePanel, permite voc atualizar regies especficas da pgina. Uma pgina que contenha um ScriptManager e um ou mais UpdatePanels pode automaticamente ter atualizaes parciais. Para utiliza-lo voc deve adicionar uma instancia do controle na pgina e ento adicionar controles dentro dele. UpdateProgress, permite voc mostrar o progresso de um update parcial em um UpdatePanel. Pode trabalhar para toda a pgina ou para um UpdatePanel especfico. Timer, executa postbacks em intervalos definidos. Voc pode utilizar em conjunto com um UpdatePanel para executar atualizaes parciais na pgina de tempos em tempos. Ou usar para postar a pgina inteira.

Utilizando ASP.NET AJAX


Crie um novo projeto em File > New Web Site, utilize o nome c:\sites\WebSiteAjax, linguagem Visual C#. No modo de Design, adicione um label e atualize seu ID para lblNormal. A partir da aba AJAX Extensions da Toolbox, adicione um controle Script Manager pgina Default.aspx e atualize o seu ID para scriptManager. Adicione um controle UpdatePanel abaixo do controle ScriptManager.

69

Segurana em aplicaes ASP.NET

Adicione um Label dentro do UpdatePanel e atualize seu ID para lblAjax. Logo abaixo, dentro do UpdatePanel coloque um boto, atualize seu label para Atualizar Painel e seu ID para btnAtualizar. No evento Page_Load, utilize o seguinte cdigo:
lblNormal.Text = "Hora Carga da Pgina: " + DateTime.Now.ToString();

E no evento Click do boto:


lblAjax.Text = "Hora Ajax:" + DateTime.Now.ToString();

Voc ter seu cdigo:


using using using using using using using using using using using System; System.Configuration; System.Data; System.Linq; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.HtmlControls; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Xml.Linq;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { lblNormal.Text = "Hora Carga da Pgina: " + DateTime.Now.ToString(); } protected void btnAtualizar_Click(object sender, EventArgs e) { lblAjax.Text = "Hora Ajax:" + DateTime.Now.ToString(); } }

E seu pgina:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head>

70

Segurana em aplicaes ASP.NET <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblNormal" runat="server"></asp:Label> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label ID="lblAjax" runat="server" Text=""></asp:Label> <br /> <asp:Button ID="btnAtualizar" runat="server" Text="Atualizar Painel" onclick="btnAtualizar_Click" /> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>

Salve o projeto e execute. Ao clicar no boto Atualizar Painel somente o UpdatePanel atualizado. Ou seja, a pgina no est sendo postada e o evento Page_Load no est sendo acionado ao se clicar no boto, como aconteceria em uma pgina sem AJAX.

71

Segurana em aplicaes ASP.NET

Unidade 13 Segurana em Aplicaes ASP.NET

Para implementar segurana voc deve estar familiarizado com dos conceitos fundamentais: autenticao e autorizao.

Autenticao
Autenticao o processo de obter as credenciais de identificao, como nome e senha de um usurio, validando essas credenciais contra alguma autoridade como um banco de dados. Se as credenciais forem vlidas, a identidade que submetida considerada valida.

Autorizao
Depois que um cliente autenticado, o processo de autorizao determina se o cliente tem acesso a um determinado recurso ou no. O processo de autorizao limita o acesso permitindo ou negando permisses especficas a um determinado cliente autenticado.

Mtodos de Autenticao ASP.NET


Autenticao Windows Na autenticao Windows, a aplicao ASP.NET delega ao sistema operacional Windows a tarefa de autenticar o usurio junto com o Microsoft Internet Information Services (IIS). Na autenticao baseada no Windows, o usurio solicita uma pgina segura de uma aplicao Web, a requisio chega ao IIS. Se as credenciais do usurio no satisfizerem as condies de usurios autorizados da pgina, o IIS rejeita a requisio. O usurio ento, solicitado a digitar um usurio e senha em uma tela de login. As credenciais fornecidas so checadas novamente pelo IIS e se corretas, direciona para a pgina solicitada. So utilizados tipicamente no ambiente de intranets baseadas na plataforma Windows. E interessante por dar controle de acesso a nvel de recurso, permitindo por exemplo, que funcionrios de um determinado setor tenham acesso somente a suas pastas.

Autenticao Baseada em Formulrio Forms-based Authentication, se refere a um sistema onde requisies no autenticadas so direcionadas a um formulrio HTML usando protocolo HTTP para o 72

Segurana em aplicaes ASP.NET

usurio. O usurio fornece suas credenciais e submete o formulrio. O sistema ento cria um cookie de autenticao para o usurio aps valid-lo que passa a acompanhar o usurio durante a seo. o mtodo ideal para se ter um mtodo de autenticao customizado. o ideal para quase todas as aplicaes Internet. Permite voc armazenar as credenciais de usurio em arquivos XML, banco de dados, ou mesmo o web.config. Um exemplo de controle de acesso a uma pgina ou Master Page, durante o evento Page_Load, utilizando Session para verificar se o usurio j est logado no sistema:
protected void Page_Load(object sender, EventArgs e) { if (Session["AUTENTICADO"] == null) { // se no foi atribudo valor a varivel // de controle de sesso Response.Redirect("default.aspx"); } else if (!Convert.ToBoolean(Session["AUTENTICADO"])) { // se controle de login for false Response.Redirect("default.aspx"); //login } if (Request["acao"] != null && Request["acao"].Equals("sair")) { // se usurio solicitou encerramento da seo Session["AUTENTICADO"] = null; Session["USUARIO"] = null; Response.Redirect("default.aspx"); //login } // nenhuma das opes acima, usurio OK pode acessar a pgina }

Exemplo de um formulrio de Login:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <table align="center"> <tr> <td>Usurio</td> <td> <asp:TextBox ID="txtUsuario" runat="server"></asp:TextBox> </td>

73

Segurana em aplicaes ASP.NET </tr> <tr> <td>Senha</td> <td> <asp:TextBox ID="txtSenha" runat="server" TextMode="Password"></asp:TextBox> </td> </tr> <tr> <td></td> <td> <asp:Button ID="btnLogin" runat="server" Text="entrar" /> </td> </tr> <tr> <td colspan="2"> <asp:Label ID="txtResultado" runat="server" Text=""></asp:Label> </td> </tr> </table> </div> </form> </body> </html>

Cdigo de Autenticao:
using using using using using using using using using using using using System; System.Configuration; System.Data; System.Linq; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.HtmlControls; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Xml.Linq; System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnLogin_Click(object sender, EventArgs e) { if (txtUsuario.Text != "" && txtSenha.Text != "") { // inicializa conexo ao banco SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=c:\sites\WebSite4\App_Data\Databa se.mdf;Integrated Security=True;User Instance=True"); conn.Open();

74

Segurana em aplicaes ASP.NET

// cria um novo comando SQL SqlCommand cmd = new SqlCommand("SELECT * FROM usuario WHERE usuario=@usuario AND senha=@senha", conn); // cria os parametros do comando SqlParameter[] parametro = new SqlParameter[2]; parametro[0] = new SqlParameter("usuario", txtUsuario.Text); parametro[1] = new SqlParameter("senha", txtSenha.Text); // substitui parametros no comando cmd.Parameters.AddRange(parametro); // executa a consula SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { // usurio ok, entra no sistema Session["AUTENTICADO"] = true; Session["USUARIO"] = txtUsuario.Text; Response.Redirect("Default.aspx"); } // fecha conexao conn.Close(); // usurio invlido, volta a tela de login Response.Redirect("Login.aspx"); } } }

SQL Injection
A Injeo de SQL, mais conhecida atravs do termo americano SQL Injection, um tipo de ameaa de segurana que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeo de SQL ocorre quando o atacante consegue inserir uma srie de instrues SQL dentro de uma consulta (query) atravs da manipulao das entrada de dados de uma aplicao. Para nos prevenirmos contra esse tipo de ataque, o ASP.NET fornece o objeto SqlCommand, junto com a estrutura SqlParameter. Juntos, eles fazem a validao e ajustes nos dados que o usurio envia e que venham a compor o comando SQL. Exemplo de utilizao:
// cria um novo comando SQL SqlCommand cmd = new SqlCommand("SELECT * FROM usuario WHERE usuario=@usuario AND senha=@senha", conn); // cria os parametros do comando SqlParameter[] parametro = new SqlParameter[2];

75

Segurana em aplicaes ASP.NET parametro[0] = new SqlParameter("usuario", txtUsuario.Text); parametro[1] = new SqlParameter("senha", txtSenha.Text); // substitui parametros no comando cmd.Parameters.AddRange(parametro);

76

Segurana em aplicaes ASP.NET

77