Sunteți pe pagina 1din 123

Curso ASP.

NET por e-Learning

Relatrio de projecto
990329 Paulo Silva

Junho de 2004

Autor do projecto Paulo Alexandre Nogueira da Silva Orientador do projecto Dr. Carlos Miguel Miranda Vaz de Carvalho

Agradecimentos
Aps o grande empenho neste projecto, desde o ms de Maro deste ano, venho neste pequeno espao agradecer a todos aqueles que foram uma verdadeira ajuda ao longo deste tempo.

Em primeiro lugar agradeo minha namorada Slvia Duarte, por todo o apoio.

Ana Ferreira, nunca esquecerei a sua preciosa ajuda na correco dos textos, o meu muito obrigado.

A todos aqueles que me apoiaram neste ultimo semestre para que os meus objectivos fossem alcanados.

A terminar agradeo ao meu orientador Dr. Carlos Vaz de Carvalho por ter apadrinhado este projecto.

Indces

ndice geral
Agradecimentos............................................................................................................ v 1. Introduo ........................................................................................................... 9 Resumo .................................................................................................................... 9 Esquema do relatrio................................................................................................ 9 Motivao ................................................................................................................. 9 Metodologia ............................................................................................................ 10 2. Curso ................................................................................................................. 11

Introduo .................................................................................................................. 11 Objectivos do curso ................................................................................................ 11 Pblico-alvo ............................................................................................................ 11 Pr-requisitos ......................................................................................................... 11 Metodologia de aprendizagem................................................................................ 12 Requisitos tcnicos................................................................................................. 12 Mdulo1 Introduo ao ASP.NET ............................................................................ 13 Objectivos do mdulo ............................................................................................. 13 Sumrio .................................................................................................................. 13 Aula 1 Viso geral do Microsoft .Net e do .Net Framework .................................. 14 .NET ................................................................................................................... 14 .NET Framework................................................................................................. 14 Aula 2 Conceitos ASP.NET.................................................................................. 17 O que o ASP.NET?.......................................................................................... 17 O que necessrio para comear a programar em ASP.NET? .......................... 18 Processamento de uma pgina ASP.NET........................................................... 18 Modelos de programao ASP.NET ................................................................... 19 Uma pgina ASP.NET..................................................................................... 20 Aula 3 Diferenas entre ASP e ASP.NET ............................................................ 23 Auto-avaliao do mdulo 1.................................................................................... 24 Mdulo 2 Usando Web Forms e Controls............................................................ 25 Objectivos do mdulo ............................................................................................. 25 Sumrio .................................................................................................................. 25 Aula 1 O que so Web Forms e Controls?........................................................... 26 HtmlControls ....................................................................................................... 26 WebControls ....................................................................................................... 27 Aula 2 Criao de Web Forms ............................................................................. 30

vi

Indces Aula 3 Usando controles para validao de formulrios....................................... 35 Aula 4 Tratamento de eventos ............................................................................. 40 Aula 5 Formulrios autenticados.......................................................................... 44 Auto-avaliao do mdulo 2.................................................................................... 48 Mdulo 3 Utilizao do ADO.NET............................................................................ 49 Objectivos do mdulo ............................................................................................. 49 Sumrio .................................................................................................................. 49 Aula 1 Viso geral do ADO.NET .......................................................................... 50 Aula 2 Ligao a uma fonte de dados.................................................................. 52 Ligao a uma base de dados MS Access.......................................................... 52 Ligao a uma base de dados Sql Server........................................................... 53 Aula 3 Operaes sobre os dados de uma base de dados .................................. 55 Ler dados de uma base de dados....................................................................... 55 Inserir dados numa base de dados ..................................................................... 57 Actualizar dados de uma base de dados ............................................................ 60 Apagar dados de uma base de dados................................................................. 61 Aula 4 Usando o DataSet..................................................................................... 63 Preencher um DataSet........................................................................................ 63 Inserir e actualizar dados com DataSet............................................................... 65 Aula 5 DataGrid e DataList .................................................................................. 67 Controlo DataGrid ............................................................................................... 67 Aula 6 Associar a dados Extensible Markup Language........................................ 75 Auto-avaliao do mdulo 3.................................................................................... 80 Mdulo 4 Separar cdigo e contedo ...................................................................... 81 Objectivos do mdulo ............................................................................................. 81 Sumrio .................................................................................................................. 81 Aula 1 Separar cdigo e contedo ....................................................................... 82 Aula 2 Criar, atrvs da utilizao de pginas code behind com o VS .NET.......... 84 Aula 3 Criar e usar User Controls ........................................................................ 88 Aula 4 Criar e usar componentes......................................................................... 91 Auto-avaliao do mdulo 4.................................................................................... 96 Mdulo 5 Web Services........................................................................................... 97 Objectivos do mdulo ............................................................................................. 97 Sumrio .................................................................................................................. 97 Aula 1 O que um servio Web?......................................................................... 98 Aula 2 Chamar um servio Web existente na web ............................................. 100 Aula 3 Criar e chamar um servio Web usando o VS .NET................................ 103

vii

Indces Auto-avaliao do mdulo 5.................................................................................. 106 Mdulo 6 Criao de uma aplicao Web ASP.NET.............................................. 107 Objectivos do mdulo ........................................................................................... 107 Sumrio ................................................................................................................ 107 Aula 1 Segurana em ASP.NET ........................................................................ 108 Aula 2 Configurar aplicaes ASP.NET ............................................................. 111 Aula 3 Exemplo prtico Loja on-line ................................................................ 118 Auto-avaliao do mdulo 6.................................................................................. 120 3. 4. Concluso ....................................................................................................... 121 Bibliografia ...................................................................................................... 122

viii

Introduo

1. Introduo
Resumo

Este trabalho foi realizado no mbito da cadeira de projecto do 5 ano, durante o 2 semestre do ano lectivo 2003/2004. O objectivo deste trabalho apresentar os contedos a dar em vrias aulas relativamente a um curso ASP.NET por e-learning. O curso est dividido em mdulos e esses mdulos em aulas, que tm como objectivo transmitir conhecimentos de ASP.NET a alunos que j tenham alguma noo de programao e principalmente programao para a web. Ficando no final do curso aptos a desenvolver aplicaes para a web com um nvel de complexidade bastante razovel.

Esquema do relatrio

O relatrio encontra-se dividido em 5 partes:

Introduo, pequena introduo ao relatrio em si; e-Learning aplicado a este curso; Curso ASP.NET em modo de e-Learning, este o captulo central do relatrio, contm o curso propriamente dito. Concluso, do projecto.

Motivao

O que me levou a propor este tema para projecto foi o facto de ter um conhecimento avanado dos clssicos ASP, e estar interessado em adquirir conhecimentos em ASP.NET para ficar com bons conhecimentos no desenvolvimento de aplicaes para a Web, uma rea que me agrada bastante.

Introduo

Metodologia

A realizao deste trabalho teve como principal fonte as pesquisas na Internet, de forma a adquirir material referente ao tema. A seleco foi feita de forma a obter o melhor material de ASP.NET. Os meus conhecimentos em ASP tambm ajudaram elaborao do projecto. A elaborao do projecto pode ser dividida em trs fases:

Na primeira fase recolhi o material acerca do ASP.NET, exemplos, dicas, formas de criar aplicaes, etc. Neste passo no fiz qualquer seleco. Na segunda fase analisei e seleccionei o melhor material, o material que de uma forma simples demonstrasse a matria em estudo. Na terceira e ltima fase elaborei os contedos para o curso ASP.NET por elearning.

10

Introduo ao curso

2. Curso

Introduo
Este curso de ASP.NET por e-learning constitudo por seis mdulos, num total de 24 aulas. No final, o aluno dever compreender o funcionamento do .NET e a nova forma de criar aplicaes web. Criar aplicaes simples e elaboradas em ASP.NET.

Objectivos do curso
O objectivo deste curso ensinar, a pessoas com conhecimentos prvios em ASP, ou a pessoas com conhecimentos de programao, a nova forma de criar aplicaes Web com a nova verso do Microsoft Active Server Pages, o ASP.NET.

Pblico-alvo
Destina-se a pessoas com conhecimentos em ASP ou em programao.

Pr-requisitos
Para obter um aproveitamento mximo do curso, o aluno dever ter conhecimentos em: Microsoft Visual Basic HTML Conhecimento de ASP 11

Introduo ao curso Base de Dados e SQL

Este curso ideal para quem preencher estes requisitos. No entanto, todo o aluno que possua conhecimentos de programao poder aproveitar o curso, embora com mais um pouco de esforo, possa atingir o aproveitamento mximo.

Metodologia de aprendizagem
O curso est dividido em seis mdulos, num total de vinte e quatro aulas. O aluno ter a ajuda do professor, quando esta for solicitada.

Requisitos tcnicos
Software necessrio para os exerccios:

Windows 2000 ou Windows XP IIS V. 5.1 (Servio de informao internet) Microsoft .NET Framework Web Matrix (Ferramenta gratuita da Microsoft) Microsoft Visual Studio .NET (preferencial) MSDN Library (opcional).

Hardware mnimo:

Pentium II 300 MHz, 128 Mbytes de RAM, 1,5 GigaBytes de espao livre no HD, Drive de CD-ROM, placa de som e acesso Internet.

12

Introduo ao ASP.NET

Mdulo1 Introduo ao ASP.NET


Objectivos do mdulo
O objectivo deste primeiro mdulo consiste em dar a conhecer as noes da nova forma de criar aplicaes, o .NET e o .NET Framework que contm o ASP.NET, a sua importncia, o seu funcionamento, as suas diferenas em relao ao ASP clssico, e o que necessrio para correr ASP.NET num PC.

Sumrio
Aula 1 Viso geral do Microsoft .NET e do .NET Framework Aula 2 Conceitos ASP.NET Aula 3 Diferenas entre ASP e ASP.NET

13

Introduo ao ASP.NET

Aula 1 Viso geral do Microsoft .Net e do .Net Framework

.NET
Para iniciar, vamos, ento, saber o que o .NET. O .NET uma tecnologia da Microsoft, permite a interligao de uma grande variedade de tecnologias, de dispositivos mveis, de servidores, e muitos outros dispositivos, permitindo aceder informao, onde e sempre que for necessrio. O .NET possibilita que aplicaes, novas ou j existentes, liguem os seus dados e transaces independentemente do sistema operativo, do tipo de computador ou do dispositivo mvel que esteja a ser utilizado, ou que linguagem de programao tenha sido utilizada na sua criao. Ou seja, permite o acesso a informaes a qualquer hora, em qualquer lugar e em qualquer dispositivo. Aqui ficou uma ideia do que o .NET, mas poder fazer uma pesquisa na internet para obter muito mais informao e ficar com uma ideia mais aprofundada do .NET.

.NET Framework
Do ponto de vista dos programadores, .NET Framework o sistema operacional. O .NET Framework o ambiente que permite o desenvolvimento e a execuo de aplicaes .NET. O ambiente dividido em duas partes principais, nomeadamente, a common language runtime (CLR), que permite compilar e executar diversas linguagens, desde que preparadas para este ambiente, sendo, algumas delas, o VB.NET e o C#.NET, entre diversas outras disponveis no mercado; e uma biblioteca de classes, estruturada de forma hierrquica, que inclui um avanado sistema de pginas activas, o ASP.NET, um ambiente para construir aplicaes Windows, o Windows Forms, e ainda um sistema de acesso a dados, o ADO.NET. Uma caracterstica interessante do .NET a de que linguagens diferentes podem utilizar classes escritas noutras linguagens, fazendo por exemplo, herana das mesmas.

14

Introduo ao ASP.NET

Imagem 1 Framework

Dadas as necessidades e complexidade das aplicaes actuais, existem centenas de classes disponibilizadas pelo .NET Framework que oferecem diversos servios, como por exemplo: Acesso a base de dados; Conexes TCP/IP; Segurana; Desenho e impresso;

Usar as classes da biblioteca algo simples. Em geral, basta criar um objecto da classe desejada e invocar os seus mtodos e propriedades. Vejamos um exemplo em C# para mostrar o contedo de um ficheiro na consola:

// Programa C# para mostrar um ficheiro na consola // Este programa usa uma classe da .NET FrameWork // Indica que "namespaces" esto a ser referenciados using System; using System.IO; public class Class1 { public static int Main(string[] args) {

15

Introduo ao ASP.NET
// Cria objeto para ler ficheirod. Note que no necessrio libertar o objeto criado StreamReader L = new StreamReader(@"c:\ficheiro.txt"); // l o ficheiro todo e coloca-o numa varivel com um mtodo da classe string S = L.ReadToEnd(); // Mostra na consola Console.WriteLine(S); return 0; } }

Em concluso, podemos dizer que o .NET Framework consiste numa biblioteca de classes que rene todas as funes normalmente associadas ao sistema operativo, que facilita a criao de aplicaes.

16

Introduo ao ASP.NET

Aula 2 Conceitos ASP.NET

O que o ASP.NET?
ASP (Active Servers Page) uma tecnologia que a Microsoft criou para permitir o desenvolvimento de pginas www de forma rpida, fcil e sem complicaes. Desde o seu aparecimento, houve um aumento significativo na quantidade dos programadores para www. Mas, como nem tudo perfeito, o ASP, com o tempo, denunciou alguns pontos fracos que foram surgindo com o acrscimo da necessidade dos utilizadores e da exigncia das aplicaes. Neste contexto, a Microsoft criou a ASP.NET, que no apenas uma nova verso do ASP, mas sim, uma mudana profunda no modelo de programao do ASP, uma forma completamente diferente de construir aplicaes Web. Agora ficou tudo mais fcil na vida do programador, no somente na criao de pginas Web, mas, tambm, na criao de aplicaes Web mais elaboradas Web Services. Agora, o programador poder desenvolver aplicaes Web como desenvolve aplicaes em Visual Basic para o Windows, ou seja, um modelo de programao orientado a eventos. As aplicaes construdas em ASP.NET so colocadas no Microsoft IIS e usam protocolos de internet como HTTP e SOAP. Os benefcios desta nova forma de criar aplicaes para a Web so inmeros, nomeadamente:

Orientao a objectos As aplicaes Web so escritas numa das linguagens suportadas pelo Framework.NET e essas so orientadas a objectos.

Pginas compiladas Aps a pgina ter sido requisitada, o Framework verifica se essa pgina j foi compilada e, caso no tenha sido, compila s a primeira vez. Sendo assim, nas prximas requisies, a pgina no ser compilada e a execuo ser muito mais rpida.

Componentes agora, tudo pode ser designado de componente, nomeadamente, Web Controls, Html Controls, User Controls, Custom Controls e outros Controls complexos que s o ASP.NET tem.

17

Introduo ao ASP.NET Suporte do Framework.NET Como o ASP.NET do Framework, para alm de suportar as classes do ASP.NET, suporta todas as classes do Framework, pelo que, a maior parte dos mtodos de que necessitamos j esto feitos.

Configurao da aplicao Toda a configurao da aplicao feita atravs de um ficheiro XML. Sendo assim, no necessrio recompilar a aplicao aps uma eventual mudana, pois o Framework faz isso automaticamente.

O que necessrio para comear a programar em ASP.NET?


Agora que j possui algumas noes sobre ASP.NET e a nova forma de desenvolver aplicaes Web, passemos prtica, vejamos o que necessrio para comear a programar em ASP.NET. O material mais importante um computador. Esse computador ter de ter como sistema operativo, o Windows 2000, XP ou NT. (De realar o facto que apenas nestes sistemas operativos corremos aplicaes ASP.NET.); ter instalado o IIS (Internet Information Services) e o .NET Framework, sendo apenas necessrios na mquina onde a aplicao vai estar hospedada e na mquina de desenvolvimento; ter uma ferramenta de desenvolvimento, como por exemplo o Visual Studio. NET 2003, uma ferramenta poderosssima para o desenvolvimento de aplicaes e no, apenas, o ASP.NET. O WebMatrix uma ferramenta gratuita para o desenvolvimento fcil de aplicaes ASP.NET, mas tambm poder usar o simples NotePad, embora este exija conhecimentos profundos nesta rea. Poder tambm utilizar outra ferramenta qualquer do mercado. Agora, j possui os conhecimentos necessrios para criar as suas aplicaes ASP.NET.

Processamento de uma pgina ASP.NET


Como j foi dito, anteriormente, as pginas ASP.NET so compiladas. E o que que isto significa? Para entender isto, devemos reparar na plataforma .NET. Na verdade, a grande jogada da Microsoft a plataforma .NET, sendo apresentada como uma nova plataforma sobre a qual podemos desenvolver os nossos sistemas voltados para um ambiente distribudo via WEB.

18

Introduo ao ASP.NET O .NET Framework, tal como foi referido na primeira aula, a base da plataforma .NET, o ambiente onde podemos criar e executar nossas aplicaes quer sejam elas aplicaes Web , VB , C#. Na criao de uma pgina ASP.NET, ao ser invocada pela primeira vez, o cdigo compilado para um cdigo intermdio, chamado MSIL (Microsoft Intermediate Language) no fazendo a distino da linguagem usada na criao da pgina. Aps o cdigo MSI ter sido criado entregue ao .NET Framework que far a converso para a linguagem binria e em seguida executa o cdigo. Esta converso feita pelo CLR (Common Language Runtime ) que executa a gesto de todos os servios necessrios, memria, tipos de dados, cdigo, etc.

Imagem 2 Processamento na invocao de uma pgina ASP.NET

Todo este processo transparente para o utilizador.

Modelos de programao ASP.NET


As pginas ASP.NET podero ser escritas em qualquer linguagem compatvel com o .NET, embora as mais usadas sejam o VB.NET e C#.

19

Introduo ao ASP.NET A linguagem utilizada identificada em cada pgina, sendo esse identificador usado pelo Framework para compilar a pgina, que, como j verificamos, anteriormente, apenas compilada na primeira invocao. No ASP.NET existem dois modelos de programao: Code Behind e Code in Page.

No modelo Code Behind, encontramos uma verdadeira separao do HTML e do cdigo, que o aconselhado, embora para principiantes seja mais adequado o modelo Code in Page. Neste modelo, para cada ficheiro .aspx, extenso dos ficheiros ASP.NET, existe um ficheiro .aspx.vb (caso tenha escrito em VB) onde ser escrito todo o cdigo. No arquivo aspx, existir, apenas, a parte HTML e a parte da declarao dos componentes do ASP.NET. O reaproveitamento de cdigo neste modelo enorme e facilita muito a programao.

No modelo Code in Page, as pginas .aspx ficam estruturadas de uma forma idntica aos ASP clssicos, pelo que a diferena reside na existncia de tags que no existem no ASP clssico. Estas tags permitem criar herana, implementar interfaces, importar classes, etc. Mesmo assim, com uma boa estruturao, a pgina fica muito mais legvel do que o ASP clssico.

Uma pgina ASP.NET


Para terminar esta segunda aula, vamos testar se o seu PC est apto a correr aplicaes ASP.NET, ou seja, se tem instalado, como j referimos, o IIS e o .NET Framework. Comecemos, ento, por um exemplo muito simples em HTML e a partir da rumaremos conquista de uma forma muito simples do ASP.NET. Abra o simples NotePad, e insira o seguinte cdigo HTML:
curso.html

<html> <head> <title>Curso ASP.NET</title> </head> <body> <p> Estou no curso de ASP.NET </p> </body> </html>

20

Introduo ao ASP.NET Grave com o nome de curso.html dentro do directrio definido pelo IIS, que por defeito Inetpub\wwwroot. Agora abra um browser e invoque a pgina:

