Documente Academic
Documente Profesional
Documente Cultură
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
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
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
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
.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
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.
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.
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.
<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
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
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
questionrio.doc
24
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
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
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.
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
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
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
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>:
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 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
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:
<%@ 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.
33
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:
Curso\primeira.aspx
34
<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
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:
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
tipo inteiro, a expresso MinimumControl="8" define o valor mnimo aceite e a expresso MaximumControl="100" define o valor mximo.
<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
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
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
Para verificar se a pgina respeitou todas as validaes, no nosso cdigo podemos chamar a propriedade IsValid do objecto Page, como no exemplo:
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
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">
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.
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,
Por fim, vamos ento aplicar o nosso objecto cultural formatao da data e atribuir o valor ao Label criado.
Para terminar, s temos que fechar a nossa funo com End Sub.
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:
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:
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:
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
42
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
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
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
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.
48
Utilizao do ADO.NET
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
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
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.
<%@ 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
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
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:
Utilizao do ADO.NET
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.
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.
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:
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
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
filmes/update.avi
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
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.
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
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
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:
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:
Agora vamos adicionar um controle DataGrid nossa pgina, esse controle vai ser responsvel pela visualizao dos dados:
DataGrid.DataSource = ds
67
Utilizao do ADO.NET
DataGrid.DataBind()
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:
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:
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:
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:
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:
End Sub
End Sub
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.
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.
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:
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:
Como o funcionamento deste controlo muito idntico ao controlo DataGrid no ser mais aprofundado. (Ver ficheiro Curso/datalist.aspx)
74
Utilizao do ADO.NET
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:
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.
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:
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.
80
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
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:
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
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.
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
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.
87
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:
No mtodo que responde ao evento click do boto de logout adicionamos o seguinte cdigo:
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.
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:
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
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.
91
Separando cdigo e contedo Aps criar o projecto Componente, altere o nome da classe criada automaticamente Class1.vb para AcessoDados.vb:
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:
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
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).
96
Web-Services
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
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
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.
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
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
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;
106
Sumrio
Aula 1 Segurana em ASP.NET Aula 2 Configurar aplicaes ASP.NET Aula 3 Exemplo prtico Loja on-line
107
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
110
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
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
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.
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' Fires when the application is started End Sub
113
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
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
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.
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
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.
119
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