Imagem 3 Invocao da pgina curso.html Ao invocar temos http, que representa o protocolo usado, localhost, que neste caso, representa o computador local e, por ltimo, o ficheiro que queremos correr. Desta forma, estar a chamar a pgina que est no servidor. Por outro lado, se abri-se directamente o ficheiro tambm funcionava, porque trata-se de um ficheiro html, embora o mesmo no acontea se for um ficheiro ASP ou ASP.NET, pois estes tm de ser corridos num servidor (IIS).

Agora, vamos apenas alterar a extenso do ficheiro criado anteriormente para curso.aspx. Aps ter efectuado este passo, abra o browser e invoque a pgina .aspx: http://localhost/curso.aspx. Se tudo correr bem, aparecer o resultado esperado e ficar a saber que o seu computador encontra-se apto a correr aplicaes ASP.NET.

A diferena entre as duas pginas est no servidor, que ir compilar a pgina .aspx, e no caso de termos alguma programao, essa ser tida em conta. A partir da jamais ser compilada, a no ser que hajam alteraes no cdigo. Desta forma, teoricamente, as pginas ASP.NET so mais rpidas.

Altermos, apenas, a extenso do ficheiro, se o .NET Framework no encontrar um cdigo que perceba, passa adiante, e mostra o ficheiro sem alguma aco. Pode correr, e funcionar, mas no fundo no acontece nada de novo, por isso, vamos pr um pouco de programao, ainda maneira clssica dos ASP. Para isso vamos alterar o ficheiro .aspx, para o seguinte cdigo:
curso.aspx

<%@ Page Language="VB" %> <html> <head> <title>Curso ASP.NET</title> </head> <body>

21

Introduo ao ASP.NET
<p><%= "Ol Portugal!" %></p> </body> </html>

Isto um ficheiro ASP.NET, mas s na sua extenso. Como teremos oportunidade de ver nas aulas do 2 mdulo, existe uma nova maneira de resolver este problema no ASP.NET. Invoque de novo a pgina no browser, o resultado o mesmo, mas agora o trabalho do .NET Framework um pouco diferente, pois j encontrou programao.

22

Introduo ao ASP.NET

Aula 3 Diferenas entre ASP e ASP.NET


Para finalizar este mdulo praticamente terico, vamos ver quais as diferenas entre os ASP clssicos e as novas ASP.NET. Em primeiro lugar, temos agora o uso de classes, os recursos que podemos necessitar esto em Namespaces, uma espcie de pacotes tipo as bibliotecas do C++ e do Java. Existe, agora, a hiptese de criar as nossas solues, para disponibilizar em vrias formas, como aparelhos mveis, verses de HTML, Web services, etc. Nas ASP.NET, o conceito de vrios formulrios deixa de existir, a partir de agora, uma pgina corresponde a um formulrio, no sendo possvel usar mltiplos formulrios. Linguagens compiladas, as verses clssicas das ASP so baseadas em scripting como o VBScript ou JScript. Estas sofrem de duas grandes lacunas: so interpretadas, e no so muito fortes nas funes base. As ASP.NET introduziram suporte para linguagens compiladas. Podemos usar alm do Visual Basic e C++, a nova linguagem C#, ou outras externas, como o Java, Perl, Cobol, etc. Com as ASP.NET, existe uma ligao permanente entre o servidor e os formulrios, bastando, para isso, a utilizao dos atributos runat=server. Nesta aula, solicita-se a realizao de uma pesquisa na internet para que possa conhecer melhor as diferenas entre ASP e ASP.NET.

23

Introduo ao ASP.NET

Auto-avaliao do mdulo 1
Para avaliar os seus conhecimentos neste mdulo, responda ao seguinte formulrio, assinalando, entre as vrias opes, a mais correcta.

1. O que o .NET? 1. Sistema operativo 2. Uma linguagem de programao 3. Uma plataforma de software

2. O .NET Framework contm? 1. Centenas de classes 2. Um sistema operativo 3. Uma s linguagem de programao

3. As pginas ASP.NET so compiladas para 1. um ficheiro executvel 2. um ficheiro de texto 3. MSIL

4. O modelo de programao Code Behing 1. apresenta o cdigo e o HTML num nico ficheiro 2. apresenta separao de cdigo e HTML 3. idntico ao ASP clssico

5. No ASP.NET temos 1. vrios formulrios 2. um s formulrio 3. no podemos ter formulrios

questionrio.doc

24

Utilizao de Web Forms e Controls

Mdulo 2 Usando Web Forms e Controls


Objectivos do mdulo
O objectivo deste segundo mdulo consiste em ensinar a criar formulrios ASP.NET, usar controlos, validar esses controlos e tratar eventos provenientes desses controlos. No fim deste mdulo, o aluno j dever ter entendido a nova forma de criar aplicaes em ASP.NET.

Sumrio
Aula 1 O que so Web Forms e Controls? Aula 2 Criao de Web Forms Aula 3 Usando controles para validao de formulrios Aula 4 Tratando eventos Aula 5 Formulrios autenticados

25

Utilizao de Web Forms e Controls

Aula 1 O que so Web Forms e Controls?


Para iniciar este segundo mdulo, no qual iremos falar de Web Forms e de controlos, vamos ento saber o que so e qual a finalidade deste objectos. O objectivo do ASP.NET elevar o grau de abstraco no desenvolvimento de aplicaes Web, estabelecendo uma analogia com as aplicaes desktop. O programador manipula um conjunto de objectos que so responsveis por se representarem. O modelo de programao resultante oferecido pelo ASP.NET designado de Web Forms. Esta abordagem permite o aumento da produtividade. O modelo de programao dos Web Forms construdo a partir de componentes visuais designados por server-side controls. O seu nome indica que, apesar de se representarem atravs do HTML, enviado para o cliente, residem no servidor. Todos os server-side controls derivam de System.Web.UI.Control e so contentores de server-side controls. Nas ASP.NET, o conceito de vrios formulrios deixa de existir, pelo que, uma pgina passa a ser um formulrio, no sendo possvel utilizar mltiplos formulrios. A resposta a um pedido o resultado da representao em HTML da pgina. Em ASP.NET existem duas hierarquias de server-side controls, nomeadamente, a hierarquia de HtmlControls e a de WebControls.

HtmlControls
Estes tipos de controlos ento organizados numa hierarquia que utilizada quando se adiciona o atributo runat=server aos elementos HTML comuns, podendo este atributo ser acrescentado a qualquer elemento HTML que esteja na pgina ASP.NET. Para cada elemento marcado com este atributo existe uma instncia (do tipo que lhe corresponde na hierarquia) como campo da classe que implementa a pgina, pois agora cada pgina ASP.NET uma classe. O nome destes campos corresponde ao valor do atributo id do elemento. De seguida, vamos analisar um quadro que estabelece a associao entre o elemento e a classe.

26

Utilizao de Web Forms e Controls

Elemento <input type="text" runat="server"/> <input type="radio" runat="server"/> <input type="checkbox" runat="server"/> <form runat="server"> </form> <select runat="server"/> <span runat="server"> </span> <div runat="server"> </div> <input type="button" runat="server"/> <input type="reset" runat="server"/> <input type="submit" runat="server"/>

Classe HtmlInputText HtmlInputRadioButton HtmlInputCheckBox HtmlForm HtmlSelect HtmlGenericControl HtmlGenericControl HtmlInputButton HtmlInputButton HtmlInputButton

WebControls
Um dos grandes problemas, actualmente, a compatibilidade entre browsers, das suas aplicaes, e a complexidade das mesmas que tm de criar. realmente um ponto difcil tentar a compatibilidade entre todos os browsers. Para isso, as ASP.NET introduzem o conceito dos WebControls, que englobam tarefas comuns e providenciam um modelo de programao bastante limpo. Estes controlos enviam puro HTML para o browser, no existe, de alguma forma, scripts do lado do cliente, e mesmo que existam por exemplo nos controlos de validao, estes s ficam em browsers onde funcionem, tudo automaticamente.

Os WebControls esto divididos em 5 famlias:

1. Controlos que criam os seus elementos HTML equivalente. 2. Lista de controlos, que providenciam o fluir dos dados pela pgina 3. Controlos ricos, que providenciam contedo rico para contedo de interface 4. Controlos de validao, para se poder validar campos em formulrios 5. Controlos mveis, que englobam tags de WML para aparelhos mveis

A primeira famlia de controlos similar aos controlos HTML. Os controlos de lista vo permitir uma fcil criao de listas e radio buttons, assim como checkboxes. Os controlos ricos consistem num calendrio bastante flexvel e no AdRotator. O controlo Calendar vai criar um output de puro HTML para browsers de baixo nvel, ou DHTML para browsers de alto nvel. Os controlos de validao vo disponibilizar formas simples para se construir validaes nos formulrios. Para alm disso, poder construir os seus prprios controlos, como veremos no Mdulo 4 Aula 3. 27

Utilizao de Web Forms e Controls Agora veremos alguns Web Controls que o ASP.NET disponibiliza. Esses controlos podero ser criados automaticamente por um ambiente de desenvolvimento, como verificaremos mais tarde, mas, para j, para uma melhor compreenso, vamos entrar no cdigo.

Label : <asp:Label id="Label1" runat="server">Label</asp:Label> TextBox: <asp:TextBox runat="server"></asp:TextBox> CheckBox: <asp:CheckBox runat="server"></asp:CheckBox> Button: <asp:Button runat="server" Text="Button"></asp:Button> DropDownList: <asp:DropDownList runat="server"></asp:DropDownList> Image: <asp:Image runat="server"></asp:Image> Table : <asp:Table runat="server"></asp:Table> Hyperlink: <asp:HyperLink runat="server">/asp:HyperLink> Para finalizar esta aula, vejamos algumas propriedades de alguns Web Controls como TextBox, Button, Label e Hyperlink.

TextBox

Sintaxe
<asp:TextBox id="TextBox1" runat="server" AutoPostBack="True|False" Columns="caracteres" MaxLength="caracteres" Rows="rows" Text="Texto" TextMode="Single|Multiline|Password" Wrap="True|False" > </asp:TextBox>

Propriedades
id - informa o nome do controle AutoPostBack - indica se o formulrio ser enviado via mtodo Post caso ocorra um evento do tipo OnTextChanged (falaremos numa prxima aula) Columns - O tamanho do controle em termos de nmero de caracteres Rows - O nmero de linhas a exibir quando TextMode for igual a Multiline. Text - O texto inicial a ser exibido. TextMode - Define o comportamento do controle.Podemos ter os valores: - SingleLine - <input type="text"> - Multiline - <input type="textarea"> - Password - <input type="password"> Wrap - indica se vai haver quebra de linha medida que o utilizador digita.

28

Utilizao de Web Forms e Controls Button

Sintaxe
<asp:Button id="Button1" runat="server" Text="Texto" Command="comando" CommandArgument="arg_comando" > </asp:Button>

Propriedades
id - informa o nome do controle Text - O texto inicial a ser exibido. CommandName - O comando associado com o boto. CommandArgument - Fornece argumentos extras para o comando a ser executado.

Label

Sintaxe
<asp:Label id="Label1" runat="server" Text="Texto" > </asp:Label>

Propriedades
id - informa o nome do controle Text - O texto inicial a ser exibido. Em HTML o texto no permite edio.

Hyperlink

Sintaxe
<asp:Hyperlink id="Hyperlink1" runat="server" NavigateUrl="url" Text="HyperlinkTexto" ImageUrl="url_imagem" Target="Window" /> </asp:Hyperlink>

Propriedades
id - informa o nome do controle NavigateUrl - A URL para o qual o utilizador ser direccionado. ImageUrl - Define uma imagem que ser exibida. Text - O texto inicial a ser exibido. Target - Define em qual janela a URL definida dever ser aberta.

Estes so alguns Web Controls. Se quiser saber mais, pesquise num ambiente de desenvolvimento ASP.NET como o WebMatrix.

29

Utilizao de Web Forms e Controls

Aula 2 Criao de Web Forms


Agora que j sabemos o que so Web Forms e Controlos, passaremos prtica. Vamos construir o nosso primeiro formulrio, utilizando, para esse efeito, o WebMatrix que poder encontrar de uma forma gratuita em www.asp.net.

Em primeiro lugar, vamos abrir o WebMatrix. Aps a abertura aparece uma caixa de dilogo, que nos pede os dados necessrios para a criao de um ficheiro .aspx ou de outro tipo.

Imagem 4- Caixa de dilogo inicial do WebMatrix Ento, vamos criar uma pgina ASP.NET, um ficheiro .aspx, seleccionando ASP.NET Page, em Location, definimos o caminho para a pasta definida pelo IIS, que normalmente Inetpub\wwwroot\ mas que poder ser alterada nas propriedades do IIS. No nosso exemplo, vamos colocar o ficheiro em D:\Inetpub\wwwroot\Curso, de seguida damos o nome ao ficheiro, por exemplo, primeira.aspx, e por fim, seleccionamos uma das linguagens para a criao da pgina, neste caso, Visual Basic .NET. Finalmente, s clicar em OK e o ficheiro criado na pasta indicada. claro que no vamos explicar as funcionalidades do WebMatrix, isso ficaria para um outro curso, mas o que ser necessrio ser explicado. 30

Utilizao de Web Forms e Controls Na parte inferior, encontram-se umas etiquetas. Seleccione a etiqueta All.

Imagem 5 Etiquetas das vrias vises do WebMatrix Nesta viso, poder ver-se todo o cdigo e o HTML, o WebMatrix j criou a estrutura da pgina .aspx, e de notar que o modelo de programao usado o Code in Page, ou seja o cdigo e o HTML esto no mesmo ficheiro. Ento, vamos, para j, analisar a estrutura que o WebMatrix criou.

<%@ Page Language="VB" %> <script runat="server"> ' Insert page code here ' </script> <html> <head> </head> <body> <form runat="server"> <!-- Insert content here --> </form> </body> </html>

Como podemos verificar, na primeira linha est identificada a linguagem utilizada, neste caso, VB, entre as tags <script runat="server"> </script> a onde vai ficar o cdigo da pgina, de reparar na expresso runat="server que significa que o cdigo vai ser executado no servidor. A seguir, temos o normal HTML, de notar a expresso
<form

runat="server">, aqui que se inicia o formulrio da nossa pgina. Como j

tivemos oportunidade de verificar, s pode existir um formulrio por pgina, ou seja, a pgina um formulrio. Agora vamos adicionar nossa pgina vrios Web Controls, duas caixas de texto, um boto e um rtulo. Para adicionar as caixas de texto (TextBox), adicionamos as seguintes tags nossa pgina entre as tags <form runat="server"> </form>:

<asp:TextBox id="caixatexto1" runat="server"></asp:TextBox> <asp:TextBox id="caixatexto2" runat="server"></asp:TextBox>

31

Utilizao de Web Forms e Controls Para adicionar o boto e a Label vamos ao modo de Design do WebMatrix, como se v, j l esto as duas caixas de texto que adicionmos. Para adicionar o boto teremos que seleccionar na barra lateral esquerda, onde se encontram os Web Controls o Control Button:

Imagem 6 Control Button no WebMatrix E de seguida vamos arrastar at ao local pretendido:

Imagem 7 Formulrio

Vamos alterar as propriedades do boto, para isso poder ir etiqueta HTML, ou poder alterar na caixa de propriedades do WebMatrix, que o que faremos agora. Vamos alterar as propriedades do nosso boto de acordo com a tabela que se segue, e adicionar uma Label (Etiqueta), para apresentar o resultado, da mesma forma como adicionamos o boto.

Objecto Boto

Propriedade ID Text ID Text

Valor btSomar Somar lblResultado

Etiqueta

32

Utilizao de Web Forms e Controls Assim, est concluda a criao dos elementos do nosso formulrio. Como j repararam, o objectivo deste Web Form somar dois nmeros, mas isso fica para as prximas aulas, visto que, agora, o importante, a criao do formulrio. Neste momento, o nosso formulrio ficou:

Imagem 8- Formulrio aspecto final

E o nosso HTML e cdigo ficou:

<%@ Page Language="VB" %> <script runat="server"> ' Insert page code here </script> <html> <head> </head> <body> <form runat="server"> <asp:TextBox id="caixatexto1" runat="server"></asp:TextBox> <asp:TextBox id="caixatexto2" runat="server"></asp:TextBox> <asp:Button id="btnSomar" runat="server" Text="Somar"></asp:Button> <asp:Button id="btnSomar" </asp:Button> <asp:Label id="lblresultado" runat="server"></asp:Label> </form> </body> </html>

Invocando a nossa pgina num browser, podemos verificar que o formulrio no reage a eventos, mas esse assunto ficar para uma prxima aula.

Imagem 9 - Formulrio invocado no browser

33

Utilizao de Web Forms e Controls

Exerccio proposto

Neste momento, j capaz de criar um formulrio ASP.NET, por isso, sugiro para terminar esta aula, reestruturar o formulrio criado e alterar outras propriedades ao seu gosto, esperando que no final obtenha algo deste gnero:

Imagem 10 Formulrio pretendido

Curso\primeira.aspx

34

Utilizao de Web Forms e Controls

Aula 3 Usando controles para validao de formulrios


No desenvolvimento de aplicaes necessrio garantir que os dados inseridos pelo utilizador pertencem ao domnio esperado. A validao de dados um tpico essencial em muitas aplicaes Web, tais como formulrios de autenticao, de entrada de valores e informaes pessoais, s para citar alguns exemplos muito usados. A tarefa de validar dados pode ser muito trabalhosa, pois envolve validar dados tanto no lado do cliente como no lado do servidor. Com os ASP.NET apareceram os controles de validao de formulrios (Validators), pelo que, agora, o criador de aplicaes ASP.NET no tm de preocuparse com o cdigo em JavaScript para validao de formulrios, uma vez que, com estes novos controlos, o servidor cria todo o cdigo JavaScript. Porm, essa validao no s feita no cliente, tambm feita no servidor, visto que o cliente no poder suportar script ou o pedido poder ter sido alterado. Uma grande vantagem no modelo de validao do ASP.NET que no precisamos de saber onde ele ser executado, se no servidor ou no browser, pois ele adapta-se ao tipo de browser que estiver a ser utilizado. Se o browser for incompatvel, a validao ser feita apenas no servidor. Os controles ASP.NET para a validao de formulrios so os seguintes: RequiredFieldValidator: Verifica se o campo est vazio;

<form runat="server"> <p> <b>Nome : </b> <asp:Textbox id="cxNome" runat="server"></asp:Textbox> <asp:RequiredFieldValidator id="validacaonome" runat="server" display="Dynamic" ErrorMessage="Tem de introduzir o seu nome!" ControlToValidate="cxNome"></asp:RequiredFieldValidator> </p> <p> <asp:Button id="bEnviar" runat="server" Text="Enviar"></asp:Button> </p> </form>

Neste exemplo, usamos um controlo de validao para verificar se o campo Nome contm algum caracter, o controlo tem um identificador que identifica o

35

Utilizao de Web Forms e Controls elemento ASP.NET id="validacaonome", contm a expresso runat="server", cujo significado j vimos anteriormente, a expresso display="Dynamic" que significa que a visualizao da mensagem de erro dinmica, a expresso

ErrorMessage="Tem de introduzir o seu nome!" que define a mensagem de erro

e a expresso ControlToValidate="cxNome" que identifica qual o controlo a validar. Ao invocar a pgina num browser IE e submeter o formulrio com o campo Nome, vazio obtemos o seguinte resultado:

Imagem 11 Demonstrao do controlo de validao "RequiredFieldValidator"

CompareValidator: Compara o valor de um campo com um determinado valor ou com o valor de outro campo;

<form runat="server"> <p> <b>Senha</b> <asp:textbox id="senha1" runat="server"/> </p> <p> <b>Confirmar senha</b> <asp:textbox id="senha2" runat="server"/> </p> <p> <asp:CompareValidator id="ValidarSenha" runat="server" ErrorMessage="Senhas no coincidentes" ControlToValidate="senha1" ControlToCompare="senha2"/> </p> <p> <asp:button id="bValidar" runat="server" text="Validar"/> </p> </form>

Neste exemplo, usamos o controlo de validao para verificar se o contedo de dois campos coincide. A expresso ControlToCompare="senha2", identifica o controlo a ser comparado com o controlo que est a ser validado.

36

Utilizao de Web Forms e Controls RangeValidator: Verifica se o valor de um campo est entre uma determinada frequncia de dois valores;
<form runat="server"> <p> <b>Idade</b> <asp:textbox id="cxidade" runat="server"/> </p> <p> <asp:RangeValidator id="ValidarIdade" runat="server" ControlToValidate="cxIdade" Type="Integer" MinimumControl="8" MaximumControl="100" ErrorMessage = "Idade compreendida entre 8 e 100." Display="Dynamic"/> </p> <p> <asp:button id="bValidar" runat="server" text="Validar"/> </p> </form>

Neste exemplo, usamos o controlo de validao para verificar se a idade introduzida pelo utilizador est compreendida em 8 e 100, a expresso

Type="Integer" identifica o tipo de dados a comparar, que, neste caso, so dados do

tipo inteiro, a expresso MinimumControl="8" define o valor mnimo aceite e a expresso MaximumControl="100" define o valor mximo.

RegularExpressionValidator: Verifica o valor de um campo com uma determinada expresso regular;

<form runat="server"> <p> <b>Cdigo Postal : </b> <asp:textbox id="cp" columns="60" runat="server"/> <asp:regularexpressionvalidator id="validacaocp" runat="server" validationexpression="\d{4}\-\d{3}" text="Cdigo postal invlido (nnnn-nnn)!" controltovalidate="cp"/> </p> <p> <asp:button id="bValidar" text="validar" runat="server"/>

</p> </form>
No exemplo de demonstrao deste controlo utilizamos a validao do campo cdigo postal, usando, para isso, uma propriedade deste controlo,

37

Utilizao de Web Forms e Controls


validationexpression="\d{4}\-\d{3}", que obriga o utilizador a introduzir uma

sequncia de quatro algarismos, um trao e mais uma sequncia de 3 algarismos. Estas expresses de validao tm de ser definidas pelo criador da aplicao, consoante o campo a validar. Em seguida, apresentaremos mais algumas expresses de validao e os respectivos significados: Expresso
"^\d {1,3}$"
".+@.+\..+" "\d{1,6}"

Significado Obriga a introduo de 1 a 3 dgitos Validao de endereo de e-mail Apenas dgitos <= 6

Agora, vamos ver um quadro com os smbolos e seus significados usados nas expresses regulares:

Smbolo
[...]
[^...] \w \W \s \d \D (...) {n,m} {n, } ? + *

Significado Aceita qualquer um dos caracteres delimitados por [ ] No aceita nenhum dos caracteres delimitados por [ ] Aceita qualquer caracter alfanumrico. Aceita qualquer caracter separador. No aceita nenhum caracter separador. Aceita qualquer dgito. No aceita nenhum dgito. Agrupa itens numa unidade Aceita entre n e m ocorrncias do item anterior Aceita n ou mais ocorrncias do item anterior Aceita zero ou uma ocorrncias do item anterior Aceita uma ou mais ocorrncias do item anterior Aceita zero ou mais ocorrncias do item anterior

CustomValidator: Permite criar um controlo de validao personalizado;

ValidationSummary: Permite a exibio de um resumo de todas as validaes feitas na pgina. No WebMatrix, estes controlos encontram-se na barra de Web Controls.

38

Utilizao de Web Forms e Controls

Imagem 12 Controles de validao no WebMatrix

Para verificar se a pgina respeitou todas as validaes, no nosso cdigo podemos chamar a propriedade IsValid do objecto Page, como no exemplo:

If Page.IsValid Then cdigo se a pgina for vlida End If

Exerccio proposto

Agora que j entendeu o funcionamento dos controles de validao, sugiro que abra a pgina j criada na aula anterior, e adicione controles de validao para validar os seguintes dados: Os dois campos no podero estar vazios; Os valores dos dois campos tm de ser numricos com 4 dgitos; Os valores dos dois campos no podero ser iguais; Use um controle para exibir as validaes feitas na pgina.

Curso\primeira.aspx

39

Utilizao de Web Forms e Controls

Aula 4 Tratamento de eventos


At agora, temos visto como adicionar controlos s nossas pginas, mas as pginas no tm qualquer reaco, ou seja, so completamente estticas. Para que as nossas aplicaes ASP.NET produzam alguma reaco, temos que colocar a aplicao a reagir a eventos, tal como no Visual Basic. As ASP.NET foram feitas com um pensamento de orientao por objectos, isto , no topo da rvore temos um objecto, que o objecto Page. Cada controlo ASP.NET, application, e pgina so descendentes de Page. Isto significa que cada pgina uma instncia do objecto Page. Isto importante a partir do momento em que nos apercebemos que o evento Load de Page algo a que podemos responder. Durante a interaco com o utilizador, outros eventos so criados, e assim o evento UnLoad disparado quando se sai da pgina.

Vejamos, como primeiro exemplo, como uma pgina reage ao evento Load,
mostrando, para isso, a data e hora actual em formato Portugus quando a pgina aberta. O primeiro passo adicionar uma Label nossa pgina com as propriedades desejadas, ser nesta Label que aparecer a data e hora actuais. Para que possamos usufruir das definies, de dias, horas, entre outras, de Portugal, teremos que importar um Namespace chamado System.Globalization. Os Namespaces so uma espcie de bibliotecas de recursos, como j tivemos oportunidade de ver no primeiro mdulo.
<%@ Import Namespace="System.Globalization" %>

Agora, temos de definir a funo que responde ao evento Load. Como j vimos, o cdigo implementado entre as tags <script
runat="server">

</script> a funo a implementar Sub Page_Load(), no caso de a nossa

linguagem utilizada for VB. Dentro de Page_Load vamos declarar uma varivel do tipo DateTime, que ficar com a data e hora do momento no servidor.

Dim data As DateTime = DateTime.Now()

40

Utilizao de Web Forms e Controls Assim, para que a data e a hora sejam visualizadas no formato Portugus, temos que declarar um objecto que ficar com a cultura pretendida,

neste caso, a portuguesa.

Dim objCultura = New CultureInfo("pt-PT")

Por fim, vamos ento aplicar o nosso objecto cultural formatao da data e atribuir o valor ao Label criado.

lblDataHoras.Text = data.ToString("F", objCultura)

Para terminar, s temos que fechar a nossa funo com End Sub.

Invocando a pgina no browser temos:

Imagem 13 Data e hora actual

De seguida, mostraremos mais um exemplo, neste caso, a nossa pgina vai reagir ao clicar num boto. Vamos criar uma pgina com os seguintes elementos Web Controls:

Objecto Caixa de texto

Propriedade ID Columns ID Text ID Font-Size Font-Bold Font-Names Forecolor

Valor txtTexto 80 btConfirmar Confirmar lblResultado 10 True Verdana Navy

Boto

Etiqueta

Agora, temos que implementar uma funo que execute quando se clicar no boto, ou seja quando ocorrer o evento Click no boto, essa funo ir copiar o

41

Utilizao de Web Forms e Controls contedo da caixa de texto para a etiqueta em maisculas e mencionar o nmero de caracteres do texto inserido na caixa de texto. Ento, vamos definir o cabealho da funo:

Sub btConfirmar_Click (sender As Object, e As EventArgs)

Como se pode verificar, o nome da funo contm o nome do objecto, neste caso, o boto e o evento a que ela responde. O primeiro parmetro sender o objecto que disparou o evento, e o segundo e a lista de informaes sobre o evento. Isso no uma obrigao, mas um padro adoptado pela maioria dos controles existentes. Seguidamente, implementaremos o cdigo que executar o que pedimos. Em primeiro lugar, vamos transformar o texto da caixa de texto em maisculas, declarando, para isso, uma varivel do tipo String que guardar esse resultado, e vamos tambm declarar uma varivel do tipo Inteiro para guardar o nmero de caracteres do texto:

Dim texto as String Dim ncaracteres as Integer

Agora, vamos transformar o texto em maisculas, utilizando, para isso, o mtodo ToUpper() da classe String.

texto = txtTexto.Text.ToUpper()

De seguida, vamos contar o nmero de caracteres do texto, usando, para isso, o mtodo Length() da classe String:

ncaracteres = texto.Length()

Por fim, teremos, apenas, que apresentar o resultado na Etiqueta. Para isso, atribumos propriedade Text da etiqueta o resultado:

lblResultado.Text = texto & " <br> Total de caracteres " & ncaracteres

Finalmente, fechamos a nossa funo com End Sub e conclumos mais um


exemplo que usa eventos.

42

Utilizao de Web Forms e Controls

Imagem 14 Resultado final exemplo eventos

Exerccio proposto

Agora que j entendeu como se responder a eventos, sugiro como exerccio, completar a pgina que tem vindo a ser criada nas ltimas aulas, criar uma funo para reagir ao boto e adicionar mais operaes. Para tal, aconselho o uso de uma DropDownList.

Curso\primeira.aspx

43

Utilizao de Web Forms e Controls

Aula 5 Formulrios autenticados


O ASP.NET, conforme mencionmos anteriormente, realiza, autonomamente, muitas tarefas que antes tnhamos que programar manualmente, sendo uma delas os controlos de validao, e outra, a tarefa e o controlo de login, ou de autenticao do utilizador, pelo que no ASP clssico os passos para realizar esta tarefa eram os seguintes: 1. Escolher o nome de uma varivel de sesso (uma varivel de sesso uma varivel que reconhecida em todas as pginas da aplicao) e os valores que ela conter (1 se o utilizador estiver autenticado, por exemplo); 2. Criar uma pgina para validar o login do utilizador; 3. Se o login for vlido, atribuir 1 varivel de sesso escolhida; 4. Em todas as pginas, testar o valor da varivel de sesso. Se o valor for diferente de 1 redireccionar o utilizador para a pgina de login; 5. Ao redireccionar para a pgina de login deve transmitir a url da pgina que o utilizador tentou aceder; 6. Aps o login, a pgina de login dever verificar se recebeu algum url por parmetro e, se sim, deve redireccionar para essa pgina, permitindo assim que o utilizador chame directamente uma pgina; Com o ASP.NET todo isto ficou mais fcil de implementar graas classe System.Web.Security, pois, embora a estrutura de funcionamento seja a mesma, agora s temos de implementar alguns passos e o ASP.NET executa os restantes para ns. Para que o ASP.NET possa realizar o processo de autenticao para ns, temos que informar que desejamos realizar esse processo. Essa informao dada ao ASP.NET atravs de um ficheiro chamado web.config. Este ficheiro escrito em formato XML e pode ser inserido em qualquer directrio da aplicao. O ficheiro contm configuraes a nvel de site que sero vlidas a partir do directrio em que ele se encontra e em todos os sub-directrios. Por isso, comum que o ficheiro web.config seja sempre inserido na raiz da aplicao.

44

Utilizao de Web Forms e Controls Atravs do web.config vamos fornecer as seguintes informaes: 1. Que tipo de autenticao ir realizar-se, baseada em formulrio, ou em outro tipo de autenticao, tal como a autenticao integrada com o sistema operacional, normalmente utilizada em ambientes de intranet; 2. Que formulrio utilizaremos para realizar a autenticao; 3. Quais os utilizadores que podero aceder s pginas. O mais comum permitir o acesso a utilizadores autenticados; 4. O nome da varivel que ser utilizada para identificar o utilizador autenticado. Neste ponto, importante destacar: o ASP.NET no utiliza variveis de sesso, mas sim cookies (ficheiro que reside na mquina do utilizador); o nome indicado no realmente o nome, mas um sufixo para o nome. Neste momento j entendeu que o ASP.NET controlar o processo de autenticao automaticamente. A partir do momento em que configuramos o web.config para realizar a autenticao via formulrio, o ASP.NET passa a verificar em todos os acessos pgina se o utilizador est autenticado ou no, verificando se o cookie de autenticao existe. Se no existir, ele desviar a execuo para o formulrio de login que informamos no web.config, transmitindo via GET a pgina qual o usurio tentou aceder. Uma vez que, neste processo, usamos cookies ao invs de variveis de sesso, o cookie poderia ficar gravado na mquina do utilizador entre uma visita e outra, e, realmente, pode, se for necessrio. Existem cookies temporrios e cookies permanentes, os temporrios so destrudos quando o browser fechado, os permanentes so gravados em disco. O ASP.NET permite definir se o cookie temporrio ou permanente. Isso til para que se possa fornecer ao utilizador a opo de lembrar as suas informaes de login, para que, quando o utilizador retornar ao site o cookie de login j esteja l e, consequentemente, ele possa aceder s pginas sem introduzir as informaes de login. um processo muito cmodo e, uma vez que apresentado como uma opo para o utilizador, ele prprio assume os riscos. Em muitos ambientes de desenvolvimento como o Visual Studio .NET, ao criarmos uma nova aplicao ASP.NET, o ficheiro web.config criado

automaticamente, pelo que ns s temos que alterar algumas tags que ele possui.

45

Utilizao de Web Forms e Controls Mas, para iniciar, vamos criar um ficheiro web.config manualmente.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <authentication mode="Forms"> <forms name="Restrito" loginUrl="login.aspx" protection="All" timeout="30" /> </authentication> </system.web> <location path="/"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location> </configuration>

Vamos analisar este simples ficheiro de configurao web.config. Na primeira linha identificamos a verso XML usada. Com o elemento authentication estamos a determinar qual o tipo de autenticao que iremos utilizar, neste caso, autenticao de formulrios
mode="Forms",

url

do

formulrio

de

autenticao

loginUrl="login.aspx" e o nome do cookie de autenticao name="Restrito", protection="All" identifica quais as pginas que necessitam de autenticao, neste

caso, todas, timeout="30", identifica o tempo de vida do cookie, e a tag <location


path="/">, identifica o directrio onde se podem encontrar as pginas que

necessitam de autenticao para serem visualizadas J com o elemento authorization determinamos quais os utilizadores que podem aceder aplicao. O ? utilizado no elemento Deny <deny users="?" /> indica que deve ser negado o acesso a utilizadores no identificados, ou seja, no autenticados. Agora, iremos ver melhor os parmetros aceites pelo authentication mode, que, como j vimos define o tipo de autenticao, pelo que podemos ter: None No existe nenhuma forma de autenticao do utilizador; Windows Identifica e autoriza os utilizadores baseando-se numa lista de utilizadores no servidor; Passport Este tipo de autenticao utilizado atravs dos servidores da Microsoft, de forma nica e centralizada. O utilizador e a palavra-

46

Utilizao de Web Forms e Controls chave so as mesmas que o cliente utiliza para aceder ao Hotmail e a outros sites da Microsoft; Form Esta forma a mais utilizada e a que deixa o programador mais livre para poder implementar o seu cdigo de autenticao. Muitas vezes, esta forma est directamente ligada com uma base de dados (SQL Server, Oracle, etc); Com esta nova maneira de autenticao temos o mtodo RedirectFromLogin page do objecto FormsAuthentication. Esse mtodo cria o cookie, identificando que o utilizador est autenticado e redirecciona o utilizador para a pgina que ele solicitou. Assim temos:
FormsAuthentication.RedirectFromLoginPage("Utl", chkLembrar.Checked)

Observe o segundo parmetro, que determina se o cookie ser permanente ou temporrio. Neste exemplo, estamos a configurar o segundo parmetro com o checked de uma checkbox inserida na pgina de login, para dar a tal opo j falada ao utilizador. Desta forma, o utilizador pode optar por manter o seu login registado no cookie ou no. Se no tivssemos criado a checkbox na pgina, deveramos utilizar false como default.

Exerccio proposto

Para terminar a aula, sugiro que crie o ficheiro web.config demonstrado e coloque-o no directrio que est a usar para este curso, crie um ficheiro muito simples dizendo apenas Pgina de login, grave com o nome login.aspx, e chame uma pgina que esteja dentro desse directrio, como por exemplo a calculadora. Qual o resultado?

47

Utilizao de Web Forms e Controls

Auto-avaliao do mdulo 2
Para avaliar os seus conhecimentos neste mdulo proponho: _ Crie um ficheiro login.aspx para autenticao de utilizadores e uma nova pasta no seu directrio Curso chamada Restrita. Esta pasta passa agora a ser a nossa rea restrita. Dentro dessa pasta crie um ficheiro default.aspx, que, para j, apresente as boas-vindas ao utilizador autenticado. Para saber o nome do utilizador, aps a autenticao, use

HttpContext.Current.User.Identity.Name.

Curso\web.config Curso\Restrita\login.aspx Curso\Restrita\degault.aspx

48

Utilizao do ADO.NET

Mdulo 3 Utilizao do ADO.NET


Objectivos do mdulo
O objectivo deste terceiro mdulo ensinar a utilizar a tecnologia ADO.NET para aceder a dados, dados estes, que se encontram em bases de dados, e outros, tornando as aplicaes ASP.NET mais poderosas.

Sumrio
Aula 1 Viso geral do ADO.NET Aula 2 Ligao a uma fonte de dados Aula 3 Operaes sobre os dados de uma base dados Aula 4 Aceder a dados com DataSets Aula 5 DataGrid e DataList Aula 6 Associar a dados Extensible Markup Language (XML)

49

Utilizao do ADO.NET

Aula 1 Viso geral do ADO.NET


Tal como o ASP.NET, tambm o ADO.NET uma evoluo natural para a nova plataforma da Microsoft do anterior ADO (ActiveX Data Objects). atravs deste mecanismo que se processa o acesso aos registos em vrios tipos de bases de dados nas aplicaes .NET, como se de objectos se tratassem. O ADO.NET a nova gerao do conjunto de classes de acesso a dados feito sob medida para o universo .NET.

Imagem 15 Arquitectura ADO.NET

O ADO.NET composto de vrias classes, a destacar:

Connection usado para criar a conexo entre o programa e a base de dados. Para estabelecer uma conexo com uma fonte de dados, o objecto Connection usa a propriedade ConnectionString que a string de conexo que dever ser informada para que a conexo seja efectivamente aberta;

Command usado para armazenar comandos SQL que so executados na base de dados (SELECT, INSERT, UPDATE, DELETE, Stored Procedures, etc). Os mtodos usados para realizar estas tarefas so:

50

Utilizao do ADO.NET o ExecuteReader executa declaraes SQL que retornam linhas de dados, tais como SELECT; o ExecuteNonQuery executa declaraes SQL que no retornam dados, tais como INSERT, UPDATE, DELETE e SET; o ExecuteScalar retorna um valor nico como resultado de uma funo agregada: SUM, AVG, COUNT, MAX E MIN. DataReader trata-se de um cursor read-only e forward-only com o objectivo de oferecer a mxima performance na busca de dados (til e eficiente para preencher combos, listas e tabelas). No oferece acesso desconectado e no permite alterar ou actualizar a fonte de dados original, sendo usado para obter, rapidamente, dados, apenas, de leitura. As propriedades e mtodos mais usados dos objectos DataReader so: o FieldCount informa o nmero de colunas da linha de dados actual; o o IsClosed Indica se o objeto DataReader est fechado; RecordsAffected especifica o nmero de linhas alteradas, excludas ou includas na execuo de uma declarao SQL; o Item (n) - obtm o valor da n-sima coluna no seu formato nativo; o o o Close Mtodo que fecha o objecto; GetName Mtodo que retorna o nome da n-sima coluna; Read mtodo que permite ao DataReader avanar para o prximo registo; o IsDbNull mtodo que informa se a n-sima coluna possui um valor nulo. DataAdapter classe usada para buscar dados na base de dados e preencher uma instncia DataSet ou DataTable; DataSet Esta classe funciona como uma base de dados na memria da aplicao. Cria uma estrutura que permite armazenar dados de tabelas, colunas, registos e relacionamentos entre as tabelas. Os dados podem ser serializados em XML, alterados, excludos, inseridos e sincronizados com a fonte original; DataTable Destacam-se, ainda, as classes DataTable,

hierarquicamente internas classe DataSet. A classe DataTable armazena o resultado de um comando select ou stored procedure.

51

Utilizao do ADO.NET

Aula 2 Ligao a uma fonte de dados


Nesta aula, vamos aprender a estabelecer a ligao entre as nossas aplicaes ASP.NET e uma fonte de dados, utilizando a tecnologia ADO.NET. As fontes de dados mais conhecidas so as bases de dados MS Access, MS Sql Server, Oracle entre outras, mas o ADO.NET tambm permite a ligao a uma folha de dados MS Excel e a outras fontes de dados que no sejam bases de dados. O .NET contm namespaces que nos permitem aceder a fontes de dados, nomeadamente: System.Data System.Data.ADO System.Data.Oledb System.Data.SQL System.Data.SQLTypes

Ligao a uma base de dados MS Access


Vamos ento estabelecer uma conexo a uma base de dados Access. Criamos no MS Access uma base de dados simples, contendo apenas uma tabela, a tabela Pessoa, que guarda alguns dados relacionados com Pessoas e chamamos a esta base de dados pessoas.mdb:

Imagem 16 Tabela Pessoa da base de dados pessoas.mdb

Para fazer a conexo a esta base de dados MS Access temos de fazer duas importaes de namespaces:

<%@ Page Language="VB" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <script language="VB" runat="server"> </script>

52

Utilizao do ADO.NET Aps este primeiro passo, vamos ento fazer a conexo propriamente dita. O cdigo ser criado no evento Page_Load, que o primeiro evento que ocorre na pgina. O objecto que nos permite fazer a conexo com a base de dados OleDbConnection. Alm desse objecto, precisamos indicar onde se encontra a base de dados, de que tipo ela , e mais algumas coisas. Para isso, usamos uma String de conexo que ser passada ao objecto OleDbConnection. Depois, usamos o mtodo Open do Objecto que instanciamos. Vejamos o cdigo necessrio para estabelecer uma conexo.

Sub Page_Load(sender as Object, e as EventArgs) Dim connString as String connString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Server.mappath(".\pessoas.mdb") & ";" SOURCE=" &

Dim objConnection as OleDbConnection 'declara objecto para conexo objConnection = New OleDbConnection(connString) 'cria conexo objConnection.Open() 'abre a conexo objConnection.Close() 'Fecha a conexo base de dados End Sub

Criamos, assim, uma conexo a uma base de dados MS Access. Agora, s temos que fazer operaes sobre os dados da base de dados, mas isso ficar para as prximas aulas deste mdulo.

Ligao a uma base de dados Sql Server


A ligao a uma base de dados Sql Server segue o mecanismo anterior, mas com algumas diferenas, aqui tambm temos de importar dois namespaces:

<%@ Page Language="VB" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script language="VB" runat="server"> </script>

Os namespaces a importar poderiam ser os mesmos que num acesso a uma base de dados MS Access mas claro que no possvel ter acesso s funcionalidades do namespace System.Data.SqlClient.

53

Utilizao do ADO.NET Agora, tal como na conexo a uma base de dados MS Access, temos de criar um objecto que permita criar a conexo, neste caso, esse objecto o SqlConnection, depois s temos de passar a esse objecto como parmetro, o servidor Sql Server, a base de dados a conectar, o nome do utilizador e a palavra chave. Por fim, tal como no MS Access temos de usar o mtodo Open do objecto que instanciamos.

Sub Page_Load(sender as Object, e as EventArgs) Dim connString as String connString = "server=localhost;database=bd;uid=xx; pwd=xx" Dim conexao As SqlConnection 'declara objecto para conexo conexao = New SqlConnection (connString) 'cria conexo conexao.Open()'abre a conexo objConnection.Close() 'Fecha a conexo base de dados End Sub

E assim terminamos esta aula dedicada conexo a fontes de dados. Poder pesquisar na Internet outras conexes, como por exemplo, a conexo a uma folha de dados MS Excel, entres outras.

54

Utilizao do ADO.NET

Aula 3 Operaes sobre os dados de uma base de dados


Agora que j sabemos fazer uma conexo a uma base de dados, j podemos manipular os dados da base de dados conectada, ou seja, podemos ler, alterar, inserir e apagar os registos dessa base de dados. Nesta aula, o aluno ter j de saber alguma coisa sobre base de dados e SQL, se tal no acontece, sugiro um breve estudo destas matrias antes de prosseguir. No nosso curso, as bases de dados usadas so MS Access. Nesta aula, ser usada a base de dados criada na aula anterior (pessoas.mdb) e ser criada uma pgina basedados.aspx, onde sero acrescentadas funcionalidades ao longo da aula.

Ler dados de uma base de dados


Vamos agora ver como se l dados de uma base de dados. O primeiro passo fazer a conexo base de dados como vimos na aula anterior, depois temos de definir o comando SQL (neste caso ser um SELECT pois trata-se de uma leitura), e, por fim, executar esse comando e atribuir o resultado a um objecto DataReader. Vamos ler o Nome das pessoas que esto na base de dados e mostrar numa pgina.

Na pgina basedados.aspx, criamos o evento Page_Load e definimos os seguintes passos:

1. A conexo: feita, como j vimos, a uma base de dados MS Access que est na raiz da aplicao e tem como nome pessoas.mdb.

Sub Page_Load(sender as Object, e as EventArgs) Dim connString as String connString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Server.mappath(".\pessoas.mdb") & ";" SOURCE=" &

Dim objConnection as OleDbConnection 'declara objecto para conexo objConnection = New OleDbConnection(connString) 'cria conexo objConnection.Open() 'abre a conexo

2. O comando SQL: definido o comando SQL para ler da base de dados o Nome da tabela Pessoa, criado um objecto command para executar o comando SQL definido, utilizando a conexo criada.

55

Utilizao do ADO.NET

Dim strQuery as String = "SELECT Nome FROM Pessoa" 'Cria um objeto Command Dim objCommand as OleDbCommand objCommand = New OleDbCommand(strQuery, objConnection)

3.

Leitura

dos

dados:

agora

temos

de

criar

um

objecto

do

tipo

OLEDbDataReader que guardar o resultado do comando SQL, executamos o comando e atribumos o valor ao objecto OLEDbDataReader, depois lemos os valores com o mtodo Read e a propriedade Item do objecto. Para alm da propriedade Item(nome do campo da base dados) para ler dados, existe um mtodo para leitura de dados, esse mtodo o GetValue(n) que l a coluna n do registo actual, n inicia em 0 que corresponde primeira coluna. Existem muitos outros mtodos no objecto OLEDbDataReader que merecem uma pesquisa.

Dim nomes as OLEDbDataReader nomes = objCommand.ExecuteReader While nomes.read Response.write (nomes.Item("Nome") & "<br>") End While

4. Fecho: fechamos o objecto de leitura e a conexo.

nomes.Close() 'fecha o datareader objConnection.Close() 'Fecha a conexo base de dados End Sub

E assim finalizamos a nossa consulta base de dados, pelo que, agora s temos que invocar a pgina basedados.aspx num browser e temos o seguinte resultado:

Imagem 17 Resultado da consulta base de dados 56

Utilizao do ADO.NET

Inserir dados numa base de dados


Uma das operaes importantes sobre uma base de dados a insero de novos dados nas aplicaes WEB, o que poder ser encontrado, quando um utilizador se regista, quando um visitante assina o livro de visitas, etc. Por isso, vamos agora ver como se inserem novos registos a uma base de dados MS Access. Vamos continuar a construir funcionalidades para a nossa pgina basedados.aspx.

1. A conexo: mais uma vez, tem que ser feita a conexo base de dados. Como vamos utilizar a mesma base de dados, j no necessitamos de criar a conexo, pois j est criada no evento Page_Load, por isso, quando a pgina aberta, a conexo feita automaticamente, s temos de declarar o objecto da conexo como global, para que possa ser acedido em qualquer parte da nossa pgina. Sugiro, tambm, criar um novo mtodo que se responsabiliza pela conexo base de dados, e um mtodo que leia e visualize os dados, ou seja, vamos estruturar a nossa pgina para receber novas funcionalidades.

Dim objConnection as OleDbConnection 'objecto GLOBAL

Sub conexao(connString as String) objConnection = New OleDbConnection(connString) objConnection.Open() 'abre a conexao End Sub

Sub consulta_nome() Dim strQuery as String = "SELECT Nome FROM Pessoa" 'Cria um objeto Command Dim objCommand as OleDbCommand objCommand = New OleDbCommand(strQuery, objConnection)

Dim nomes as OLEDbDataReader nomes = objCommand.ExecuteReader While nomes.read Response.write (nomes.Item("Nome") & "<br>") End While nomes.Close()'fecha o datareader End Sub

57

Utilizao do ADO.NET
Sub Page_Load(sender as Object, e as EventArgs) Dim connString as String connString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.mappath(".\pessoas.mdb") & ";" conexao(connString) 'Conexo If Not Page.IsPostBack Then consulta_nome() 'Consulta base de dados objConnection.Close() 'Fecha a conexo base de dados End If End Sub

Como podemos constatar, a nossa pgina basedados.aspx ficou mais organizada, sendo, agora, mais fcil, adicionar novas funcionalidades e reaproveitar as j existentes.

Para aumentar um pouco o nvel de dificuldade, vamos adicionar uma nova tabela nossa base de dados. Essa tabela contm os grupos de sangue. Vamos adicionar um novo campo tabela Pessoa, de modo a que esse campo referencie um grupo de sangue da tabela Grupo_Sangue.

Imagem 18 Relao entre tabelas da base de dados pessoas.mdb

2. O formulrio para introduzir os dados: temos que criar um formulrio para introduzir os dados que posteriormente sero adicionados base de dados. Temos que ter neste formulrio, quatro campos, Nome, Morada, Idade e Grupo de Sangue. Para o campo Grupo de Sangue, use o controlo DropDownList. Como este assunto j foi tratado, a construo do formulrio ficar por sua conta, no se esquea dos controles de validao para validar os dados introduzidos pelo utilizador.

58

Utilizao do ADO.NET 3. Agora que j temos o formulrio criado e validado, vamos criar uma funo que reaja ao evento Click do boto Inserir dados:

Sub btInserir_Click(sender As Object, e As EventArgs) End Sub

Aqui temos a funo criada, agora s temos que adicionar o cdigo para adicionar os dados do formulrio nossa base de dados:

Sub btInserir_Click(sender As Object, e As EventArgs) 'Cria um objeto Command Dim objCommand as OleDbCommand Dim Dim Dim Dim nome as String = txtNome.Text morada as String = txtMorada.Text idade as Byte = txtIdade.Text gs as Byte = cint(DLGS.SelectedValue)

Dim strQuery as String = "INSERT INTO Pessoa(Nome, Morada, Idade, GS) VALUES ('"& Nome &"', '"& Morada &"'," & Idade &", " & gs &")" If Page.IsValid Then objCommand = New OleDbCommand(strQuery, objConnection) objCommand.ExecuteNonQuery() Response.Redirect("basedados.aspx") 'Para Actualizar a pgina End If End Sub

Mais uma vez, temos que criar um objecto para executar o comando, depois instanciamos as variveis nome, morada, idade e gs com os valores do formulrio, criamos a String com o comando de insero (INSERT) e, por fim, instanciamos o objecto de comando com o comando e o objecto de conexo e executamos. Se tudo correr bem, obtemos a funo que insere dados na nossa base de dados.

filmes/insert.avi

59

Utilizao do ADO.NET

Actualizar dados de uma base de dados


Agora, vamos construir a funcionalidade que permite actualizar os dados, para isso, em vez de listar os nomes das pessoas directamente na pgina vamos adicionar um controlo DropDownList:

<asp:DropDownList id="DLPessoas" runat="server"></asp:DropDownList>

E vamos alterar a funo consulta_nome(), de modo a que preencha este controlo com o nome das pessoas:

While nomes.read Dim listaNomes As New ListItem() listaNomes.Text = nomes.Item("Nome") listaNomes.Value = nomes.Item("IDPessoa") DLPessoas.Items.Add(listaNomes) End While

Para isso, definimos uma nova lista e atribumos propriedade Text o nome da pessoa e propriedade Value o ID da pessoa, e adicionamos essa lista ao nosso controlo DropDownList. Adicionamos um novo boto Editar e acrescentamos a propriedade
CausesValidation="False" para que as regras de validao criadas no afectem

este controlo e criamos a funo que reage ao evento Click desse boto. Essa funo vai identificar a pessoa seleccionada no controlo DropDownList e preencher os controlos j existentes com os dados dessa pessoa:

Sub btEditar_Click(sender As Object, e As EventArgs) Dim objCommand as OleDbCommand Dim IDPessoa as Long = cint(DLPessoas.SelectedValue) Dim strQuery as String = "SELECT * FROM Pessoa WHERE IDPessoa = " & IDPessoa objCommand = New OleDbCommand(strQuery, objConnection) Dim pessoa as OLEDbDataReader pessoa = objCommand.ExecuteReader pessoa.read() txtNome.Text = pessoa.Item("Nome") txtMorada.Text = pessoa.Item("Morada")

60

Utilizao do ADO.NET
txtIdade.Text = pessoa.Item("Idade") DLGS.SelectedValue = pessoa.Item("GS") End Sub

Agora temos de adicionar um novo boto e a funo que vai actualizar os dados na base de dados:

Sub btActualizar_Click(sender As Object, e As EventArgs) Dim objCommand as OleDbCommand Dim IDPessoa as Long = cint(DLPessoas.SelectedValue) Dim Dim Dim Dim nome as String = txtNome.Text morada as String = txtMorada.Text idade as Byte = txtIdade.Text gs as Byte = cint(DLGS.SelectedValue)

Dim strQuery as String = "UPDATE Pessoa SET Nome = '"& Nome &"', Morada = '"& Morada &"', Idade = " & Idade &", GS = " & gs &" WHERE IDPessoa = " & IDPessoa If Page.IsValid Then objCommand = New OleDbCommand(strQuery, objConnection) objCommand.ExecuteNonQuery() Response.Redirect("basedados.aspx") End If End Sub

E assim j podemos actualizar os dados da nossa base de dados.

filmes/update.avi

Apagar dados de uma base de dados

Por fim, vamos adicionar a funcionalidade de apagar dados da base de dados, para isso, adicionamos um novo boto e utilizamos a DropDownList que contm os nomes das pessoas para identificar a pessoa a ser removida. Aps esta explicao, penso que se torna simples implantar esta funcionalidade:

61

Utilizao do ADO.NET
Sub btApagar_Click(sender As Object, e As EventArgs) Dim objCommand as OleDbCommand Dim IDPessoa as Long = cint(DLPessoas.SelectedValue) Dim strQuery as String = "DELETE * FROM Pessoa WHERE IDPessoa = " & IDPessoa objCommand = New OleDbCommand(strQuery, objConnection) objCommand.ExecuteNonQuery() Response.Redirect("basedados.aspx") End Sub

Assim, terminamos esta aula dedicada manipulao de dados de uma base de dados. Poder ver o funcionamento de todas as funcionalidades no ficheiro basedados.aspx.

62

Utilizao do ADO.NET

Aula 4 Usando o DataSet


Um factor importante para o sucesso da tecnologia ADO.NET o uso de datasets. Um dataset uma cpia em memria dos dados da BD e contm tabelas tal como a BD real. Isto permite uma maior flexibilidade para a aplicao que utiliza esta tecnologia, pois s efectuado o acesso ao servidor da base de dados para efeitos de leitura e escrita da BD. Os datasets so sem dvida poderosos, permitindo diminuir o cdigo das aplicaes ASP.NET. A classe DataSet membro do namespace System.Data e representa o primeiro dos dois maiores componentes da arquitectura ADO.NET (Imagem 14). O outro membro seriam os provedores Data .NET. Podemos resumir os atributos:

baseado em XML; um conjunto de dados em cache que no est conectado ao banco de dados; independente da fonte de dados; Pode armazenar dados em mltiplas tabelas que podem ser relacionadas; Armazena mltiplas verses de dados para coluna e para cada linha em cada tabela;

A ligao entre a fonte de dados e o DataSet feita pelo objecto DataAdapter (Adaptador de dados). A imagem 19 representa uma ilustrao que procura mostrar a interaco entre os objectos ADO.NET e o modelo desconectado com o DataSet.

Imagem 19 Objecto DataSet e objectos ADO.NET

Preencher um DataSet
Podemos preencher um DataSet, essencialmente, de duas formas: o modo desconectado e o modo conectado.

63

Utilizao do ADO.NET

Vejamos o modo desconectado. Usando um DataAdapter atravs de seu mtodo Fill, o mtodo Fill invoca o objecto Command referenciado na propriedade SelectCommand do data adapter; a seguir os dados so carregados no DataSet via mapeamento atravs da propriedade TableMappings do data adapter. Alm disso, devido natureza desconectada do objeto DataSet, podemos carregar um DataSet via cdigo atravs da sua coleco Table. Podemos tambm implementar a integridade entre os dados de um DataSet usando os objectos UniqueConstraint e

ForeignKeyConstraint, alm de criar relacionamentos entre as tabelas do DataSet. Vamos usar a nossa base de dados pessoas.mdb e vamos preencher um DataSet com os dados da tabela Pessoa e Grupo_Sangue e criar o relacionamento entre as tabelas. Para iniciar, teremos que criar uma nova pgina, vamos dar o nome dataset.aspx, vamos criar a conexo base de dados, tal como nos exemplos anteriores, vamos declarar um objecto DataSet como varivel global:

Dim ds As DataSet

Vamos agora criar uma nova funo que ir fazer a consulta base de dados e preencher o DataSet com as duas tabelas da base de dados e respectivos relacionamentos:

Sub preencher() Dim dapessoas As OleDbDataAdapter = New OleDbDataAdapter() dapessoas.TableMappings.Add("Table", "Pessoa") Dim cmpessoas As New OleDbCommand("SELECT * FROM Pessoa", objConnection) cmpessoas.CommandType = CommandType.Text dapessoas.SelectCommand = cmpessoas ds = New DataSet("Pessoas") dapessoas.Fill(ds) Dim dags As OleDbDataAdapter = New OleDbDataAdapter() dags.TableMappings.Add("Table", "Grupo_Sangue") Dim cmgs As OleDbCommand = New OleDbCommand("SELECT * FROM Grupo_Sangue", objConnection) dags.SelectCommand = cmgs dags.Fill(ds)

64

Utilizao do ADO.NET

Dim dr As DataRelation Dim dc1 As DataColumn Dim dc2 As DataColumn dc1 = ds.Tables("Pessoa").Columns("GS") dc2 = ds.Tables("Grupo_Sangue").Columns("IDGS") dr = New System.Data.DataRelation("Grupo Sangue Pessoas", dc2, dc1) ds.Relations.Add(dr) End Sub

Nesta altura do curso, o aluno j dever compreender o cdigo sozinho, pelo que no ser feita qualquer explicao, uma vez que o cdigo muito simples e lgico.

Agora, temos no nosso objecto DataSet uma cpia da nossa base de dados.

filmes/DataSet.avi

Inserir e actualizar dados com DataSet

Como, certamente, j reparou, o objecto DataSet tem um papel muito importante no acesso a dados com ADO.NET. Agora, vamos usar o DataSet para adicionar e alterar dados na nossa base de dados, ou seja, adicionar e alterar os dados no DataSet, pois uma cpia da nossa base de dados, e depois reflectimos essa actualizao na fonte de dados. Para mostrar estas funcionalidades, vamos usar o exemplo anterior, que j temos um DataSet com uma cpia da nossa base de dados e vamos criar o cdigo que permite adicionar dados e alterar registos.

Sub adicionar_alterar() Dim tblPessoas As DataTable tblPessoas = ds.Tables("Pessoa") ' Obtem um novo objeto DataRow do DataTable Dim drAtual As DataRow drAtual = tblPessoas.NewRow()

65

Utilizao do ADO.NET

' Define os novos valores de DataRow drAtual("Nome") = "Joel Oliveira" drAtual("Morada") = "Amarante" drAtual("Idade") = "19" drAtual("GS") = "3" ' Insere DataTable.Rows o novo objeto via mtodo Add da coleo

tblPessoas.Rows.Add(drAtual) drAtual.BeginEdit() drAtual("Nome") = "Joel Rocha" drAtual("Morada") = "Vila Real" drAtual.EndEdit() Dim comBuilder as OleDbCommandBuilder = new OleDbCommandBuilder(dapessoas) dapessoas.Update(ds, "Pessoa") End Sub

Definimos um objecto DataTable ao qual atribumos a tabela Pessoa do DataSet, obtemos um objecto DataRow do objecto DataTable, ou seja, uma nova linha da tabela Pessoa, atribumos os valores aos campos da tabela e adicionamos essa nova linha ao objecto DataTable. Nesta altura, podamos adicionar esta nova linha base de dados, mas para mostrar como se faz a alterao dos dados, alteramos os dados da nossa DataRow, criamos um objecto OleDbCommandBuilder, que cria dinamicamente o comando SQL para executar o pedido e por fim chamamos o mtodo Update do DataAdapter para fazer a actualizao da base de dados. Se a operao for sobre duas ou mais tabelas, antes de chamar o mtodo Update temos de definir as propriedades InsertCommand, UpdateCommand, e DeleteCommand do objecto DataAdapter, consoante as nossas necessidades.
ficheiro DataSet.aspx) (Ver

Como vimos, o objecto DataSet muito til e permite-nos manipular os dados sem ligao base de dados. Para terminar esta aula, explore mais um pouco as propriedades deste objecto e as suas funcionalidades.

66

Utilizao do ADO.NET

Aula 5 DataGrid e DataList


Com o ASP.NET, apareceram novos controlos que facilitam a criao de aplicaes, um desses controlos o controlo DataGrid e o controlo DataList. Nesta aula, vamos conhecer estes controlos e ver as suas potencialidades.

Controlo DataGrid
O controle DataGrid , sem dvida, o mais poderoso e verstil de todos os controlos do ASP.NET. No s, tem muitas propriedades que o utilizador pode ajustar automaticamente, como tambm proporciona formas mais avanadas de

customizao. Vejamos, ento, como criar e ajustar este controlo s nossas necessidades. O controlo DataGrid definido da seguinte forma:

<asp:DataGrid id="DataGrid" runat="server"></asp:DataGrid>

Para ver o funcionamento deste controle vamos utilizar algum cdigo da pgina criada na aula anterior (dataset.aspx) e a base de dados pessoas.mdb. Copie para um novo ficheiro chamado datagrid.aspx, as seguintes funes:

Sub conexao(connString as String) Sub preencher() Sub Page_Load(sender as Object, e as EventArgs)

Agora vamos adicionar um controle DataGrid nossa pgina, esse controle vai ser responsvel pela visualizao dos dados:

<form runat="server"> <asp:DataGrid id="DataGrid" runat="server"></asp:DataGrid> </form>

Na funo preencher(), vamos atribuir o DataSet DataGrid criada:

DataGrid.DataSource = ds

67

Utilizao do ADO.NET
DataGrid.DataBind()

Invoque a pgina datagrid.aspx.

Imagem 20 Resultado DataGrid Quem conhece o ASP clssico, nesta altura deve estar a pensar na quantidade de cdigo e HTML que se gastava para ter este resultado. Agora tudo muito mais simples. Tambm deve estar a pensar, mas o aspecto final da tabela s este? . A resposta no, o controlo DataGrid pode ser configurado para exibir os dados de uma forma mais amigvel, a seguir vamos reservar algum tempo para ver como isso feito. Vamos alterar algumas propriedades do controlo DataGrid:

<asp:DataGrid id="DataGrid" runat="server" BackColor="#FFFFC0" ForeColor="Navy" GridLines="Vertical" CellPadding="2"> </asp:DataGrid>

Para conhecer todas as propriedades do controlo DataGrid e modifica-las de uma forma simples, usamos o WebMatrix. Se invocar a pgina com as alteraes do objecto DataGrid, poder ver que a apresentao dos dados mais amigvel.

Vamos tornar a nossa base de dados e consulta mais ricas, adicionando, para isso, um novo campo tabela Pessoa da nossa base de dados. Esse campo guarda a 68

Utilizao do ADO.NET referncia a uma imagem, essa imagem poder ser a foto da pessoa, sendo assim a nossa tabela Pessoa fica:

Imagem 21 Tabela Pessoa da base de dados pessoas.mdb

Agora, vamos mostrar a imagem a que o campo Foto faz referncia, usando o controlo DataGrid. Para isso, temos que configurar as colunas do DataGrid, dentro das tags do objecto criamos o seguinte cdigo:

<columns> <asp:BoundColumn HeaderStyle-HorizontalAlign="Center" DataField="IDPessoa" HeaderText="ID"></asp:BoundColumn> <asp:BoundColumn HeaderStyle-HorizontalAlign="Center" DataField="Nome" HeaderText="Nome"></asp:BoundColumn> <asp:BoundColumn HeaderStyle-HorizontalAlign="Center" DataField="Morada" HeaderText="Morada"></asp:BoundColumn> <asp:BoundColumn HeaderStyle-HorizontalAlign="Center" DataField="Idade" HeaderText="Idade"></asp:BoundColumn> <asp:TemplateColumn HeaderStyle HorizontalAlign="Center"> <HeaderTemplate>Foto</HeaderTemplate> <ItemTemplate> <img src='<%# Container.DataItem("Foto") %>' border="0" /> </ItemTemplate> </asp:TemplateColumn> </columns>

Apesar de, primeira vista, parecer confuso, o cdigo mostrado muito simples e lgico. Ento vamos analisar. Entre as tags <columns> </columns>, definida toda a configurao das colunas, depois temos quatro asp:BoundColumn que definem as colunas, neste caso uma para o Identificador, uma para o Nome, outra para a Morada e outra para a Idade, e por fim definimos um asp:TemplateColumn, onde personalizamos a nossa coluna, a instruo Container.DataItem("Foto") devolve o valor do campo Foto que o controlo DataGrid possui.

69

Utilizao do ADO.NET Temos de adicionar a propriedade AutoGenerateColumns="False" ao controlo DataGrid para que ele no gere automaticamente as colunas com os dados mas guie-se pela configurao criada. As colunas podem ter a ordem que deseja. Vamos invocar a pgina datagrid.aspx:

Imagem 22 Resultado da pgina datagrid.aspx

Se acha que este controlo poderoso, ainda no viu o seu verdadeiro poder. Vejamos, ento, como editar os dados do controlo DataGrid. Esta tarefa no ASP clssico era morosa e aborrecida, mas agora ficou tudo mais fcil. Vamos ento ver como editar os dados da tabela Pessoa da base de dados pessoas.mdb. Os dados j foram exibidos no exemplo anterior, por isso, para os editar s temos de configurar algumas propriedades do controlo DataGrid. Para permitir a edio no DataGrid vamos ter que incluir mais uma tag entre as tags <columns> </columns>, ou seja, temos de incluir uma coluna para editar, para isso, adicionamos o seguinte cdigo:

<asp:EditCommandColumn ButtonType="LinkButton" CancelText="Cancelar" EditText="Editar" UpdateText="Atualizar" />

Agora, temos que adicionar as seguintes propriedades ao controlo DataGrid:

70

Utilizao do ADO.NET
OnEditCommand="DataGrid_Edit" OnCancelCommand="DataGrid_Cancel" OnUpdateCommand="DataGrid_Atualiza"

Estas propriedades definem as funes que respondem aos seguintes eventos, Editar, Cancelar e Actualizar. As funes so definidas da seguinte forma:

Sub DataGrid_Atualiza(Source As Object, E As DataGridCommandEventArgs)

End Sub

Sub DataGrid_Cancel(Source As Object, E As DataGridCommandEventArgs)

End Sub

Sub DataGrid_Edit(Source As Object, E As DataGridCommandEventArgs)

End Sub

Neste momento, j pode invocar a pgina datagrid.aspx. Aparecer uma nova coluna com um link para editar, mas esse link no reage, pelo que teremos que inserir um cdigo nas funes para que elas reajam aos eventos, mas primeiro, vamos acrescentar uma propriedade coluna ID para que no possa ser editada, essa propriedade ReadOnly="True", ou seja, uma coluna s de leitura.

Sub DataGrid_Atualiza(Source As Object, E As DataGridCommandEventArgs) Datagrid.EditItemIndex = E.Item.ItemIndex consulta_nome() End Sub

Se invocar agora a pgina datagrid.aspx, o link Editar j funcionar, ele activar o link Actualizar e Cancelar e criar textboxs para editar os dados.

Sub DataGrid_Cancel(Source As Object, E As DataGridCommandEventArgs) Datagrid.EditItemIndex = -1 consulta_nome() End Sub

Se voltar a invocar a pgina datagrid.aspx, o link Cancelar j funcionar, ou seja, cancelar a edio dos dados.

71

Utilizao do ADO.NET Agora, vamos criar o cdigo para a funo que actualizar os dados na base de dados:

Sub DataGrid_Atualiza(Source As Object, E As DataGridCommandEventArgs) Dim myCommand As OleDbCommand Dim txtNome As TextBox = E.Item.Cells(1).Controls(0) Dim txtMorada As TextBox = E.Item.Cells(2).Controls(0) Dim txtIdade As TextBox = E.Item.Cells(3).Controls(0) Dim strActualiza as String = "UPDATE Pessoa SET Nome = '" & txtNome.Text & "', Morada = '" & txtMorada.Text & "', Idade = " & txtIdade.Text & " WHERE IDPessoa =" & E.Item.Cells(0).Text myCommand = New OleDbCommand(strActualiza, objConnection) myCommand.ExecuteNonQuery() Datagrid.EditItemIndex = -1 consulta_nome() End Sub

Pode reparar que o cdigo muito simples e curto em relao ao ASP clssico. Comeamos por criar trs objectos TextBox para guardar os dados editados, que so passados por argumento (E), bem como muitas outras informaes, depois o cdigo normal para actualizar a base de dados, como j tivemos oportunidade de verificar. Sugiro que explore as propriedades do argumento do tipo

DataGridCommandEventArgs.

Terminamos, assim, a actualizao dos dados. Como reparou, muito simples e rpido elaborar uma pgina deste gnero, o que no acontecia no ASP clssico. Para ver o resultado final, invoque a pgina datagrid.aspx.

filmes\data_grid_actualizar.avi

Para completar o nosso exemplo, vamos tambm fazer uma funo para apagar um registo da base de dados, adicionando, para isso, a seguinte tag ao controlo DataGrid:

<asp:ButtonColumn Text="<img src='imagens\lixo.gif' border='0' alt='Apagar'>" CommandName="Delete" />

72

Utilizao do ADO.NET Esta tag adiciona um novo boto a cada linha do controlo DataGrid. Este boto representado por uma imagem definida na propriedade Text, mas poderia ser um simples texto. Este boto vai executar o comando Delete especificado na propriedade
CommandName.

Agora, temos de adicionar uma propriedade ao controlo DataGrid, que vai definir a funo que executar o comando deste boto, sendo que a propriedade a adicionar OnDeleteCommand="DataGrid_Delete". Resta-nos, apenas, criar a funo DataGrid_Delete, tal como fizemos na actualizao, e adicionar o cdigo para apagar o registo. Uma vez que, neste momento, estas matrias j sero dominadas, o cdigo para apagar o registo no ser explicado.

Sub DataGrid_Delete(Source As Object, E As DataGridCommandEventArgs) Dim myCommand As OleDbCommand Dim strApaga as String = "DELETE * FROM Pessoa WHERE IDPessoa =" & E.Item.Cells(0).Text myCommand = New OleDbCommand(strApaga, objConnection) myCommand.ExecuteNonQuery() Datagrid.EditItemIndex = -1 consulta_nome() End Sub

Como, certamente, reparou, o controlo DataGrid poderoso e fcil de usar e configurar. Para finalizar, invoque de novo a pgina datagrid.aspx e verifique todas as operaes. Existe neste controlo uma propriedade chamada paginao, cujo objectivo consiste em mostrar os registos em vrias pginas, em que cada pgina mostra um nmero determinado de registos. Esta propriedade muito til quando o nmero de registos considervel, pelo que proponho que pesquise nas propriedades do controlo DataGrid que temos vindo a elaborar, de modo a que ele efectue a paginao dos registos.

Controlo DataList

73

Utilizao do ADO.NET O controlo DataList muito semelhante ao controlo DataGrid, tambm tem os mesmos objectivos que o DataGrid, ou seja, poupar cdigo e elaborar aplicaes rapidamente e de uma forma simples. O controlo DataList definido da seguinte forma:

<asp:DataList id="DataList" runat="server"></asp:DataList>

Como o funcionamento deste controlo muito idntico ao controlo DataGrid no ser mais aprofundado. (Ver ficheiro Curso/datalist.aspx)

74

Utilizao do ADO.NET

Aula 6 Associar a dados Extensible Markup Language


Ao falarmos em .NET temos, obrigatoriamente, que falar em XML (Extensible Markup Language). Ora, o ASP.NET no excepo, e temos XML em quase tudo, j vimos que o ficheiro de configurao web.config escrito em XML, mas no ficamos por aqui. Nesta aula, veremos como criar um ficheiro XML com os dados de uma base de dados, para isso, temos que usar o objecto DataSet, depois disso, tudo muito simples. Vamos usar o exemplo anterior e no final na funo preencher(), adicione a seguinte linha de cdigo, conforme o caminho da sua pasta virtual:

ds.WriteXml("D:\\Inetpub\\wwwroot\\Curso\\pessoas.xml",XmlWriteMode.Wr iteSchema)

Invoque, agora, a pgina datagrid.aspx. Repare que foi criado um ficheiro XML na sua pasta Curso. Se abrir esse ficheiro, poder verificar que l constam os dados da tabela Pessoa da base de dados pessoas.mdb, que os dados esto organizados por tags, e que essa organizao tambm definida nesse ficheiro XML. Invoque o ficheiro XML no browser, a pode verificar de uma forma mais avanada a organizao dos dados:

Imagem 23 Ficheiro XML criado

75

Utilizao do ADO.NET J pensou criar uma aplicao ASP.NET que guarde dados sem utilizar uma base de dados? Com o ASP.NET isso possvel, poder utilizar um ficheiro XML como uma fonte de dados, vejamos como isso feito. Para mostrar como se utiliza um ficheiro XML como base de dados, vamos criar um livro de visitas. Como vamos utilizar um ficheiro XML, temos de definir a sua estrutura, essa estrutura definida num ficheiro XML Schema, que criaremos de seguida. A estrutura que pretendemos para o ficheiro XML que vai guardar as visitas a seguinte:
<LivrodeVisitas> tag principal, ou seja, o livro de visitas em si; <Mensagem> esta tag armazena cada mensagem includa no Livro de visitas; <id> - identificao da mensagem ; <nome> - nome do autor da mensagem; <data> - data da mensagem; <mensagem> - a mensagem em si.

Com esta configurao, o ficheiro XML que guardar as mensagens ficar:


<?xml version="1.0" encoding="utf-8" ?> <LivrodeVisitas> <Mensagem> <id>0</id> <nome>Roberto Rocha</nome> <data>2004-03-22 13:22</data> <mensagem>Esta a primeira mensagem do GuestBook.</mensagem> </Mensagem> </LivrodeVisitas>

Ento, vamos definir o ficheiro XML Schema (guest.xsd):


<?xml version="1.0" standalone="yes" ?> <xs:schema id="LivrodeVisitas" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemasmicrosoft-com:xml-msdata"> <xs:element name="LivrodeVisitas" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="Mensagem"> <xs:complexType> <xs:sequence> <xs:element name="ID" msdata:AutoIncrement="true" type="xs:int" /> <xs:element name="Nome" type="xs:string" minOccurs="0" /> <xs:element name="Data" type="xs:dateTime" minOccurs="0" /> <xs:element name="Mensagem"

76

Utilizao do ADO.NET
type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="Constraint1" msdata:PrimaryKey="true"> <xs:selector xpath=".//guest" /> <xs:field xpath="ID" /> </xs:unique> </xs:element> </xs:schema>

J temos definida a estrutura dos dados, agora vamos criar uma pgina chamada livrovisitas.aspx, para inserir e visualizar mensagens. Necessitamos de dois campos, Nome e Mensagem, de um boto para inserir as mensagens e de um controlo para visualizar as mensagens existentes, esse controlo poder ser o Repeater que no falamos dele, mas que muito semelhante ao controle DataGrid e DataList. Se tiver dificuldades, consulte o ficheiro LivroVisitas\livrovisitas.aspx. Aps a criao do formulrio, vamos adicionar cdigo para visualizar as mensagens e o cdigo para adicionar novas mensagens. Vamos usar DataSet e DataTable para gerar o XML. O cdigo muito simples. Vamos criar duas variveis globais do tipo String que vo armazenar o caminho para o ficheiro guest.xml e guest.xsd j criados:
Dim strXML As String = Server.mappath("guest.xml") Dim strXSD As String = Server.mappath("guest.xsd")

Agora, vamos criar o cdigo para visualizar as mensagens existentes, para trabalhar com ficheiros XML temos de importar um Namespace chamado System.XML. Agora j podemos trabalhar com ficheiros XML, a leitura das mensagens j existentes ser feita quando a pgina for carregada:

Sub Page_Load() 'Criar uma varivel do tipo XmlDataDocument Dim xddGuest As New XmlDataDocument 'Apontar o DataSetName definido no guest.xsd xddGuest.DataSet.DataSetName = "LivrodeVisitas"

77

Utilizao do ADO.NET
'Ler o ficheiro guest.xsd xddGuest.DataSet.ReadXmlSchema(strXSD) 'Carregar o ficheiro guest.xml xddGuest.Load(strXML) 'Aqui vamos usar o nosso DataSet criado e vincul-lo ao Repeater. rptGuest.DataSource = xddGuest.DataSet.Tables("Mensagem") rptGuest.DataBind() End Sub

Com esse cdigo, carregamos o DataSet e associamos ao Repeater. Agora, temos que fazer com que o Repeater leia os campos do DataSet e apresente os resultados. Para isso, configure o Repeater da seguinte forma:

<asp:repeater id="rptGuest" runat="server"> <HeaderTemplate> <div align="center"> <font face="verdana" size="4"><b>Mensagens</b></font> <br /> <br /> </div> </HeaderTemplate> <ItemTemplate> <font face="verdana" size="2" color="#0053b9"> <%# DataBinder.Eval(Container.DataItem, "Nome") %> </font>- <font face="verdana" size="2"> <%# DataBinder.Eval(Container.DataItem, "Mensagem") %> </font> <br /> <font face="verdana" size="2"><i> <%# DataBinder.Eval(Container.DataItem, "Data") %> </i></font> <br /> <br /> </ItemTemplate> </asp:repeater>

Agora, j podemos visualizar as mensagens no nosso livro de visitas, crie algumas mensagens no ficheiro guest.xml e invoque a pgina livrovisitas.aspx:

Imagem 24 Mensagens do Livro de visitas

78

Utilizao do ADO.NET Vamos criar o cdigo para inserir novas mensagens no ficheiro guest.xml, esse cdigo vai ser criado na funo que reage ao evento Click do boto Enviar. Essa funo cria uma linha, insere na tabela, grava no DataSet e mostra de novo as mensagens.

Sub cmdEnviar_Click(sender As Object, e As EventArgs) 'Criar uma varivel do tipo XmlDataDocument Dim xddGuest As New XmlDataDocument 'Apontar o DataSetName definido no guest.xsd xddGuest.DataSet.DataSetName = "LivrodeVisitas" 'Le o ficheiro guest.xsd xddGuest.DataSet.ReadXmlSchema(strXSD) 'Carrega o ficheiro guest.xml xddGuest.Load(strXML) 'Criar uma nova tabela Dim GuestTable As DataTable GuestTable = xddGuest.DataSet.Tables("Mensagem") 'Criar uma nova linha Dim GuestRow As DataRow GuestRow = GuestTable.NewRow 'Definer os valores da linha GuestRow.Item("Nome") = txtNome.Text Dim data As DateTime data = Now() GuestRow.Item("Data") = data GuestRow.Item("Mensagem") = txtMensagem.Text 'Incluir a linha na tabela GuestTable.Rows.Add(GuestRow) 'Escrever os dados na tabela GuestRow.AcceptChanges() 'Escrever os dados no DataSet xddGuest.DataSet.AcceptChanges() 'Escrever um novo ficheiro guest.xml xddGuest.DataSet.WriteXml(strXML, XmlWriteMode.IgnoreSchema) 'Associa a fonte de dados ao Repeater novamente rptGuest.DataSource = GuestTable rptGuest.DataBind() End Sub

79

Utilizao do ADO.NET E assim, terminamos o nosso livro de visitas. Ao fazer clique sobre o boto enviar, a mensagem ser gravada do ficheiro guest.xml e mostrada na pgina. Como foi simples construir um livro de visitas! Invoque a pgina livrovsitas.aspx e crie uma nova mensagem.

filmes\livrovisitas.avi

Terminamos, assim, esta aula dedicada aos dados via XML, e terminamos este mdulo. Pode, agora, considerar-se preparado para desenvolver aplicaes web mais robustas e complexas.

Auto-avaliao do mdulo 3
Continue o exerccio de auto-avaliao do mdulo 2, crie uma base de dados que contm dados dos utilizadores, crie um formulrio para registar novos utilizadores e altere o formulrio de acesso, de modo a pesquisar se o utilizador existe ou no na base de dados. Cada acesso dever ficar registado num ficheiro XML, com a data, hora e nome do utilizador.

Curso\Restrita\acessos.mdb Curso\Restrita\login.aspx Curso\registo.aspx Curso\Restrita\degault.aspx Curso\Restrita\acessos.xml Cursos\Restrita\acessos.xsd

80

Separando cdigo e contedo

Mdulo 4 Separar cdigo e contedo


Objectivos do mdulo
O objectivo deste mdulo ensinar a criar aplicaes web modulares, separando o cdigo do contedo para reaproveitamento de cdigo.

Sumrio
Aula 1 Separar cdigo e contedo Aula 2 Criar e usar pginas code behind com VS .NET Aula 3 Criar e usar User Controls Aula 4 Criar e usar componentes

81

Separando cdigo e contedo

Aula 1 Separar cdigo e contedo


Os programadores que conhecem o paradigma da programao orientada a objectos sabem e bem que deve-se sempre separar a parte de processamento da aplicao, com a parte de interface com o utilizador. So coisas distintas, por isso, faz todo o sentido estar separado. Com o code behind, as ASP.NET proporcionam-nos uma forma cmoda e elegante de o fazer. Esta ideia consiste em ter um ficheiro template, em que temos a estrutura do site em HTML, e dizemos que esta pgina deriva de uma outra, que, por sua vez, num ficheiro parte, realiza o processamento. Como j reparou, o ASP.NET muito organizado, separando o cdigo do contedo, mas at agora fizemos tudo no mesmo ficheiro. A partir deste momento, vamos entrar na programao ASP.NET mais estruturada. Ao criarmos uma aplicao desta forma, teremos, essencialmente, dois ficheiros, como j vimos, o ficheiro com o HTML e outro com o processamento:

Ficheiro com HTML Este ficheiro tem como extenso .aspx e na primeira linha deve

identificar-se qual o ficheiro code behind que processa a pgina e qual a classe de que ela deriva:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="pagina.aspx.vb" Inherits="WebApplication1.WebForm1"%>

Neste exemplo, o cdigo de processamento est no ficheiro pagina.aspx.vb e o ficheiro .aspx deriva da classe WebForm1 da aplicao WebApplication1.

Ficheiro de processamento Este ficheiro tem como estenso .aspx.vb, no caso da linguagem usada ser o VB, neste ficheiro definida a classe que vai processar o ficheiro com extenso .aspx.

82

Separando cdigo e contedo Como j reparou, neste modelo de programao usam-se classes, pelo que uma classe define um conjunto de caractersticas que so comuns a uma srie de objectos. Desde o incio do curso, temos vindo a usar classes para aceder s bases de dados, aos ficheiros XML, entre outros, mas essas classes j esto definidas no .NET, embora tambm possamos criar as nossas prprias classes. O corpo de uma classe definido da seguinte forma:
Public Class XXXXX Atributos Mtodos End Class

Os atributos distinguem o objecto de um outro do mesmo tipo, guardam as variveis internas do objecto. Os comportamentos so normalmente implementados por intermdio dos mtodos, podemos chamar a um mtodo uma funo, ou quase, ou seja, uma entidade lgica que aceita determinados parmetros de entrada e que realiza uma determinada aco, podendo ou no devolver uma resposta. A diferena que os mtodos, ao contrrio das funes, so definidos no interior de uma classe e destinam-se a operar entre objectos dessa classe.

Nesta aula, j ficou com uma ideia de como se separa cdigo de contedo e as suas vantagens. Para terminar a aula, sugiro que faa uma pesquisa na Internet para aprofundar mais este assunto.

83

Separando cdigo e contedo

Aula 2 Criar, atravs da utilizao de pginas code behind com o VS .NET


Aps uma primeira aula mais terica, passemos prtica. Vamos criar uma aplicao ASP.NET com o modelo de programao code behind, usando, para tal, um ambiente de desenvolvimento .NET bastante potente, e que nos facilita muito a criao de aplicaes. Esse ambiente de desenvolvimento o Visual Studio 2003 .NET da Microsoft.

filmes\vs.avi

Como reparou, ao criarmos uma aplicao para web em VB, o Visual Studio .NET, criou, automaticamente, cinco ficheiros, nomeadamente: AssemblyInfo.vb neste ficheiro encontram-se informaes de assembly, como nome da aplicao, verso, companhia, etc; Globalasax este ficheiro tem a mesma funo do ficheiro Global.asa do ASP clssico, nele so definido mtodos para quando a aplicao iniciada, terminada, quando ocorre um erro, etc; Styles.css ficheiro de estilos; Web.config como j vimos, este ficheiro utilizado para configurar a aplicao; WebForm1.aspx o ficheiro ASP.NET propriamente dito, sendo neste ficheiro que criado todo o cdigo HTML.

Se fizer duplo clique sobre a rea de desenho do ficheiro WebForm1.aspx abre o ficheiro WebForm1.aspx.vb, que, como j vimos, o ficheiro onde definida a classe que processa o ficheiro WebForm1.aspx:

Public Class WebForm1 Inherits System.Web.UI.Page Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here End Sub End Class

84

Separando cdigo e contedo criado o mtodo Page_Load, visto que fez duplo clique sobre a rea de desenho, logo, se adicionar novos objectos pgina e fizer duplo clique sobre ela, criado um mtodo desse objecto. Agora, vamos criar um exemplo de uma aplicao ASP.NET neste modelo de programao e usando o Visual Studio .NET. Abra o Visual Studio .NET e crie uma nova aplicao web, utilizando como linguagem o VB, tal como viu no filme. Adicione uma etiqueta (label), altere as propriedades na janela de propriedades e adicione um texto de boas vindas etiqueta quando a pgina aberta. Repare que quando chama uma propriedade ou um mtodo de um objecto aps fazer . aparece a lista de propriedades e mtodos desse objecto, o que facilita, e muito, a criao de aplicaes.

Imagem 25 Propriedades e mtodos de um objecto label

Agora, temos duas formas de correr a nossa aplicao, uma delas como temos feito at aqui, invocamos num browser a pgina desejada e ela ser compilada e mostrada, ou vamos ao menu Build e seleccionamos a opo Build Solution. Se a compilao correr bem, ser mostrada uma mensagem de sucesso, seno, so mostrados os erros que a aplicao contm, depois da compilao ser executada com sucesso s temos que invocar a pgina num browser para a visualizar, mas agora j no ser compilada, pois j o foi. Tambm podemos seleccionar a opo Start do menu Debug.

Vamos agora criar uma nova classe na nossa aplicao. Ser uma classe muito simples, uma classe que contm um atributo do tipo String e quando criado um objecto desse atributo passado como argumento, uma frase que instancia esse atributo, depois criamos um mtodo que retorna o valor do atributo.

85

Separando cdigo e contedo Para criar uma nova classe no VS. NET, temos vrias maneiras, uma delas seleccionar a opo Add New Item do menu Project. Em templates seleccione Class e atribua o nome Texto.vb. Agora, j temos mais um ficheiro na nossa aplicao, o ficheiro que contm a classe Texto, que teremos que implementar:
Public Class Texto Private strTexto As String Public Sub New(ByVal str As String) strTexto = str End Sub Public Function getTexto() as String Return strTexto End Function End Class

De notar que o mtodo que retorna o atributo uma Function, pois tem de retornar um valor com a instruo Return, os mtodos so definidos como Public, pois tm de ser acedidos por outras classes, o atributo definido como Private, visto que s pode ser acedido pela prpria classe. Aps a implementao, temos de compilar a classe, para isso, seleccione a opo Build Solution do menu Build, tal como fizemos para compilar a aplicao anteriormente. Se a compilao decorreu com sucesso j temos a classe nossa disposio. Vejamos, agora, como usa-la. Voltamos ao nosso ficheiro WebForm1.aspx e dentro do mtodo Page_Load, vamos criar um novo objecto da classe Texto com a frase de boas vindas, depois s temos de chamar o mtodo getTexto() do objecto criado para mostrar a frase de boas vindas.

Dim objTexto As Texto objTexto = New Texto("Ola esta pgina foi construida no VS .NET") lblInicio.Text = objTexto.getTexto()

Como pode ver, a separao de cdigo vantajosa, pois podemos reaproveitar muito cdigo j existente, podemos definir classes para fazer determinadas tarefas repetitivas. O uso do VS .NET como ambiente de desenvolvimento de aplicao ASP.NET facilita, e muito, a criao deste tipo de aplicaes, ente outras, por isso, para terminar esta aula, sugiro que explore um pouco mais o VS. NET e que resolva o exerccio proposto.

86

Separando cdigo e contedo

Exerccio proposto
Crie uma nova classe na aplicao anterior, que faa as operaes matemticas, somar, subtrair, multiplicar, dividir. Crie um formulrio onde ser mostrado o funcionamento da classe.

Curso\VisualStudio\Operacoes.vb Curso\VisualStudio\WebForm1.aspx Curso\VisualStudio\WebForm1.aspx.vb

87

Separando cdigo e contedo

Aula 3 Criar e usar User Controls


Os User Controls so uma nova caracterstica do ASP.NET que proporciona uma forma rpida e simples de reutilizar cdigo. Os User Controls so constitudos por cdigo HTML e/ou cdigo ASP.NET que armazenado em ficheiros com extenso ascx. Imagine que tem que construir uma aplicao para a web que, em todas as pginas, possua, por exemplo, uma caixa que contm o nome e a descrio de um utilizador autenticado. Construa essa caixa em todas as pginas da aplicao copiando o cdigo de pgina para pgina. Imagine, ainda, que no gostou da cor de fundo da caixa, do tipo de letra, acha que a caixa est muito larga, e quer mudar estes aspectos e que, por isso, tinha que ir ao cdigo de cada uma das pginas e alterar. Imagine, agora, se a aplicao contm dezenas de pginas Por sua vez, no ASP.NET, se usar User Controls, todo esse trabalho no existe, tudo muito mais simples de modificar! Um User Control pode ser descrito como um pedao de cdigo que possui vida prpria. Cria o seu prprio controle, adiciona-o na(s) pgina(s) da aplicao que deseja, tal como se adiciona uma caixa de texto ou um boto, e todas as alteraes que se fizer no controle reflectir-se-o em todas as pginas que possuem o controle. User Controls no ASP.NET trazem os benefcios do encapsulamento de cdigo, uso optimizado de memria, cdigo compilado e a capacidade de fazer mudanas rapidamente.

Ento, agora, vamos criar um User Control, seguindo o exerccio de login do nosso curso, o User Control mostrar a data actual e o nome do utilizador autenticado, e ter um boto que far o logout do utilizador. Por fim, ser adicionado pgina default.aspx da nossa rea restrita.

Poder criar este controle com a ajuda do Visual Studio .NET ou com o Web Matrix, qualquer destes ambientes permite criar ficheiro ascx.

Criamos o ficheiro utilizador.ascx dentro da nossa rea restrita. Vamos adicionar as duas etiquetas e o boto, no so necessrias as tags <html> e <body>, pois a(s) pgina(s) a onde o controle vai ser adicionado j as contm.

88

Separando cdigo e contedo Aps o desenho do controle, vamos dar-lhe inteligncia, vamos criar o cdigo que permite fazer o que pretendemos, como vamos ter a data e o nome do utilizador vamos criar duas variveis globais, para guardar estes dados:

Private data as DateTime Private nome as String

No evento Page_Load do controle, adicionamos o cdigo para preencher o User Control:

Private Sub Page_Load() lblData.Text = data.Now.Date() lblNome.Text = HttpContext.Current.User.Identity.Name End Sub

No mtodo que responde ao evento click do boto de logout adicionamos o seguinte cdigo:

Private Sub btLogout_Click(sender As Object, e As EventArgs) FormsAuthentication.SignOut() End Sub

Neste momento, j temos o User Control pronto a ser adicionado a uma ou vrias pginas, por isso, vamos adiciona-lo pgina default.aspx da nossa rea restrita. Para usar um controle numa pgina, preciso torn-lo disponvel para a pgina e implement-lo nesta. Se o controle for adicionado, declarativamente, necessrio usar a directiva @Register para configurar a sintaxe da sua tag. Quando se usa a directiva @Register, pode declarar-se uma instncia do User Control, usando uma sintaxe baseada em tags, similar ao HTML. Os atributos TagPrefix e TagName na directiva @Register determinam a sintaxe para a tag.

Na primeira linha da pgina default.aspx adicione a seguinte tag:

<%@ Register TagPrefix="UtlControl" TagName="UtilizadorControl" Src="utilizador.ascx" %>

Repare que ela informa o prefixo da tag (TagPrefix) a ser utilizado, o nome do controle (TagName) e a sua localizao (Src, no caso, o ficheiro do controle est no mesmo directrio que a pgina aspx). Estas so informaes bsicas sem as quais o

89

Separando cdigo e contedo controle no funcionar. Tendo o controle registado, vamos inserir a tag do nosso User Control na pgina:
<UtlControl:UtilizadorControl id="MeuControle1" runat="server" />

Como pode verificar, ela segue as informaes que usamos ao registar o controle para a pgina (UtlControl:UtilizadorControl). Veja que tambm temos o id do controle, que usaremos para identific-lo dentro do cdigo, tambm podemos ter propriedades. Agora, vamos aprender como colocar um controle na cache do ASP.NET, que mais um novo recurso oferecido no ASP.NET, que permite fragmentar a rea da pgina que vai ser armazenada dentro do servidor e recuperada de forma rpida sem necessidade de reprocessamento. Um exemplo simples poderia ser um DropDownlist que carrega dados de uma base de dados e mostra os seus itens, digamos que essa base de dados actualizada uma vez por ms. Ento, esse controle pode ficar na cache e definir um prazo de durao de 30 dias, por exemplo. Quando a pgina carregar a primeira vez, o controle vai consultar a base de dados, carregar os dados e armazenar na cache. Os prximos utilizadores a visitar a pgina no precisaro de perder tempo, pois o ASP.NET vai recuperar o controle da cache. Ao final do prazo o controle expira na cache e volta a ter necessidade de consultar a base de dados.

Para mostrar o funcionamento da cache adicione ao User Control desta aula a seguinte tag:

<%@OutputCache Duration="30" VaryByParam="none"%>

Esta tag determina que o controle vai ser armazenado na cache com uma durao de 30 segundos. Invoque a pgina default.aspx, autentique-se e fique a actualizar a pgina (F5), frequentemente. Ir observar que a hora do controle s actualiza a cada 30 segundos.

Assim, terminamos esta aula dedicada aos User Controles, que, como teve oportunidade de constatar, mais uma boa forma de criar aplicaes web organizadas.

90

Separando cdigo e contedo

Aula 4 Criar e usar componentes


A palavra-chave dos componentes Reaproveitamento de cdigo, como j vimos nos User Controls. Desenvolver uma aplicao bem estruturada,

proporcionando o uso de componentes, uma excelente maneira de criar aplicaes de forma organizada, modular, simples e objectiva. Um bom planeamento de toda a aplicao antes de desenvolv-la, facilita a sua criao. Toda e qualquer manuteno a ser feita sempre ser mais rpida com o uso de componentes. Se estivesse a desenvolver vrias aplicaes que, por exemplo, necessitavam de dados de uma mesma base de dados, copiava o cdigo de aplicao para aplicao, e se as aplicaes fossem implementadas em linguagens diferentes, a sintaxe do cdigo j no era igual. Para um bom programador, o uso de componentes fundamental, poderia desenvolver um componente para aceder base de dados e retornar os dados que as aplicaes necessitassem, depois s teria que referenciar o componente na aplicao e usa-lo, sendo o mesmo componente usado em todas as aplicaes que necessitassem de aceder queles dados da base de dados. Componentes so ficheiros com extenso dll, o componente poder ser desenvolvido, usado e herdado por qualquer linguagem .NET. Poder ser desenvolvido numa linguagem e ser usado em outra linguagem, o seu uso transparente.

Para demonstrar o uso de componentes, vamos usar a nossa base de dados pessoas.mdb e criar um componente que retorne um DataSet da tabela Grupo_Sangue, e retorne tambm uma DataSet da tabela Pessoa de um determinado grupo de sangue. Para criar o componente, vamos usar o Visual Studio .NET. Crie um novo projecto do tipo Class Library e atribua o nome de Componente.

Imagem 26 Criao de componente no VS .NET

91

Separando cdigo e contedo Aps criar o projecto Componente, altere o nome da classe criada automaticamente Class1.vb para AcessoDados.vb:

Public Class AcessoDados

End Class

Como vamos usar o acesso a uma base de dados MS Access, temos que importar o seguinte namespace:

Imports System.Data.OleDb

Vamos definir um atributo da classe, esse atributo ser do tipo String e guardar a string de conexo base de dados:

Private connString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\Inetpub\wwwroot\Curso\pessoas.mdb;"

O caminho descrito em DATA SOURCE, ter de ser o caminho para a base de dados pessoas.mdb, que, neste caso, o descrito, mas no seu caso poder no o ser. Vamos criar o mtodo (funo), que aps uma consulta base de dados retorna um DataSet com os vrios grupos de sangue:

Public Function GrupoSangue() As DataSet Dim objConnection As OleDbConnection Dim da As OleDbDataAdapter Dim ds As DataSet Dim sql As String = "Select * FROM Grupo_Sangue ORDER BY GS" objConnection = New OleDbConnection(connString) objConnection.Open() da = New OleDbDataAdapter(sql, objConnection) ds = New DataSet da.Fill(ds, "Grupo_Sangue") objConnection.Close() Return ds End Function

Como pode reparar, no existe nada de novo, faz-se a conexo base de dados, a consulta e associa-se a consulta a um DataSet que depois retornado.

92

Separando cdigo e contedo O mtodo (funo) que retorna uma DataSet com pessoas de um determinado grupo de sangue muito semelhante e tambm no acarreta nenhuma novidade.

Public Function Pessoas(ByVal idGrupoSangue As Byte) As DataSet Dim objConnection As OleDbConnection Dim da As OleDbDataAdapter Dim ds As DataSet Dim sql As String = "SELECT * FROM Pessoa WHERE GS = " & idGrupoSangue objConnection = New OleDbConnection(connString) objConnection.Open() da = New OleDbDataAdapter(sql, objConnection) ds = New DataSet da.Fill(ds, "Pessoa") objConnection.Close() Return ds End Function

Aps digitar o cdigo, o ltimo passo para criar um componente fazer a sua compilao para criar o ficheiro dll. Para isso, seleccione a opo Build Solution do menu Build, se a compilao tiver sucesso criado na pasta Bin do projecto o ficheiro Componente.dll, este ficheiro o nosso componente pronto a ser usado.

Imagem 27 Ficheiro dll, componente Agora, todas as aplicaes que necessitam das funcionalidades do componente tero de referenciar este componente para o poderem usar.

Ento, vamos ver como se usa um componente, para facilitar copie o ficheiro dll para a raiz do directrio Curso. Crie no VS .NET um novo projecto do tipo ASP.NET Web Application e d o nome de UsoComponente, altere o nome do ficheiro WebForm1.aspx para UsoComponente.aspx, e adicione ao formulrio uma ListBox para listar os vrios grupos de sangue e uma DataGrid para listar as pessoas com o grupo de sangue seleccionado na ListBox. Para a ListBox, altere a propriedade AutoPostBack para

93

Separando cdigo e contedo True, para que quando seja seleccionado um grupo de sangue da ListBox, o cdigo seja disparado automaticamente. Para usar o componente criado, temos de o referenciar na nossa aplicao, para isso, seleccione a opo Add Reference do menu Project, e localize e seleccione o componente que copiamos para a pasta Curso:

Imagem 28 Seleco do componente No evento Page_Load, digite o cdigo para preencher a ListBox com os vrios grupos de sangue:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not IsPostBack Then 'referencia o componente Dim comp As New Componente.AcessoDados 'atribui as propriedades para a ListBox With Me.lbGS .DataTextField = "GS" .DataValueField = "IDGS" 'preenche a ListBox .DataSource = comp.GrupoSangue.Tables("Grupo_Sangue").DefaultView .DataBind() End With Me.dgPessoas.Visible = False End If End Sub

O comando IsPostBack verifica se foi dado um Post na pgina, ou seja, esse cdigo ser carregado apenas na primeira vez que a pgina for carregada, mesmo estando no evento Page_Load. Para referenciar um componente, atribui-se o mesmo a uma varivel, utilizando o New NomeComponente.NomeClasse(). Para utilizar a funo existente na classe do componente, use a varivel, mais ponto, mais nome da funo. Como esta classe retorna um Dataset que contm um DataAdapter chamado Grupo_Sangue, ento, a origem (DataSource) da ListBox exactamente a tabela designada Grupo_Sangue gerada pelo DataAdapter.

94

Separando cdigo e contedo Agora, vamos criar o cdigo para o evento SelectedIndexChanged da ListBox para preencher o DataGrid com as pessoas do respectivo grupo de sangue. Para facilitar, d um duplo clique sobre o objecto ListBox, que o evento criado automaticamente.

Private Sub lbGS_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbGS.SelectedIndexChanged 'referencia o componente Dim comp As New Componente.AcessoDados Me.dgPessoas.Visible = True 'monta e popula o datagrid With Me.dgPessoas .DataSource = comp.Pessoas(Me.lbGS.SelectedItem.Value).Tables("Pessoa") .DataBind() End With End Sub

Aqui, tambm criamos uma varivel para referenciar o componente, e depois atribudo origem do DataGrid o resultado do mtodo Pessoas do componente que tem como parmetro o identificador do grupo de sangue.

Por

fim,

temos

que

compilar

projecto

invocar

pgina

UsoComponete.aspx. Se tudo correr da melhor forma, o DataGrid preenchido com as pessoas que tm o grupo de sangue igual ao seleccionado na ListBox.

Terminamos, assim, esta aula dedicada aos componentes, e terminamos este mdulo em que aprendemos a criar aplicaes mais estruturadas e modulares, que permitem o reaproveitamento de cdigo e uma fcil e rpida manuteno das nossas aplicaes.

95

Separando cdigo e contedo

Auto-avaliao do mdulo 4
Crie um componente em VS .NET que envie correio electrnico (E-mail) e crie tambm um User Control que contm um formulrio que usar o componente criado. Para enviar E-mail, tem de criar um objecto do tipo MailMessage. Para reconhecer este objecto, tem que importar o namespace System.Web.Mail e depois chamar as suas propriedades. As propriedades a usar esto descritas na tabela seguinte: Propriedade To From Subject Body BodyFormat Descrio Destino do E-mail Origem do E-mail Assunto do E-mail Corpo do E-mail Formato do E-mail (use MailFormat.Text)

Para enviar, tem de seleccionar um servidor de smtp vlido, usando a instruo SmtpMail.SmtpServer = "smtp.servidor.pt", e, por fim, usar a instruo

SmtpMail.Send(objEmail).

Projecto Curso\ComponenteEMail Curso\Enviarmailaspx

96

Web-Services

Mdulo 5 Web Services


Objectivos do mdulo
Este mdulo tem como objectivo ensinar a criar e a usar Web Services, bem como entender o seu funcionamento e a sua utilidade.

Sumrio
Aula 1 O que um servio Web? Aula 2 Chamar um servio Web existente na Web Aula 3 Criar e chamar um servio Web, usando o Visual Studio .NET

97

Web-Services

Aula 1 O que um servio Web?


Services so programas que so executados em background no sistema operacional. A grande vantagem desses programas que no precisam de ser executados por nenhum utilizador, ou seja, quando se liga o computador, o servio comea a ser executado e pode fazer qualquer tarefa como qualquer outra aplicao do sistema. O uso de XML tambm uma grande vantagem. Os Web Services so uma nova e inovadora tcnica para a troca de dados via Web e muitas empresas esto a aderir ao fornecimento e consumo de servios na web.

Anteriormente aos Web Services, a troca de dados entre entidades era normalmente realizada atravs de componentes COM. Porm, a comunicao de componentes COM uns com os outros em locais distantes de uma rede ou at mesmo da internet sempre foi algo complexo. Os componentes COM utilizam o protocolo de rede DCOM, que, por sua vez, baseado no RPC. Consequentemente, torna-se necessrio ter a porta 135 e mais 20 portas aleatrias abertas para a comunicao entre os componentes. Isso sempre foi uma catstrofe para a configurao de Firewalls. Deixar muitas portas abertas sempre um convite a invases.

Claro que sempre foi possvel determinar quais as 20 portas que seriam usadas, mas sempre foi uma configurao demasiadamente complexa, visto que a grande maioria dos administradores de rede no sabia realiza-la. Devido a estes problemas surgiu a ideia de fazer a troca de dados entre componentes COM via XML, apenas pela porta 80.

Porm, como um componente COM pode chamar outro, via porta 80, como toda a comunicao dos componentes pode passar por HTTP? s vezes, a resposta correcta acaba por ser a mais simples e bvia: basta ter um servidor web com "algo" instalado que sirva como intermedirio. Esse servidor Web recebe via POST um documento XML contendo a descrio do que tem que ser chamado

(componente/mtodo), executa o componente e devolve a resposta em XML. Durante muito tempo, foram utilizadas simples pginas ASP para realizar esse papel de intermedirias.

98

Web-Services

Foi neste ponto que comearam a surgir as necessidades de padronizao desta tecnologia. Surgiu ento o Soap (Simple Object Access Protocol), um padro de documento XML para fazer o disparo de um mtodo de um determinado componente existente remotamente e devolver o resultado da execuo deste mtodo. Junto com o SOAP surgiu, praticamente, mais uma necessidade de padronizao, ou seja, tornou-se necessrio que a aplicao fosse capaz de identificar automaticamente os mtodos existentes num servio remoto e a forma de chama-los, para que assim pudesse, no s validar como at mesmo gerar automaticamente os pacotes SOAP para fazer a comunicao. Surgiu ento o padro WSDL (WebServices Description Language), que fornece a descrio de tudo o que um WebService possui. Surgiram, ento, Wizards e componentes capazes de utilizar o WSDL para gerar automaticamente as chamadas SOAP. Realizar a comunicao entre objectos remotos passou a ser semelhante a chamar um componente qualquer, permitindo at mesmo que o programador se esquecesse de que a comunicao ocorre via XML na porta 80. Os web services so mais comparveis a um protocolo de comunicao do que a um componente. Web Service uma forma de comunicao padronizada entre dois componentes, mas o tipo de componentes no importante. Quem vai executar o servio em si, pode ser qualquer um: uma pgina ASP, um componente COM, enfim, qualquer coisa. Mas o WSDL ainda no suficiente para um bom funcionamento dos Web Services na Web. Isto, porque ainda necessrio que o utilizador do servio saiba a localizao exacta do servio para poder utiliza-lo. Para facilitar a descoberta da localizao de servios, foi criado o protocolo de Discovery. Atravs deste protocolo, podemos interrogar um servidor web para descobrirmos os servios que o servidor possui. Porm, com o protocolo de Discovery, ainda teramos que interrogar servidor por servidor para localizarmos um servio. Para evitar isso, foi criado o padro UDDI, um padro para catlogos pblicos de Web Services. A prpria Microsoft mantm um catlogo UDDI, que pode ser pesquisado atravs do prprio Visual Studio.

99

Web-Services

Aula 2 Chamar um servio Web existente na web


Existem neste momento vrios Web Services disponveis na Web e que podero ser usados nas nossas aplicaes, sendo um deles, o servio de pesquisa disponibilizado pelo Google. Vamos ver um exemplo de utilizao de Web Services, utilizando o Web Service do Google para realizar uma pesquisa. Para usar o Web Service do Google necessrio fazer um registo gratuitamente e fazer o donwload de uma ferramenta de desenvolvimento no endereo http://www.google.com/apis/. Vamos, porm, fazer a demonstrao, directamente, utilizando uma chave j gerada pelo google.

Crie um novo projecto ASP.NET Web Application no Visual Studio .NET e d o nome de WebServiceGoogle. Aps a criao do projecto, vamos referenciar o Web Service do Google, para isso, seleccione a opo Add Web Reference do menu Project. No campo URL insira o endereo do ficheiro WSDL que contm a descrio do Servio, esse URL http://api.google.com/GoogleSearch.wsdl, tendo em ateno que o servidor case sensitive. Clique em GO e, se correr bem, a referncia ao servio adicionada ao projecto e est pronto a ser usado.

Imagem 29 Web service Google

De notar que o nome do servio GoogleSearchService e contm trs mtodos que podemos usar. Foi adicionado um con na pasta Web References, um globo que representa o Web Service, para facilitar, no futuro, a alterao do nome para Google.

100

Web-Services

Imagem 30 Referencia ao Web service

Agora, vamos construir a nossa pgina aspx para utilizar o servio de pesquisa do Google, pelo que teremos que adicionar uma caixa de texto onde se digita o texto a pesquisar, uma etiqueta que mostrar o total de resultados encontrados, um boto que executar a pesquisa e uma ListBox que mostrar o resultado da pesquisa.

Aps a criao do formulrio, teremos que adicionar o cdigo no evento Click do boto pesquisar:

Private Sub btPesquisar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btPesquisar.Click ' Varivel para guardar a chave de acesso Dim ChaveLicenca As String ' Varivel para acesso ao Web Service do Google Dim ServGoogle As Google.GoogleSearchService = New Google.GoogleSearchService ' Varivel para receber o resultado da pesquisa Dim ResultadoPesquisa As Google.GoogleSearchResult ' licena de acesso ChaveLicenca = "tGCTJkYos3YItLYzI9Hg5quBRY8bGqiM" ' Executa a pesquisa no Google ResultadoPesquisa = ServGoogle.doGoogleSearch(ChaveLicenca, txtPesquisar.Text, 0, 10, False, "", False, "", "", "") ' Exibe o total de itens encontrados lblTotal.Text = ResultadoPesquisa.estimatedTotalResultsCount 'tratar cada um dos resultados obtidos Dim UmResultado As Google.ResultElement For Each UmResultado In ResultadoPesquisa.resultElements lbResultados.Items.Add(UmResultado.title) Next End Sub

101

Web-Services Observe que a pasta Google passou a ser reconhecida pela aplicao de forma semelhante a um Namespace. Passamos a ver as classes expostas pelo Web Service do Google como se fossem classes locais. Desta forma, podemos instanciar a classe GoogleSearchService e utilizar o mtodo do GoogleSearch para realizarmos a pesquisa. Os principais parmetros do mtodo do GoogleSearch so a chave de licena de acesso, o texto a ser pesquisado no google e o valor 10, que indica o nmero mximo de respostas que desejamos obter. Observe que a limitao deste nmero no limita a resposta da propriedade estimatedTotalResultsCount, que continua a mostrar o nmero total de resultados encontrados pelo Google. Observe que as classes e mtodos utilizados a partir da pasta Google so classes e mtodos especficos do servio do Google. Cada Web Service ter classes e mtodos personalizados. Com esse exemplo podemos ter uma boa noo dos recursos que a utilizao de WebServices nos oferece. So milhares de novas possibilidades em termos de desenvolvimento de software.

102

Web-Services

Aula 3 Criar e chamar um servio Web usando o VS .NET


Como reparou, o uso de um Web Servio muito idntico ao uso de componentes e a sua criao tambm muito semelhante. Vamos criar um Web Service que disponibiliza os mesmos mtodos que o componente criado na aula 4 do mdulo passado, ou seja, retorna um DataSet da tabela Grupo_Sangue, aps uma consulta base de dados e um outro mtodo que retorna uma DataSet de pessoas de um respectivo grupo de sangue.

Crie um novo projecto do tipo ASP.NET Web Service no Visual Studio .NET e d o nome de WebService. O VS .NET cria automaticamente um servio web muito bsico:

Imports System.Web.Services <System.Web.Services.WebService(Namespace := "http://tempuri.org/WebService/Service")> _ Public Class Service Inherits System.Web.Services.WebService ' WEB SERVICE EXAMPLE ' The HelloWorld() example service returns the string Hello World. ' To build, uncomment the following lines then save and build the project. ' To test this web service, ensure that the .asmx file is the start page ' and press F5. ' '<WebMethod()> _ 'Public Function HelloWorld() As String ' Return "Hello World" 'End Function End Class

O Web Service criado pelo VS. NET contm um mtodo que retorna uma frase Hello Word. De notar que identificado o caminho para o Web Service que, por defeito, o computador local http://tempuri.org/WebService/Service, que ter que ser alterado caso disponibilize este servio em outro servidor.

Copie o cdigo do componente criado na aula 4 do mdulo passado. Para este servio web, a nica alterao a fazer adicionar a tag <WebMethod()> _ antes de cada mtodo:
Imports System.Web.Services

103

Web-Services
Imports System.Data.OleDb <System.Web.Services.WebService(Namespace:="http://tempuri.org/WebServ ice/Service")> _ Public Class Service Inherits System.Web.Services.WebService Private connString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\Inetpub\wwwroot\Curso\pessoas.mdb;" <WebMethod()> _ Public Function GrupoSangue() As DataSet Dim objConnection As OleDbConnection Dim da As OleDbDataAdapter Dim ds As DataSet Dim sql As String = "Select * FROM Grupo_Sangue ORDER BY GS" objConnection = New OleDbConnection(connString) objConnection.Open() da = New OleDbDataAdapter(sql, objConnection) ds = New DataSet da.Fill(ds, "Grupo_Sangue") objConnection.Close() Return ds End Function <WebMethod()> _ Public Function Pessoas(ByVal idGrupoSangue As Byte) As DataSet Dim objConnection As OleDbConnection Dim da As OleDbDataAdapter Dim ds As DataSet Dim sql As String = "SELECT * FROM Pessoa WHERE GS = " & idGrupoSangue objConnection = New OleDbConnection(connString) objConnection.Open() da = New OleDbDataAdapter(sql, objConnection) ds = New DataSet da.Fill(ds, "Pessoa") objConnection.Close() Return ds End Function End Class

Compile o Web Service e se tal for feito com sucesso j temos criado o Web Service. Agora, vamos criar uma aplicao Web para utilizar as funcionalidades deste

104

Web-Services servio, mais uma vez a aplicao ser muito idntica aplicao criada para usar o componente. Crie um novo projecto do tipo ASP.NET Web Application no VS .NET e d o nome de UsarWebService, adicione uma ListBox e uma DataGrid, tal como no exemplo do uso do componente. Referencie o Web Service criado tal como na aula 2, e altere o nome para Service. Adicione o seguinte cdigo nossa aplicao:

Dim Servico As WebService.Service Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Varivel para acesso ao Web Service Servico = New WebService.Service ' Executa o mtodo do Web Service para preencher a ListBox With Me.lbGS .DataTextField = "GS" .DataValueField = "IDGS" lbGS.DataSource = Servico.GrupoSangue().Tables("Grupo_Sangue").DefaultView lbGS.DataBind() End With End Sub Private Sub lbGS_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbGS.SelectedIndexChanged Me.dgPessoas.Visible = True 'preenche o datagrid With Me.dgPessoas .DataSource = Servico.Pessoas(Me.lbGS.SelectedItem.Value).Tables("Pessoa") .DataBind() End With End Sub

Como pode ver, no cdigo no h muitas diferenas entre o uso de componentes e Web Services. Agora, compile a aplicao e execute. Se tudo funcionar da forma desejada, ter o mesmo resultado do uso do componente, s que desta vez ser usado um servio web.

105

Web-Services

Auto-avaliao do mdulo 5
Elabore um Web Service que disponibilize as temperaturas e o estado do tempo nas principais cidades Portuguesas. Deve usar a base de dados meteo.mdb e o Web Service dever disponibilizar os seguintes mtodos: Retornar um Data Set com todas as temperaturas e estado do tempo; Retornar a temperatura de uma determinada cidade; Retornar o estado do tempo numa determinada cidade; Retornar a temperatura mais elevada no momento e respectiva cidade; Retornar a temperatura mais baixa no momento e respectiva cidade;

Curso\meteo.mdb Projecto Curso\WSMeteo

106

Criao de uma aplicao Web ASP.NET

Mdulo 6 Criao de uma aplicao Web ASP.NET


Objectivos do mdulo
Este mdulo final tem como objectivo fortalecer os conhecimentos na criao de aplicaes web mais elaboradas em ASP.NET, quais os seus requisitos e configuraes.

Sumrio
Aula 1 Segurana em ASP.NET Aula 2 Configurar aplicaes ASP.NET Aula 3 Exemplo prtico Loja on-line

107

Criao de uma aplicao Web ASP.NET

Aula 1 Segurana em ASP.NET


Nesta aula, o aluno aprender algumas noes de segurana em aplicaes ASP.NET. A segurana dever ser uma das primeiras preocupaes no desenvolvimento de aplicaes Web, pois, se deixar para o final, a aplicao poder no estar apta a receber o tipo de segurana que desejado e levar a uma reestruturao completa da aplicao. Nesta aula, vamos ver qual a segurana que se deve aplicar s aplicaes Web. Trs componentes diferentes compem a arquitectura de segurana de uma aplicao: integridade de dados, autenticao e autorizao. A integridade dos dados poder ser assegurada utilizando algumas medidas de criptografia para impedir que outros possam interceptar, ler ou alterar os dados trocados entre o browser e o servidor Web. Poder usar-se HTTP pelo protocolo Secure Sockets Layer (SSL) para codificar os dados. A utilizao do SSL bastante directa e no requer nenhuma codificao, mas tem de se obter primeiro um certificado digital de uma autoridade em certificados. O browser usa este certificado para determinar se o servidor o que reivindica ser. Por outras palavras, o browser usa o certificado para autenticar o servidor. O SSL dever ser usado em sites Web que trocam informaes sigilosas como nmeros de carto de crdito. O SSL tambm til com certos mecanismos de autenticao que necessitam de criptografia. O objectivo da autenticao assegurar que os utilizadores sejam quem eles reivindicam ser. As tcnicas de autenticao envolvem um prompt, solicitando ao utilizador um ID e uma senha, enquanto conferem com a lista de userIDs e senhas. Comunicar o userID e a senha (ou informao equivalente) do cliente para o servidor sem comprometer essa informao, a questo principal sobre autenticao em Aplicaes Web.

O IIS5 Oferece Opes de Autenticao


O IIS 5.0 oferece trs opes de autenticao alm de anonymous (annimo) (nenhuma autenticao). As duas primeiras, Bsica e Sumria, so consideradas padres da Internet. Porm, h alguns problemas com a autenticao Bsica. Ela,

108

Criao de uma aplicao Web ASP.NET simplesmente, envia o userID e a senha ao servidor em texto codificado em Base64. Um hacker no s pode interceptar esta mensagem e obter o userID e a senha, como o servidor obtm a sua senha em texto no codificado. Este um caso claro de utilizao do SSL para complementar o mecanismo de autenticao, oferecendo autenticao de servidor e criptografia necessrios para impedir que outros interceptem a senha do utilizador. O Netscape e o Internet Explorer (IE) suportam a autenticao Bsica. Isto torna a combinao da autenticao Bsica com SSL, uma boa estratgia para aplicaes de Internet, nos quais no se pode requerer um browser especfico. A autenticao Sumria nova no HTTP 1.1, e s o IE5 o suporta. Isto significa que a autenticao Sumria no prtica para a utilizao na Internet, neste momento. A autenticao Sumria considerada mais segura que a Bsica, porque no envia a senha atravs de conexo. Ao contrrio, o cliente prova que sabe a senha, transmitindo a soma de verificao (checksum) ao servidor. (Uma soma de verificao - checksum - um valor calculado, usando a informao original: o userID, a senha, o mtodo HTTP, a URL solicitada e uma chave gerada no servidor.) O servidor usa esta informao para calcular a soma de verificao (checksum) e compara-la soma de verificao (checksum) enviada pelo cliente. Isto, porque o servidor precisa ter acesso informao original. O servidor calcula uma soma de verificao (checksum) semelhante, utilizando os mesmos dados, e ento compara com aquela que foi enviada pelo cliente. Para que este processo funcione, o servidor tem que ter acesso senha do utilizador em texto no codificado. A maneira como o IIS5 implementa a autenticao Sumria exige que o servidor Web tambm aja como seu controlador de domnio, e que voc verifique a opo Active Directory que permite armazenar senhas de utilizador como texto no codificado. Dadas as exigncias e o facto de que a autenticao Bsica com criptografia SSL uma alternativa prtica para a maioria dos browsers, a autenticao Sumria no ser usada. A terceira opo, autenticao Integrada Windows, permite ao servidor autenticar o cliente sem ter de solicitar um userID e senha. Ao invs, o servidor usa as actuais credenciais do utilizador para a autenticao.

109

Criao de uma aplicao Web ASP.NET

Escolha a Melhor Opo


Para aplicaes Internet, a melhor opo usar a autenticao Bsica combinada com SSL. Todos os mecanismos de autenticao exigem que se definam os utilizadores da aplicao como utilizadores Windows no domnio ou no servidor Web. Pode criar-se o prprio esquema de autenticao, usando um formulrio que solicita userID e a contra-senha, comparando-os a uma lista de userIDs e senhas conhecidas mantidas numa base de dados no servidor (como fizemos nas aulas). O ASP.NET possui o recurso embutido de autenticao baseada em cookie, que oferece uma estrutura para fazer exactamente o que queremos. Quando um browser solicita uma pgina numa aplicao que utiliza autenticao cookie ASP.NET, o servidor verifica o cookie que indica se o utilizador foi autenticado. O servidor redirecciona o browser pgina de login, se no encontrar o cookie (como j vimos). Ao contrrio dos outros mtodos de autenticao, a pgina de login uma pgina ASP.NET que contm um formulrio em HTML simples com dois campos de entrada para o userID e senha, como tambm qualquer outra coisa). O utilizador digita um userID e uma senha e envia o formulrio de volta ao servidor. Deve utilizar-se sempre SSL na pgina de login para prevenir a transmisso dos dados do utilizador como texto no codificado. No servidor, utilize a classe CookieAuthentication.Authenticate para verificar se os dados fornecidos so vlidos. A classe CookieAuthentication parte do.NET framework.

110

Criao de uma aplicao Web ASP.NET

Aula 2 Configurar aplicaes ASP.NET


Quando criamos uma aplicao WEB ASP.NET, existem dois ficheiros que merecem a nossa ateno: Global.asax e Web.config, dos quais j falamos nas nossas aulas. Com o ficheiro Global.asax, pode executar um determinado cdigo quando a aplicao iniciada/finalizada ou at mesmo quando qualquer pgina da Aplicao for requisitada. J o ficheiro Web.Config armazena as configuraes da aplicao, tais como: Estado de Sesso, Segurana, Globalizao, etc. Quando cria aplicaes com o Visual Studio .NET, ao criar uma nova aplicao do tipo ASP.NET WebApplication, o ficheiro Global.asax e o ficheiro Web.Config so adicionados automaticamente aplicao.

Imagem 31 Ficheiros Global.asax e Web.Config

O Directrio \bin
Dentro da raiz da aplicao existe um directrio chamado "\bin". Dentro desse directrio esto armazenados ficheiros com formato binrio compilados e utilizados pela aplicao (um exemplo so os ficheiros com extenso *.dll). Os assemblies colocados aqui esto automaticamente disponveis para serem usados nos ficheiros *.aspx, e com isso no precisamos de nos preocupar com os procedimentos complexos de criao.

111

Criao de uma aplicao Web ASP.NET

O ficheiro Global.asax
O directrio Virtual no IIS grande parte da aplicao ASP.NET. Independentemente da pgina, a aplicao iniciada na primeira vez que solicitada. Enquanto os utilizadores navegam pelas pginas, o processamento ocorre em segundo plano. A aplicao poder ser reiniciada da mesma forma que qualquer aplicao tradicional, com a seguinte diferena: enquanto uma aplicao tradicional iniciada e executada num computador desktop, permitindo a interaco directa com o utilizador, uma aplicao ASP.NET iniciada e executada num servidor Web, e o utilizador utiliza um browser para aceder aplicao. Lembrando que tudo em .NET Framework so objectos, temos um objecto chamado HttpApplication, que nos fornece mtodos e eventos. Com isso, podemos deduzir que sempre que uma pgina do directrio virtual for solicitada pela primeira vez, um objecto do tipo HttpApplication instanciado. Como as pginas ASP.NET, realizamos uma ou mais tarefas individualmente, elas no controlam a aplicao de modo geral, no podendo uma pgina afectar directamente a outra. Deve existir uma localizao central que controla a execuo da aplicao. E neste contexto que entra o ficheiro Global.asax. Conhecido como um ficheiro de aplicao ASP.NET, o Global.asax permite-nos programar no lugar do objecto HttpApplication e com isso pode-se controlar a aplicao ASP.NET como se faz com qualquer outro objecto por meio de mtodos e eventos. Apesar do Visual Studio .NET incluir o arquivo Global.asax por default, ele totalmente opcional. Se a aplicao no contiver um ficheiro desse tipo, a aplicao opera de forma padro. Desejando adicionar funcionalidades, a sua utilizao torna-se essencial. O ficheiro Global.asax colocado no directrio raiz da aplicao (Exemplo: http://servidor/site/ - c:\inetpub\wwwwroot\site\). O ASP.NET controla o acesso a esse ficheiro, de modo que no seja acessvel atravs do browser, o que garante a segurana.

112

Criao de uma aplicao Web ASP.NET

Programar o ficheiro Global.asax


O ficheiro Global.asax opera de forma semelhante s pginas *.aspx. O ficheiro Global.asax utilizado para sincronizar qualquer evento exposto pela classe HttpApplication. Eventos que esto no quadro abaixo:

Evento AcquireRequestState AuthenticateRequest AuthorizeRequest BeginRequest EndRequest Error

Descrio Accionado quando a aplicao obtm a cache para a solicitao. Accionado quando a aplicao tenta autenticar a solicitao de HTTP. Accionado quando a aplicao tenta autorizar a solicitao de HTTP. Accionado quando a solicitao de HTTP iniciada. Accionado quando a solicitao de HTTP concluda. Accionado quando surge um erro.

PostRequestHandlerExecute Accionado imediatamente depois do handler de HTTP processar a solicitao. PreRequestHandlerExecute PreSenderRequestContent Accionado imediatamente antes do handler de HTTP processar a solicitao. Se a solicitao tiver contedo adicional (QueryString, Variveis de Formulrio, etc.), este evento accionado imediatamente antes daquele contedo ser recebido. Accionado imediatamente antes de os cabealhos de solicitao serem recebidos. Accionado quando o Aplicativo libera o estado de sesso para a solicitao. Accionado quando o Aplicativo determina a cache para a solicitao. Accionado quando o Aplicativo actualiza e liberta a cache para a solicitao.

PreSenderRequestHeaders ReleaseRequestState ResolveRequestCache UpdateRequestCache

O ficheiro Global.asax padro criado pelo VS .NET:

Imports System.Web Imports System.Web.SessionState Public Class Global Inherits System.Web.HttpApplication

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' Fires when the application is started End Sub

113

Criao de uma aplicao Web ASP.NET


Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) ' Fires when the session is started End Sub Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) ' Fires at the beginning of each request End Sub Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) ' Fires upon attempting to authenticate the use End Sub Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) ' Fires when an error occurs End Sub Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) ' Fires when the session ends End Sub Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) ' Fires when the application ends End Sub End Class

O cdigo mostrado tem apenas os Eventos que o prprio Visual Studio .NET cria, mas podero ser usados mais Eventos. A ordem de execuo dos eventos a seguinte:

1. Application_Start 2. 3. 4. 5. 6. 7. 8. 9. Application_BeginRequest Application_AuthenticateRequest Application_AuthorizeRequest Application_ResolveRequestCache Session_Start Application_AcquireRequestState Application_PreRequestHandlerExecute Page_Load (arquivo *.aspx) ou qualquer outra sada de pgina

10. Application_PostRequestHandlerExecute 11. Application_ReleaseRequestState 12. Application_UpdateRequestCache 13. Application_EndRequest 14. Application_PreSendRequestHeaders

114

Criao de uma aplicao Web ASP.NET Vale a pena lembrar que alguns eventos so executados de acordo com alguma circunstncia. Um exemplo disso o caso do Evento Session_Start, que somente executado quando qualquer pgina solicitada por um utilizador, a partir da segunda vez/pgina, o Evento no ocorre novamente para esse utilizador.

Da mesma forma que importante controlar o processamento da aplicao, necessrio configur-la. Controle de acesso, Segurana, Estado de sesso e at mesmo configuraes personalizadas. Para isso, o ASP.NET fornece um ficheiro baseado em texto, que nos d extensibilidade e fcil configurao. Alm disso, a configurao hierrquica, ou seja, as informaes de configurao de aplicaes so aplicadas de acordo com a estrutura de directrios Virtuais do seu site. Os sub-directrios podem herdar ou anular opes de configurao dos seus directrios-pai. Por padro, todos os directrios so herdados de um ficheiro de configurao padro de sistema chamado de machine.config, (localizado em: "WinNT\Microsoft.NET\Framework\Verso\CONFIG). O ficheiro que responsvel pela configurao o Web.Config, que um ficheiro XML.

O ficheiro Web.config
Dentro deste ficheiro no existe nada de muito significativo, a no ser que ele contm chaves e valores que so reconhecidos pelo ASP.NET. Tais valores so facilmente modificveis, podendo-se adicionar chaves prprias para controlar outras operaes que o ASP.NET no conhece. A estrutura bsica deste ficheiro a seguinte:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> </configSections> <system.web> </system.web> <system.net> </system.net> </configuration>

115

Criao de uma aplicao Web ASP.NET Como vemos, somente XML. Entre as tags <configuration> existem dois elementos diferentes: handlers de seco de configurao e configuraes da seco de configuraes. As configuraes que configuram a aplicao so pares de chave/valor. H dois tipos destas seces: system.net e system.web. A primeira seco para configurar o tempo de execuo da .NET em si. Por sua vez, a segunda para controlar o ASP.NET. As configuraes personalizadas sero colocadas nas tags <system.web>.. O ficheiro Web.Config estabelece a distino entre letras maisculas e minsculas, e sem o formato correcto, a aplicao poder gerar erros. Abaixo, uma tabela com as configuraes disponveis para a utilizao no ficheiro Web.Config:

Seo <appSettings> <authentication> <authorization> <browsercaps> <compilation> <customErrors> <globalization> <httpHandlers> <httpModules> <identity> <location> <pages> <processModel> <sessionState> <trace> <webServices>

Descrio Utilizada para armazenar as suas prprias configuraes personalizadas da aplicao. Configura como o ASP.NET autentica os seus utilizadores. Configura a autorizao de recursos no ASP.NET. Responsvel por controlar as configuraes do componente de capacidades do navegador. Responsvel por todas as configuraes de compilao. Indica como exibir erros no navegador. Responsvel por configurar as opes de globalizao. Responsvel pelo mapeamento de URLs de entrada em classes IHttpHandler. Responsvel por configurar Mdulos de HTTP dentro de um aplicativo. Controla como o ASP.NET acede aos seus recursos. Controla como as configuraes se aplicam a um directrio. Controla configuraes de pginas. Configura as configuraes de modelo de processo do ASP.NET em Sistemas de Servidor da Web do IIS. Configura o Estado de Sesso. Configura o Trace (Rastreamento). Controla as configuraes dos Servios da Web.

Como podem ver, o arquivo Web.Config ajuda a tornar a aplicao bastante flexvel, ou seja, podemos definir funcionalidades globais num nico lugar. Alm disso, uma das vantagens que se houver a necessidade de mudar algo dentro do ficheiro Web.Config, no h a necessidade de recompilar a aplicao.

116

Criao de uma aplicao Web ASP.NET

Vimos que o arquivo Global.asax permite-nos controlar quase todos os aspectos do processamento de uma pgina ASP.NET. Podem utilizar-se os Eventos do objecto HttpApplication para realizar operaes imperceptveis para o utilizador, tornando a aplicao muito mais robusta e eficiente. Alm disso, podemos tornar a nossa aplicao bastante flexvel, utilizando o arquivo de configurao Web.Config, fazendo com que a mesma possa reagir rapidamente a qualquer mudana.

117

Criao de uma aplicao Web ASP.NET

Aula 3 Exemplo prtico Loja on-line


Para finalizar o nosso curso, vamos criar uma aplicao Web ASP.NET. Assim, a nossa aplicao ser uma Loja on-line, tipo supermercado. Nesta aula, o aluno no ter ajuda, ter de solucionar os problemas sozinho. A base de dados a utilizar j est criada em loja.mdb, analise-a bem para iniciar a criao da aplicao. A aplicao vai ser criada na pasta Restrita e o controlo de acessos j foi criado em aulas anteriores, com a base de dados acessos.mdb e o ficheiro login.aspx. O que vamos fazer neste exemplo no nada de novo. Vamos, apenas, juntar o que aprendemos para criar uma aplicao mais elaborada.

A aplicao vai ser criada com a ajuda do VS .NET, pelo que vamos abri-lo e criar um novo projecto ASP.NET Web Application na pasta restrita. A esse projecto daremos o nome de Loja. O cdigo a ser criado no vai ser mostrado, apenas sero dadas indicaes para a criao da Loja, uma vez que o aluno, neste momento, j ter capacidade de desenvolver aplicaes mais elaboradas. Ao analisar a base de dados, reparou que os produtos esto divididos por categorias, as quais tero que ser listadas para, posteriormente, visualizar os produtos dessa categoria. Para listar as categorias, deve usar-se uma DataList que permite que, ao ser selecionado um item dessa DataList, seja preenchida uma DataGrid com os produtos dessa categoria. A DataGrid ter que ser presonalizada para que se possa comprar uma determinada quantidade de um produto.

Imagem 32 Loja On-Line

118

Criao de uma aplicao Web ASP.NET Depois, temos que criar o carrinho de compras. A criao do carrinho de compras muito simples, uma vez que os produtos comprados esto guardados na base de dados, por isso s temos que fazer uma consulta base de dados e

preencher uma DataGrid com os produtos comprados at ao momento.

Imagem 33 Carrinho de compras

E se o utilizador quiser alterar as quantidades do carrinho? Temos que implementar o comando actualizar na DataGrid carrinho, tal como fizemos na aula em que falmos de DataGrids.

Por fim, s temos que adicionar uma label, que informa o valor total do carrinho.

Projecto Curso\Restrita\Loja

Como reparou, a criao de aplicaes mais elaboradas em ASP.NET torna-se simples com o uso dos componentes existentes no ASP.NET. Agora que terminou este curso, j poder criar aplicaes elaboradas em ASP.NET, e se j usou os ASP clssicos, reparou que esta uma nova forma de criar aplicaes web.

A partir deste momento, tudo est nas suas mos

119

Criao de uma aplicao Web ASP.NET

Auto-avaliao do mdulo 6
Usando o exerccio da Loja online, adicione mais funcionalidades a seu gosto, conferindo um aspecto mais profissional loja.

120

Concluso

3. Concluso
Ao longo deste trabalho, dediquei-me elaborao de um curso ASP.NET em modo de e-Learning, apresentando vrios mdulos, que, por sua vez, se encontravam divididos por aulas; alguns exerccios e a respectiva correco. O objectivo primordial centrava-se na apreenso, a curto prazo, da matria leccionada, tendo sido alcanado atravs do planeamento das aulas e dos temas, de modo a apresentarem uma sequncia lgica e um nvel crescente de dificuldade pouco perceptvel para o aluno e que, por esse motivo, no funciona como elemento desmotivador. Quando iniciei este projecto no possua conhecimentos relevantes de ASP.NET. Porm, aps a concluso do trabalho, considero que domino a tecnologia, o que pode ser um factor positivo de avaliao do curso. Uma vez que a minha experincia na rea de e-Learning era nula, este no um curso perfeito, visto que isso s seria possvel com a experincia e com o tempo. O e-Learning que muito certamente vai ser uma ferramenta valiosa nos tempos que vem e quem sabe depois de ter ganho experincia possa construir um curso ainda mais aprofundado de ASP.NET que poderia ser usado por colegas que estejam interessados em conhecer e dominar a tecnologia. Assim, considero positivo o balano deste projecto e considero atingidos os objectivos iniciais.

121

Bibliografia

4. Bibliografia
www.asp.net site dedicado ao ASP.NET www.msdnbrasil.com.br site de ajuda ao desenvolvimento www.linhadecodigo.com.br site de ajuda ao desenvolvimento

122

S-ar putea să vă placă și