Escolar Documentos
Profissional Documentos
Cultura Documentos
Jlio Battisti
Aprovado em 30 Exames de
Certicificao Microsoft:
MCP 2000 e 2003, MCP+I, MCSE +I,
MCSE 2000, MCSE 2003, MCSA 2000,
MCSA 2003, MCSD, MCDBA e MCDST
ASP.NET
Uma Revoluo na
Construo de Sites e
Aplicaes Web
Site: www.juliobattisti.com.br
e-mail: webmaster@juliobattisti.com.br
I www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Ao adquirir este ebook voc tem o direito de l-lo na tela do seu computador e de imprimir quantas cpias
desejar. vetada a distribuio deste arquivo, mediante cpia ou qualquer outro meio de reproduo, para
outras pessoas. Se voc recebeu este ebook atravs do e-mail ou via ftp de algum site da Internet, ou
atravs de um CD de Revista, saiba que voc est com uma cpia pirata, no autorizada. A utilizao
de uma cpia pirata, no autorizada, crime de Violao de Direitos Autorais, sujeita a pena de
Cadeia.
O valor cobrado por este arquivo praticamente simblico, pelas horas e horas de trabalho que ele representa.
Novos e-books somente podero ser desenvolvidos pela honestidade de pessoas que adquirem o arquivo
do e-book e no o distribuem livremente para outras pessoas. Se voc recebeu uma cpia deste arquivo
sem t-la adquirido diretamente com o autor, seja honesto, entre em contato com o autor, atravs do e-mail
webmaster@juliobattisti.com.br, para regularizar esta cpia.
Ao regularizar a sua cpia voc estar remunerando, mediante uma pequena quantia, o trabalho do autor
e incentivando que novos trabalhos sejam disponibilizados.
Se voc tiver sugestes sobre novos cursos que gostaria de ver disponibilizados, entre em contato pelo e-
mail: webmaster@juliobattisti.com.br.
Visite periodicamente o site www.juliobattisti.com.br para ficar por dentro das novidades:
Cursos de informtica.
Artigos e dicas sobre Certificaes da Microsoft.
Artigos sobre Carreira e Trabalho.
Dicas de livros e sites sobre diversos assuntos.
Simulados gratuitos, em portugus, para os exames da Microsoft.
www.juliobattisti.com.br II
CAPTULO 8: VALIDATION SERVER CONTROLS
Agradecimentos
Escrever sobre um assunto novo e empolgante como ASP.NET , ao mesmo tempo, estimulante e
desafiador. Estimulante porque representa uma mudana de paradigma e desafiador porque explicar de
uma maneira clara e objetiva um assunto como ASP.NET uma tarefa rdua.
Aos heris, muitas vezes annimos, que se lanaram na aventura de entender o ASP.NET e,
principalmente, divulgar suas descobertas e vitrias, em inmeros sites gratuitos e listas de discusso
da Internet, ficam os meus sinceros agradecimentos. O esprito de colaborao e coleguismo destas
pessoas realmente admirvel.
dona Lucy, minha me, por sempre me apoiar e ser uma grande admiradora e incentivadora de tudo
o que fao.
A meu Pai, em memria, pelo jeito simples e pacato, que me ensinou a parar e refletir nos momentos
difceis. Aos meus irmos agradeo pelos bons momentos que juntos passamos.
Aos amigos de Boqueiro do Leo, pelas poucas horas de lazer e diverso que pude usufruir neste ano de
tanto trabalho. A vocs gostaria de dizer que sinto sinceras saudades da companhia de todos.
equipe editorial da Axcel por acreditar e produzir mais um trabalho de minha autoria. Tambm no
posso deixar de agradecer aos demais membros da Axcel Books, pela sua pacincia em produzir, corrigir
e revisar mais este trabalho, sempre com sugestes para a melhoria do mesmo.
A Deus por nos dar a inteligncia e a determinao na busca de cada vez fazer as coisas de uma maneira
melhor e mais simples.
Sobre o Autor
Jlio Battisti profissional certificado da Microsoft, tendo sido aprovado em 21 Exames da Microsoft,
com os quais obteve certificaes como: MCP, MCP+I, MCSE 2000, MCSE+I, MCDBA 2000 e MCSD.
Trabalha como Gerente de rede na Secretaria da Receita Federal, e trabalha com o Framework .NET e o
ASP.NET desde a verso Beta 1 do Framework .NET, lanada em Junho de 2000. Tambm autor de
artigos de informtica e trabalha com o desenvolvimento e administrao de Web Sites. Atua como
instrutor de cursos de informtica tanto na Secretaria da Receita Federal como para turmas em
Universidades e outros cursos.
III www.juliobattisti.com.br
Conhea Outros Livros do Autor Jlio Battisti
www.juliobattisti.com.br IV
Windows XP Home & Professional 840 pginas
SQL Server 2000: Administrao & Desenvolvimento Curso Completo - 816 pginas
V www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Sumrio
Introduo: Uma Nova Revoluo no Desenvolvimento de Software? 1
Quem Deveria Ler Este Livro? 2
Equipamento e Software Necessrios 2
Instalando e Testando o IIS 5.0 4
Como Obter e Instalar o Microsoft .NET Framework SDK 9
Configuraes do Servidor Utilizado Neste Livro 12
Uma Viso Geral do Contedo do Livro 13
Hora de Comear 13
www.juliobattisti.com.br VI
SUMRIO
Captulo 3: Apresentando o C# 73
Introduo 73
Mais uma Linguagem de Programao? 74
Como a cara de um Programa Escrito em C#? 75
VII www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Tipos da Linguagem C# 82
Value Types 83
O Tipo Struct 86
Os Tipos de Enumerao 90
Reference Types 92
O Tipo String 92
O Tipo Arrays 96
Instrues de Fluxo de Controle no C# 99
Instrues de Seleo 100
A Instruo If 100
A Instruo Switch 105
Instrues de Repetio 109
A Instruo For 110
A Instruo While 114
A Instruo do/while 117
A Instruo Foreach 120
Instrues de Salto (Jump) 123
A Instruo Break 123
A Instruo Continue 123
A Instruo Goto 123
A Instruo Return 124
A Instruo Throw 124
Concluso 124
www.juliobattisti.com.br VIII
SUMRIO
IX www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br X
SUMRIO
XI www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br XII
SUMRIO
Concluso 473
Captulo 14: Segurana de Aplicaes Web com o IIS 5.0 e ASP.NET 579
Introduo 579
Autenticao de Usurios com o IIS 5.0 580
Autenticao Annima 581
Como Definir a Conta Para Acesso Annimo no IIS 5.0 583
Verificando as Configuraes da Conta Para Acesso Annimo no Windows 2000 Server 587
Configurando Permisses NTFS em Pastas do Servidor Web 592
XIII www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br XIV
SUMRIO
ANEXO 1: Principais Tags do HTML e Criao de Contas e Grupos no Windows 2000 710
Introduo 710
Um Passeio Pelo HTML 710
Criao de Contas de Usurios e Grupos no Windows 2000 712
A Estrutura Bsica de uma Pgina HTML 712
Relao das Principais Tags do HTML Utilizadas nos Exemplos do Livro 713
As Tags Para Criao de Ttulos 713
Tags Para a Criao de Tabelas 714
Inserindo uma Linha Horizontal 717
Tags Para Formatao Bsica do Texto 717
Formatao de Fonte 719
A Tag <A></A> 720
O Conceito de Contas de Usurios no Windows 2000 722
Alterando Propriedades Importantes das Contas de Usurios 727
Definindo as Polticas de Senhas 734
Grupos de Usurios e Tipos de Grupos Existentes no Windows 2000 Server 737
Criando Grupos de Usurios e Adicionando Usurios aos Grupos 740
Introduo 745
XV www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br XVI
INTRODUO
Desde Junho de 2000 que a Microsoft vem anunciando a sua iniciativa .NET.
Milhares de artigos j foram escritos sobre esta mais nova empreitada da gigante
de Seattle. A idia bsica por detrs desta iniciativa uma mudana, radical, no
modelo de desenvolvimento, comercializao e utilizao de Software. A iniciativa
.NET a viso da Microsoft para um mundo em que o software passa a ser
comercializado na forma de Servios, os quais so acessados atravs da Internet,
utilizando-se protocolos padro como XML (Extensible Markup Language) e
SOAP (Simple Object Access Protocol).
Um mundo em que o Software visto como servios, os quais podem ser acessados,
atravs da Internet, por qualquer computador ou dispositivo autorizado, no
nenhuma novidade ou inveno da Microsoft. Empresas como IBM, Sun e ORA-
CLE possuem suas prprias ferramentas e iniciativas nesta direo, algumas in-
clusive em estgios bastante avanados de desenvolvimento.
1 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
componentes e a substituio por outros, o que fez com que cdigos criados para a verso Beta 1 no fossem compatveis
com a verso Beta 2.
Durante este ano entre o lanamento da verso Beta 1 e da verso Beta 2 , proliferaram inmeros sites na Internet,
com milhares de artigos sobre o .NET. Isso fez com que a iniciativa da Microsoft tivesse uma visibilidade e divulgao
jamais alcanadas por outras empresas. Inmeros livros foram lanados baseados na verso Beta 1, o que indica o
sucesso da iniciativa. Voc j viu algum livro de Excel, por exemplo, baseado em uma verso Beta 1 do Office?
Nesta introduo veremos o que voc precisa para iniciar com os estudos de .NET. Iremos mostrar qual o equipamento
mnimo de que voc dever dispor para poder instalar o Microsoft .NET Framework SDK e acompanhar os exemplos
deste livro. Tambm iremos orient-lo sobre a obteno e instalao do Microsoft .NET Framework SDK.
Para usurios que j trabalham com as verses anteriores do ASP, o livro oferece a
NOTA: So vrias as possibilidade de conhecer os fundamentos bsicos de uma nova linguagem C#, bem
maneiras de se referir como os elementos bsicos do .NET e a nova verso do ASP ASP.NET.
nova plataforma .NET da
Microsoft: DOT.NET, .NET, Em resumo, nos captulos e anexos deste livro, voc encontrar todas as informaes
Plataforma .NET, necessrias para entender o modelo .NET. Tambm apresentaremos os elementos bsicos
Iniciativa .NET, Frame- da nova linguagem C#. Uma vez conhecendo o modelo .NET e a linguagem C#, estaremos
work .NET aptos a criar aplicaes utilizando ASP.NET.
www.juliobattisti.com.br 2
INTRODUO
Para maiores informaes sobre como planejar a capacidade de hardware para um servidor Web com o IIS 5.0, consulte
o captulo Capacity Planning do livro Internet Information Services Resource Guide, o qual parte integrante do
Windows 2000 Server Resource Kit.
Como equipamento para ser utilizado em casa, ou em um laboratrio de teste na sua empresa, aconselho a seguinte
configurao:
Com menos de 128 MB de RAM, o desempenho, mesmo para uma mquina de testes, fica muito comprometido.
Alm do Windows 2000 Server e do IIS 5.0, tambm precisaremos ter os seguintes programas e servios instalados,
para que possamos acompanhar os exemplos deste livro:
Em cada um dos captulos, estaremos apresentando uma srie de exemplos prticos. Atravs destes exemplos, voc
poder entender melhor a aplicao dos conceitos tericos apresentados. Em muitas situaes, a melhor maneira de
3 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
entender um determinado assunto atravs da utilizao do mesmo para resoluo de um problema prtico do dia-a-
dia. Muitos dos exemplos apresentados podem ser facilmente adaptados para uso em aplicaes que voc esteja
desenvolvendo. Situaes como acesso a Banco de dados atravs de pginas Web, indexao e pesquisa de contedos,
implementao de mecanismos de segurana, etc.; so comuns na maioria das aplicaes Web atuais. Agora vamos
verificar se o IIS 5.0 est instalado e, caso o mesmo no esteja, aprenderemos a fazer a instalao.
www.juliobattisti.com.br 4
INTRODUO
5 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
11. Se esta opo estiver marcada, o IIS 5.0 j est instalado. Neste caso clique no boto Cancelar. Depois s fechar
a janela Adicionar ou remover programas e o Painel de controle.
12. Se esta opo estiver desmarcada, significa que o IIS 5.0 no foi instalado quando da instalao do Windows
2000. Marque esta opo para instalar o IIS 5.0.
13. Observe que, ao marcar a opo, o boto Detalhes habilitado. O IIS 5.0 formado por uma srie de componentes
e funcionalidades. Existe um servidor de pginas Web (servidor HTTP), um servidor de ftp, um servidor de
notcias (NNTP), etc.
DICA: Instale somente os 14. Ao instalarmos o IIS 5.0, podemos escolher um ou mais dos seus componentes,
servios realmente dependendo das necessidades do nosso site. No necessrio que todos os
necessrios. No uma boa componentes do IIS 5.0 sejam instalados. Por exemplo, se o servio de cpia de
idia instalar todos os arquivos no for necessrio, no temos por que instalar o servio de ftp.
www.juliobattisti.com.br 6
INTRODUO
17. Observe que, aps ter selecionado os componentes a serem instalados, o Windows 2000 Server exibe o espao em
disco necessrio, conforme indicado pela Figura 5.
18. D um clique em OK. Voc estar de volta ao Assistente de componentes do Windows.
22. Insira o CD e d um clique em OK. O Windows 2000 inicia o processo de cpia dos arquivos.
23. Depois de concluda a cpia dos arquivos, o Assistente emite uma mensagem dizendo que o processo foi concludo
com sucesso.
7 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Agora que j temos o IIS 5.0 instalado e testado, temos que partir para a instalao do Microsoft .NET Framework
SDK. Este Framework instala todos os componentes necessrios para que possamos criar pginas ASP.NET, utilizar
a linguagem C#, alm de todos os demais componentes necessrios para o .NET. importante salientar que o Visual
www.juliobattisti.com.br 8
INTRODUO
Studio .NET no faz parte deste Framework. No Captulo 13 veremos a instalao e configurao do Visual Studio
.NET. No momento em que este livro estava sendo escrito, o Visual Studio .NET encontrava-se em Beta 2.
Neste endereo temos a opo de baixar um arquivo nico, com 126 MB ou dividir o download em diversas partes,
conforme indicado na Figura 8.
9 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Se voc optar pelo download do arquivo completo, aps concludo o download voc ter um arquivo chamado Setup.exe
de 126 MB. Este o arquivo completo para a instalao do Framework .NET. Mais adiante veremos como proceder
instalao deste arquivo.
Para que o Microsoft .NET Framework SDK Beta 2 possa ser instalado com todas as suas funcionalidades, voc
tambm precisa instalar MDAC Microsoft Data Access Components 2.7, Beta 2. Voc pode fazer o download desta
verso do MDAC, no seguinte endereo: http://download.microsoft.com/download/platformsdk/MDAC2.7/1.0/
NT45XP/EN-US/MDAC_TYP_dnld.exe
O arquivo MDAC_TYP_dnld.exe possui cerca de 5MB. Antes de instalar o Framework .NET vamos instalar o MDAC
2.7 Beta 2.
www.juliobattisti.com.br 10
INTRODUO
7. Se existir algun servio que ser atualizado, em uso, o assistente de instalao avisa e pede para que o respectivo
servio seja parado. Para parar um servio voc pode utilizar o comando Iniciar -> Programas -> Ferramentas
Administrativas -> Servios.
8. Aps a verificao dos servios ser exibida uma tela informando que o MDAC 2.7 ser instalado. D um clique
no boto Concluir e a instalao ser iniciada.
9. Dentro de poucos minutos surge uma tela informando que o MDAC 2.7 foi instalado com sucesso. D um clique
no boto Close, para fechar esta tela.
Aps a instalao do MDAC 2.7, estamos prontos para iniciar a instalao do Microsoft .NET Framework SDK.
9. Por padro todas as opes j vm marcadas. Vamos aceitar este padro. D um clique no boto Next para ir para
a prxima etapa.
10. Nesta etapa devemos def inir a pasta de destino. Por padro selecionada a pasta: \Arquivos de
programas\Microsoft.NET\FrameworkSDK\ do drive onde est instalado o Windows 2000. Vamos aceitar a pasta
sugerida pelo Setup. D um clique no boto Next para ir para a prxima etapa.
11. Nesta etapa iniciada a instalao dos diversos componentes. Este processo demora alguns minutos. medida
que os componentes vo sendo instalados, o andamento da instalao vai sendo exibido, conforme indicado na
Figura 10.
12. No final surge uma mensagem dizendo que a instalao foi completada com sucesso. D um clique no boto OK
para fechar esta mensagem.
Agora o Microsoft .NET Framework est instalado e pronto para ser utilizado. Com isso instalamos todo o Software
necessrio para acompanhar os exemplos deste livro.
Apenas para confirmar, podemos verificar se a instalao ocorreu com sucesso. Selecione o comando Iniciar ->
Programas -> Microsoft .NET Framework SDK. Dentre as vrias opes exibidas selecione a opo Documentation.
11 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Esta opo nos d acesso Documentao completa sobre a plataforma .NET. A verso sempre atualizada desta
documentao pode ser encontrada no site MSDN da Microsoft, no seguinte endereo: http://msdn.microsoft.com/net
Pentium 450
256 MB RAM
Windows 2000 Server em Portugus
IIS 5.0
Microsoft .NET Framework SDK
Nome do servidor: Servidor
Endereo IP: 10.204.123.1
Mscara de sub-rede: 255.255.255.0
Domnio DNS: groza.com
O endereo para acessar a pgina inicial do servidor o seguinte: http://www.groza.com ou http://localhost. Sempre
que for feita referncia a um destes dois endereos, voc deve substituir pelo endereo do equipamento que voc est
utilizando para acompanhar os exemplos deste livro.
www.juliobattisti.com.br 12
INTRODUO
Parte 1 Captulos 1 a 5: Nesta parte trataremos sobre o Framework .NET, o que o mesmo apresenta de novo,
quais os seus principais componentes e como o mesmo pode tornar mais fcil, rpido e eficiente o
desenvolvimento de aplicaes. Tambm veremos os fundamentos bsicos da nova linguagem C# (leia-se C
Sharp).
Parte 2 Captulos 6 a 12: Veremos o que o ASP.NET, quais as novas caractersticas e como criar pginas
ASP.NET. Aprenderemos a conectar pginas com Bancos de Dados, utilizando ADO.NET e tambm a hierarquia
de classes do Framework .NET.
Parte 3 Captulo 13 em diante: Nesta parte final do livro veremos alguns exemplos de aplicativos utilizando
ASP.NET bem como diversas tcnicas e dicas teis para a criao de aplicativos com ASP.NET. Vamos aprender
a instalar o Visual Studio .NET e utiliz-lo para a criao e publicao de pginas ASP.NET. Veremos o que
so e como criar Web Services. Tambm trataremos sobre segurana.
Hora de Comear
Agora que j temos o nosso computador preparado para acompanhar os exemplos deste livro, hora de iniciarmos o
nosso aprendizado. Conforme veremos, o .NET representa uma mudana radical em relao aos modelos de programao
anteriores. Aprender um novo modelo uma tarefa desafiadora. Lembram do programador COBOL para o Main-
frame tendo que aprender programao estruturada e, depois, tendo que passar de programao estruturada para
orientao a objetos?
Se voc est justamente querendo aprender os conceitos deste novo modelo, ento este o livro certo. Apresentaremos
as principais dvidas para aqueles que esto iniciando com o .NET e com ASP.NET.
O cdigo-fonte para os exemplos em C# e para as pginas ASP.NET dos captulos deste livro esto disponveis para
download no site da editora Axcel Books em www.axcel.com.br.
Caso voc tenha sugestes sobre tpicos que gostaria de ver includos em futuras edies deste livro, ou queira relatar
algum erro encontrado no livro, basta entrar em contato atravs do e-mail: livroaspnet@juliobattisti.com.br.
Desejo a todos uma boa leitura e tenho certeza de que este trabalho ir ajud-los no entendimento deste novo paradigma
de programao, bem como ir ajud-los a, rapidamente, criar aplicaes Web baseadas em ASP.NET.
13 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
PARTE
1
O Framework .NET e a Linguagem C#
www.juliobattisti.com.br 14
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Introduo CAPTULO
Neste captulo apresentaremos o Framework .NET. Veremos qual a proposta da
Microsoft com mais esta iniciativa.
Iniciaremos o captulo com uma viso geral, de alto nvel, sobre as propostas do
Framework .NET. Em outras palavras: A que veio e a que se prope o .NET?
Vamos mostrar quais os principais componentes e quais solues pode nos oferecer
o Framework .NET. Antes de entrarmos nos detalhes sobre cada elemento e das
funes de cada elemento, importante entendermos como este novo modelo
1
poder ajudar no desenvolvimento de Software e, em conseqncia, ajudar as
Entendendo a Nova Proposta
empresas a terem sistemas melhores, mais rpidos, mais econmicos e mais
sintonizados com as reais necessidades de cada empresa.
da Microsoft o Framework
.NET
Uma vez devidamente apresentado o Framework .NET, falaremos sobre os
modelos atuais de desenvolvimento e utilizao de Software. Veremos quais os
problemas do modelo atual e quais as solues propostas para estes problemas,
pelo Framework .NET.
15 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Veremos, de uma maneira genrica, o papel de cada um destes componentes no Framework .NET. Estaremos estudando,
detalhadamente, cada um destes itens nos demais captulos deste livro. Apresentamos uma viso geral de cada um
deles, para que o leitor j possa ter uma idia do Framewok .NET e de seus principais componentes, bem como da
funo de cada um.
Este captulo, embora bastante terico, forma a base para o entendimento dos conceitos apresentados ao longo de todo
o livro. Por isso importante que voc entenda os conceitos apresentados. A documentao atualizada, sobre os
conceitos apresentados, pode ser consultada no seguinte endereo: http://msdn.microsoft.com/net.
Em primeiro lugar podemos afirmar que, com a iniciativa .NET, a Microsoft est mudando radicalmente o modelo de
desenvolvimento e utilizao de software. No livro Introducing .NET, da editora Wrox (www.wrox.com), encontramos
duas afirmaes interessantes sobre o Framework .NET:
Um software de uma empresa brasileira pode utilizar um servio que est residente em um servidor de uma empresa
do Japo, desde que tenha permisses para isso. Este servio pode oferecer, por exemplo, a funcionalidade para
validao de uma transao via carto de crdito. Um dispositivo mvel, como um celular WAP ou um Handled,
pode utilzar um servio de cotao de aes de um servidor da bolsa de valores de Londres. E como todos estes
componentes fazem para se comunicar? Evidentemente que atravs da Internet. Por isso a Internet como ponto
principal do projeto .NET.
Conforme veremos mais adiante, estes servios, que podem ser acessados via Internet ou atravs de qualquer Intranet,
so chamados de Web Services.
www.juliobattisti.com.br 16
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Ao invs de programas monolticos, em que toda a funcionalidade necessria faz parte do prprio programa,
construiremos programas como se fosse um jogo de montar. As diversas funcionalidades necessrias ao programa
podem ser oferecidas atravs do acesso a servios j implementados. Na Figura 1.1 temos uma pequena ilustrao
deste conceito.
No site da empresa www.minhaempresa.com, criamos, por exemplo, uma pgina ASP.NET para venda de livros. O
preo dos livros est em dlares e deve ser convertido para a moeda do pas do cliente, no momento da compra. No
exemplo da Figura 1.1, a pgina ASP.NET utiliza um Web Service do servidor www.cotacoes.com, para obter a
cotao atualizada do dlar em relao moeda do pas do cliente. A pgina ASP.NET recebe esta informao, faz os
clculos necessrios e exibe para o cliente. O prximo passo efetivar a venda. Agora o cliente digita o nmero do seu
carto de crdito. Para validar o nmero do carto de crdito do cliente, acessado um outro Web Service, o qual est
instalado no servidor www.validacao.com.
Com esta arquitetura, a criao de software fica bastante simplificada, uma vez que podemos agregar ao nosso programa
funcionalidades disponibilizadas atravs de Web Services que esto instalados em qualquer servidor da Internet.
Desta maneira somente precisamos criar o que especfico do nosso programa. Com isso estamos reaproveitando
cdigo ou como preferem os puristas: reutilizando cdigo.
Como diferentes Web Services, criados por diferentes empresas, podero se comunicar e trocar informaes? Esta
comunicao possvel, porque todo programa criado para a plataforma .NET utiliza um padro para troca de
informaes. No caso temos dois padres:
17 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Para o formato dos dados, o Framework .NET utiliza XML Extensible Markup Language. Conforme veremos
mais adiante, o XML vem ganhando fora como um padro para troca de informaes na Internet, principalmente
para troca de informaes entre empresas em sites de Comrcio Eletrnico.
Como protocolo de transporte, o Framework .NET utiliza o SOAP Single Object Access Protocol. Com
SOAP podemos fazer com que toda a comunicao entre diferentes Web Services e demais componentes de
um programa seja feita atravs do protocolo padro da Internet que o HTTP. O SOAP no um protocolo
criado pela Microsoft para ser utilizado pelo .NET. O SOAP um padro da indstria, sendo utilizado por
produtos de diversas empresas, como IBM, Sun e ORACLE.
Pode parecer que no existe nada de novo nesta abordagem, pois tecnologias para criar programas a partir de componentes
prontos j existem h um bom tempo: COM+, CORBA, etc. Porm a grande vantagem dos Web Services, no Frame-
work .NET, que os mesmos podem ser acessados, facilmente, atravs da utilizao de um protocolo padro: SOAP e
trocando informaes em um formato padro: XML. Esta abordagem torna a criao e utilizao dos Web Services
uma tarefa muito mais simples do que, por exemplo, a criao de componentes COM+ ou CORBA, os quais utilizam
formatos de dados e protocolos de comunicao proprietrios.
Falaremos mais sobre Web Services e tambm aprenderemos a cri-los, mais adiante neste livro.
O Runtime (ambiente de execuo) o ambiente que d suporte execuo das aplicaes .NET. Quando um programa
.NET executado, todo o controle do mesmo feito atravs do CLR.
Para aplicaes anteriores, desenvolvidas utilizando COM/COM+, o programador era responsvel por inserir no cdigo
do programa uma srie de funes necessrias ao correto funcionamento do mesmo, como por exemplo o Gerenciamento
de memria, criao e destruio de objetos. A codificao destas funes no era uma tarefa fcil, o que exigia muito
tempo do programador, alm de conhecimentos avanados. Com aplicaes .NET, todas estas funes so executadas
pelo CLR, ou seja, o programador no precisa preocupar-se com as mesmas. Desta forma somente precisamos nos
preocupar com a funcionalidade do nosso programa, o que poupa tempo e agiliza o processo de desenvolvimento.
As aplicaes criadas em uma das linguagens habilitadas para o .NET (como VB.NET, C# ou ASP.NET), ao serem
compiladas, geram um cdigo intermedirio conhecido como MSIL Microsoft Intermediate Language, o qual
abreviado simplesmente como IL Intermediate Language. Este cdigo que executado pelo CRL. Vamos analisar
o diagrama apresentado na Figura 1.2:
www.juliobattisti.com.br 18
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Para que uma linguagem seja habilitada ao .NET, o seu compilador deve ser capaz de gerar cdigo MSIL.
O Cdigo MSIL gerado executado pelo CRL.
A prpria Microsoft no nega que a idia bastante semelhante ao ambiente de execuo para aplicaes desenvolvidas
em Java, onde temos um ambiente de execuo comum a Mquina Virtual Java, a qual executa byte code, que o
cdigo gerado pelas aplicaes Java.
Todas as linguagens habilitadas ao .NET tm a sua disposio um rico conjunto de classes e objetos, os quais fornecem
desde conexo com banco de dados at funes mais especficas, como funes grficas, de escrita em disco, etc. Este
conjunto de classes e objetos conhecido como .NET Framework class library.
Todo cdigo habilitado a rodar no CLR, ou seja, que pode ser compilado para MSIL conhecido como managed
code ou cdigo gerenciado. Cdigo antigo, como por exemplo COM ou COM+, os quais no esto habilitados para
rodar sob controle do CLR so chamados de unmanaged code ou cdigo no gerenciado. Veremos mais detalhes a
respeito destas definies no Captulo 2, onde trataremos o CLR em mais detalhes.
19 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Os programas criados em qualquer linguagem habilitada ao .NET podem utilizar este conjunto de tipos e classes. Por
exemplo, existe uma classe chamada System.Data, a qual oferece uma srie de objetos e mtodos para acesso s mais
variadas fontes de dados. Vamos a um exemplo mais especfico: existe uma classe chamada System.SqlCliente (na
verso Beta 1 existia uma classe chamada System.SQL, que foi descontinuada na verso Beta 2), a qual fornece uma
srie de mtodos para acesso nativo aos dados de um servidor Microsoft SQL Server. Podemos utilizar a classe
System.SqlCliente em um programa feito em VB.NET, C#, em uma pgina ASP.NET ou qualquer linguagem que
venha a ser habilitada para o .NET.
Ao fornecer um conjunto de classes e tipos, estamos facilitando a vida do programador, uma vez que grande parte da
funcionalidade necessria fornecida diretamente pelo Framework .NET e, o principal, utilizada de uma maneira
padronizada, pois a maneira de utilizar uma classe da biblioteca de classes do .NET a mesma, independente da linguagem.
So muitas as funes disponibilizadas pela biblioteca de classes do .NET, conforme veremos no decorrer deste livro.
Apenas a ttulo de exemplo, vamos citar algumas funes disponibilizadas:
Manipulao de String
NOTA: J existem
Conectividade com banco de dados
diversos fabricantes
trabalhando para Acesso a arquivos
habilitar suas linguagens Segurana
de desenvolvimento para Manipulao de dados
o Framework .NET.
Na Figura 1.3, temos uma viso geral dos principais elementos que formam o Framework .NET.
www.juliobattisti.com.br 20
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Clipper
Pascal Turbo Pascal
Basic
C Turbo C
C++
Um programa para o ambiente MS-DOS, na grande maioria das vezes, era composto por um arquivo executvel (.exe).
Os demais arquivos necessrios ao funcionamento do programa, tais como imagens grficas ou arquivos de dados,
eram salvos, normalmente, no mesmo diretrio (na poca do MS-DOS no falvamos em Pastas) do arquivo executvel
e tudo funcionava perfeitamente bem.
Para instalar o programa em outro computador, bastava copiar o diretrio do programa e pronto, nada mais precisava
ser feito. Podemos ver que o processo de instalao era bastante simplificado, mas em contrapartida o desenvolvimento
era todo manual e as funcionalidades bastante limitadas. As redes locais ainda no eram realidade e a grande maioria
dos programas era feito para trabalhar em um nico computador, acessando dados locais.
Comunicao entre programas, reaproveitamento de cdigo e acesso via rede eram coisas raras ou inexistentes. Para
as necessidades da poca, era um modelo plenamente satisfatrio. A maior prova disso que, ainda hoje, facilmente
encontramos programas feitos em Clipper, para o ambiente MS-DOS, rodando em pequenos estabelecimentos, dando
suporte a todas as operaes dirias. Tente voc propor que estas pessoas substituam seus programas em Clipper, que
atendam perfeitamente s necessidades destes pequenos estabelecimentos, por programas para Windows com inter-
face grfica. Com certeza voc receber um sonoro NO.
Porm logo as redes comeariam a invadir as empresas, os programas a tornar-se mais complexos. Com o advento das
redes e do sucesso dos PCs, mais e mais pessoas comearam a utilizar computadores. A velha interface a caracter do
MS-DOS no atendia mais as necessidades. Neste momento que o Windows comea a surgir no mercado.
21 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Com o lanamento do Visual Basic 1.0 teve incio a era das ferramentas grficas para desenvolvimento de programas
para o Ambiente Windows.
Com o Windows j passou a existir o conceito de Instalar o programa. A instalao do programa no se limitava a uma
simples cpia de arquivos. Ao instalar um programa no Windows, o mesmo gravava uma srie de informaes de
configurao: no Windows 3.x em arquivos .ini e no Windows 9x na Registry do Sistema Operacional. Alm destas
informaes de configurao, partes do programa eram disponibilizadas no formato de arquivos .DLL (Dynamic Link
Library). Falando assim parecia um modelo, digamos, bastante elegante. Um local centralizado para informaes
sobre configurao e o programa dividido em partes menores, que no conjunto forneciam a funcionalidade do programa.
Porm o modelo de programao para o Windows comeou a apresentar uma srie de inconvenientes. Vamos falar
destes inconvenientes, atravs de exemplos:
Se alguma das configuraes, necessrias ao funcionamento do programa, fosse alterada, o programa deixava
de funcionar. Isto gerava uma chamada ao pessoal de suporte que, na maioria das vezes, somente conseguia
resolver a situao reinstalando o programa.
Os arquivos .DLL poderiam ser utilizados por mais do que um programa. Pode acontecer uma situao em que
um programa que esteja sendo instalado substitua uma determinada .DLL por uma verso mais nova do que a
verso da .DLL atualmente existente no sistema. O problema que podem existir programas que dependam da
verso mais antiga. Nesta situao os programas que dependem da verso mais antiga simplesmente deixaro
de funcionar. Pode tambm acontecer o contrrio, ou seja, um programa que est sendo instalado substitui uma
.DLL por uma verso mais antiga, fazendo com que outros programas deixem de funcionar. Em situaes mais
crticas poderia acontecer de o programa que est sendo instalado substituir uma .DLL vital para o Windows.
Nestas situaes todo o sistema deixaria de funcionar e, em alguns casos, somente uma reinstalao poderia
resolver o problema.
Vejam que o que parecia uma boa soluo acabou se mostrando um verdadeiro pesadelo para gerenciar e manter
em funcionamento. Nesta poca surge, inclusive, a expresso DLL Hell, que poderamos traduzir por: O
Inferno das DLLs.
Cada vez que um programa fosse alterado, o mesmo precisaria ser reinstalado em todos os computadores onde
fosse necessria a nova verso. E se, ao fazer a atualizao para a nova verso, fosse substituda alguma .DLL
necessria ao funcionamento de algum outro programa? Novos problemas para o pessoal do suporte. Vejam
que este modelo gera uma grande carga de suporte, o que encarece muito a manuteno em funcionamento de
uma estao de trabalho da empresa.
www.juliobattisti.com.br 22
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Primeiro, com as redes, foi a poca da febre em descentralizar as estruturas de TI e migrar para o modelo Cliente/
Servidor, baseado em redes locais. Neste modelo, tambm conhecido como modelo de duas camadas, temos um ou
mais equipamentos de maior capacidade de processamento, atuando como Servidores. Nas estaes de trabalho dos
usurios, conhecidas como clientes, so instalados programas, que fazem acesso a recursos residentes nos servidores.
O exemplo mais tpico de aplicao Cliente/Servidor seria uma aplicao desenvolvida em Visual Basic ou Delphi, a
qual acessa dados de um servidor SQL Server 2000, instalado em um servidor da rede. Na Figura 1.4, temos uma
viso geral do modelo Cliente/Servidor.
Modelo em 2 Camadas
No incio da utilizao do modelo Cliente/Servidor, as aplicaes foram desenvolvidas utilizando-se um modelo de
desenvolvimento em duas camadas. Neste modelo, um programa, normalmente desenvolvido em um ambiente de
desenvolvimento, como o Visual Basic, Delphi ou Power Builder, instalado em cada estao de trabalho Cliente.
Este programa acessa dados em um servidor de banco de dados, conforme ilustrado na Figura 1.5.
Neste modelo, temos um programa que instalado no Cliente. Programa esse que faz acesso ao banco de dados que
fica residente no Servidor de Banco de dados. Na maioria dos casos, a mquina do cliente um PC rodando Windows,
e a aplicao Cliente desenvolvida utilizando-se um dos ambientes conhecidos, conforme citado anteriormente.
23 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Sendo a aplicao cliente um programa para Windows (na grande maioria dos casos), a mesma deve ser instalada em
cada uma das estaes de trabalho da rede. o processo de instalao normal, para qualquer aplicao Windows. No
modelo de 2 camadas, a aplicao Cliente responsvel pelas seguintes funes:
Apresentao: O cdigo que gera a interface visvel do programa faz parte da aplicao cliente. Todos os
formulrios, menus e demais elementos visuais esto contidos no cdigo da aplicao cliente. Caso sejam
necessrias alteraes na interface do programa, faz-se necessria a gerao de uma nova verso do programa,
e todas as estaes de trabalho que possuem a verso anterior devem receber a nova verso, para que o usurio
possa ter acesso s alteraes da interface. A que comeam a surgir os problemas no modelo em 2 camadas:
uma simples alterao de interface suficiente para gerar a necessidade de atualizar a aplicao, em centenas
ou milhares de estaes de trabalho. O gerenciamento desta tarefa algo extremamente complexo e oneroso
financeiramente.
Lgica do Negcio: As regras que definem a maneira como os dados sero acessados e processados so
conhecidas como Lgica do Negcio. Fazem parte das Regras do Negcio, desde funes simples de validao
da entrada de dados, como o clculo do dgito verificador de um CPF, at funes mais complexas, como
descontos escalonados para os maiores clientes, de acordo com o volume da compra. Questes relativas a
legislao fiscal e escrita contbil tambm fazem parte da Lgica do Negcio. Por exemplo, um programa
para gerncia de Recursos Humanos, desenvolvido para a legislao dos EUA, no pode ser utilizado, sem
modificaes, por uma empresa brasileira. Isso acontece porque a legislao dos EUA diferente da legislao
brasileira. Em sntese, as regras para o sistema de recursos humanos so diferentes. Alteraes nas regras do
negcio so bastante freqentes, ainda mais com as repetidas mudanas na legislao do nosso pas. Com isso,
faz-se necessria a gerao de uma nova verso do programa, cada vez que uma determinada regra muda, ou
quando regras forem acrescentadas ou retiradas. Desta forma, todas as estaes de trabalho que possuem a
verso anterior devem receber a nova verso, para que o usurio possa ter acesso s alteraes. Agora temos
mais um srio problema no modelo de 2 camadas: qualquer alterao nas regras do negcio suficiente para
www.juliobattisti.com.br 24
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
gerar a necessidade de atualizar a aplicao, em centenas ou milhares de computadores. O que j era complicado
piorou um pouco mais.
Com a evoluo do mercado e as alteraes da legislao, mudanas nas regras do negcio so bastante freqentes.
Com isso, o modelo de duas camadas demonstrou-se de difcil manuteno e gerenciamento, alm de apresentar um
TCO Total Cost Ownership (Custo Total de Propriedade) bastante elevado.
A outra camada, no modelo de 2 camadas, o Banco de dados, o qual fica armazenado no Servidor de banco de dados.
Sempre que um determinado modelo apresenta problemas, aparentemente intransponveis, a indstria de informtica
parte para a criao de novos modelos. Em busca de solues para os problemas do modelo de duas camadas que
surgiu a proposta do modelo de 3 camadas, conforme analisaremos a seguir.
Aplicaes em 3 Camadas
Como uma evoluo do modelo de 2 camadas, surge o modelo de trs camadas. A idia bsica do modelo de 3
camadas retirar as Regras do Negcio, da aplicao Cliente e centraliz-las em um determinado ponto, o qual
chamado de Servidor de Aplicaes. O acesso ao banco de dados feito atravs das regras contidas no Servidor de
Aplicaes. Ao centralizar as Regras do Negcio em um nico ponto, fica muito mais fcil a atualizao das mesmas.
A Figura 1.6 nos d uma viso geral do modelo em 3 camadas:
Todo o acesso do cliente, aos dados do servidor de Banco de dados, feito de acordo com as regras contidas no
Servidor de Aplicaes. O cliente no tem acesso aos dados do servidor de Banco de dados, sem antes passar pelo
servidor de aplicaes. Com isso, as trs camadas so as seguintes:
25 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Apresentao: Continua no programa instalado no cliente. Alteraes na Interface do programa ainda iro
gerar a necessidade de atualizar a aplicao em todas as estaes de trabalho, onde a aplicao estiver sendo
utilizada. Porm cabe ressaltar que alteraes na interface so menos freqentes do que alteraes nas regras
do negcio.
Lgica: So as regras do negcio, as quais determinam de que maneira os dados sero utilizados e manipulados.
Esta camada foi deslocada para o Servidor de Aplicaes. Desta maneira, quando uma regra do negcio for
alterada, basta atualiz-la no Servidor de Aplicaes. Aps a atualizao, todos os usurios passaro a ter
acesso nova verso, sem que seja necessrio reinstalar o programa em cada um dos computadores da rede.
Vejam que, ao centralizar as regras do negcio em um Servidor de Aplicaes, estamos facilitando a tarefa de
manter a aplicao atualizada. As coisas esto comeando a melhorar.
Dados: Nesta camada temos o servidor de Banco de dados, no qual reside toda a informao necessria para o
funcionamento da aplicao. Cabe reforar que os dados somente so acessados atravs do Servidor de
Aplicao, e no diretamente pela aplicao cliente.
Com a introduo da camada de Lgica, resolvemos o problema de termos que atualizar a aplicao, em centenas ou
milhares de estaes de trabalho, toda vez que uma regra do negcio for alterada. Porm continuamos com o problema
de atualizao da interface da aplicao, cada vez que sejam necessrias mudanas na Interface. Por isso que surgiram
os modelos de n-camadas.
Para acessar a aplicao, o cliente acessa o endereo da aplicao, utilizando o seu navegador, como no exemplo:
http://intranet.minhaempresa.com/sistemas/vendas.aspx.
Todo o acesso do cliente ao Banco de dados feito de acordo com as regras contidas no Servidor de aplicaes. O
cliente no tem acesso ao Banco de dados, sem antes passar pelo Servidor de aplicaes. Com isso temos as seguintes
camadas:
Cliente: Neste caso o Cliente o Navegador utilizado pelo usurio, quer seja o Internet Explorer, quer seja o
Netscape Navigator, ou outro navegador qualquer.
Apresentao: Passa para o Servidor Web. A interface pode ser composta de pginas HTML, ASP, PHP, Flash
ou qualquer outra tecnologia capaz de gerar contedo para o navegador. Com isso alteraes na interface da
aplicao so feitas diretamente no servidor Web, sendo que estas alteraes estaro, automaticamente,
disponveis para todos os Clientes. Com este modelo no existe a necessidade de reinstalar a aplicao em
www.juliobattisti.com.br 26
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
todos os computadores da rede. Fica muito mais fcil garantir que todos esto tendo acesso verso mais
atualizada da aplicao. A nica coisa que o cliente precisa ter instalado na sua mquina o navegador.
Lgica: So as regras do negcio, as quais determinam de que maneira os dados sero utilizados. Esta camada
est no Servidor de Aplicaes. Desta maneira, quando uma regra do negcio for alterada, basta atualiz-la no
Servidor de Aplicaes. Aps a atualizao, todos os usurios passaro a ter acesso nova verso, sem que
seja necessrio reinstalar o programa em cada estao de trabalho da rede. Vejam que, ao centralizar as regras
do negcio em um Servidor de Aplicaes, estamos facilitando a tarefa de manter a aplicao atualizada.
Dados: Nesta camada temos o servidor de Banco de dados, no qual reside toda a informao necessria para o
funcionamento da aplicao.
Com o deslocamento da camada de apresentao para um Servidor Web, resolvemos o problema de termos que
atualizar a aplicao, em centenas ou milhares de computadores, cada vez que uma interface precisar de alteraes.
Neste ponto a atualizao das aplicaes uma tarefa mais gerencivel, muito diferente do que acontecia no caso do
modelo em 2 camadas.
Os servidores de Aplicao, Web e banco de dados no precisam necessariamente ser servidores separados, isto ,
uma mquina para fazer o papel de cada um dos servidores. O conceito de servidor de Aplicao, servidor Web ou
servidor de Banco de dados um conceito relacionado com a funo que o servidor desempenha. Podemos ter, em um
mesmo equipamento, um Servidor de aplicaes, um servidor Web e um servidor de Banco de dados. Claro que
questes de desempenho devem ser levadas em considerao.
Tambm podemos ter a funcionalidade do Servidor de Aplicaes distribuda atravs de vrios servidores, com cada
servidor tendo alguns componentes que formam parte das funcionalidades da aplicao. Este modelo onde temos
27 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
componentes em diversos equipamentos conhecido como Modelo de Aplicaes Distribudas. Tambm podemos
colocar os componentes em mais do que um servidor para obtermos um melhor desempenho, ou redundncia, no caso
de um servidor falhar.
Para responder a pergunta anterior, vamos continuar colocando alguns problemas com o modelo de desenvolvimento
em uso atualmente, que o modelo de n-camadas, com aplicaes que utilizam componentes distribudos atravs de
diversos servidores: Servidor Web, de aplicaes, de Banco de dados, etc.
O modelo de programao atual, para o ambiente Windows, fortemente baseado no conceito de componentes. No
exemplo do modelo de 4 camadas, quando uma aplicao cliente acessa uma regra de negcio, esta regra de negcio
implementada na forma de um componente COM/COM+. A regra de negcio pode utilizar um outro componente
para fazer a conexo com o Banco de dados e retornar os dados solicitados pela aplicao. Para que os diversos
componentes possam comunicar-se e trocar informaes, os mesmos precisam de um padro para a troca de mensagens.
O padro determina a estrutura interna do componente e a maneira como cada componente expe suas funcionalidades.
O padro para o ambiente Windows chamado, a partir do Windows 2000, de COM+. Para o Windows NT 4.0 e
verses anteriores, tnhamos o COM/DCOM trabalhando em conjunto com o MTS Microsoft Transaction Server.
Mas se existe um padro para troca de mensagens qual o problema? Acontece que a implementao de componentes
utilizando COM/COM+ no das tarefas mais simples. Se utilizarmos linguagens como o Visual C++, a criao e
disponibilizao de componentes uma tarefa que exige programadores altamente especializados. J com ferramentas
como o Visual Basic e Delphi, a criao de componentes para o padro COM+ um pouco mais fcil. Porm a grande
dificuldade fazer com que componentes implementados em diferentes linguagens sejam capazes de trabalhar em
conjunto e trocar mensagens entre si.
Agora imagine as dificuldades em um ambiente em que devemos criar aplicaes para a Internet, onde deve existir
uma maneira padronizada para que os diversos componentes sejam capazes de se comunicar. A Microsoft, com a sua
iniciativa DNA, procurou disponibilizar informaes para que seja possvel tirar o mximo do modelo COM+, na
criao de aplicaes em n-camadas para a Internet. Porm a prpria Microsoft reconheceu as limitaes e dificuldades
deste modelo, ao propor uma nova revoluo nos mtodos e prticas de desenvolvimento, revoluo essa que atende
pelo singelo nome de .NET.
Outro fator importante a considerar que o padro COM/COM+ um padro proprietrio, desenvolvido pela Microsoft.
Como fazer com que um padro proprietrio possa ser utilizado, sem maiores problemas para aplicaes distribudas
na Internet? Fica muito difcil, para no dizer impraticvel. J com o .NET, conforme comentamos anteriormente,
utiliza-se padres no proprietrios, como XML para os dados e SOAP sobre HTTP como protocolo de transporte.
Desta forma, a comunicao entre Web Services acontece de uma maneira fcil, sem maiores problemas.
www.juliobattisti.com.br 28
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Para que um componente COM/COM+ possa ser utilizado, o mesmo precisa ser registrado no servidor que ir
disponibilizar o componente para isso. Ao registrar o componente, so gravadas informaes sobre o mesmo, na
registry do Sistema Operacional. O programador precisa preocupar-se em garantir que o componente seja registrado
corretamente, pois, caso contrrio, o mesmo no poder ser acessado. J os servios do .NET no necessitam de
registro, sendo que toda a informao necessria para que os mesmos funcionem est contida no prprio servio, no
formato de metadados Metadata. Mais adiante falaremos um pouco mais sobre Metadata.
Com componentes COM/COM+, o programador precisa preocupar-se em carregar o componente na memria, retirar
o componente da memria quando o mesmo no for mais utilizado e uma srie de outras funes necessrias ao
funcionamento do componente. Com o .NET, todas estas preocupaes foram transferidas para o Framework .NET.
Isto faz com que o programador somente tenha que codificar a funcionalidade do servio que est sendo desenvolvido,
a parte mais, digamos assim, chata, ser de responsabilidade do Framework .NET, mais especificamente do CLR.
Isso aumenta a produtividade do programador e evita erros mais graves, os quais normalmente fazem com que o
componente no funcione corretamente.
J apresentamos os principais problemas do modelo atual; no restante deste captulo veremos os demais elementos
que compem o Framework .NET e como cada um destes elementos procura solucionar problemas que os modelos
anteriores no foram capazes de resolver.
Significa que a linguagem capaz de gerar, como resultado da compilao, cdigo MSIL. Uma vez gerado o cdigo
MSIL, o mesmo executado sob o controle do CLR. Ou seja, para o Framework .NET, uma vez gerado o cdigo
MSIL, no importa a partir de qual linguagem o mesmo foi gerado, pois a maneira como o mesmo executado
sempre a mesma.
Podemos criar nossos programas em qualquer uma destas linguagens. Ao compilarmos o programa, o resultado ser
cdigo MSIL, o qual passa a ser executado pelo CLR. Quando a Inprise lanar o Delphi habilitado ao .NET, teremos
29 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
a opo de compilar um programa Delphi para gerar cdigo MSIL. Uma vez gerado o cdigo MSIL, para o CLR no
importa em qual linguagem o programa foi codificado.
Mais adiante, nos captulos 3, 4 e 5 estaremos apresentando uma introduo aos principais elementos da linguagem
C#. Nos captulos restantes do livro, estaremos utilizando a linguagem C# para a criao de pginas ASP.NET.
Foram adicionadas mais caracterstica de orientao a objetos, tais como herana verdadeira, construtores
parametrizados e overriding de mtodos e propriedades.
Mais facilidades para o desenvolvimento de aplicaes Internet. Por exemplo, para criar pginas ASP.NET, ao
invs de VBScript utilizamos diretamente o VB.NET ou o C#.
Herana visual: Esta uma caractersticas que os desenvolvedores do Delphi j tinham h algum tempo. Com
o VB.NET podemos criar um formulrio com as caractersticas bsicas para todos os formulrios da aplicao.
Quando precisarmos de um formulrio com caractersticas adicionais, podemos construir este novo formulrio
baseado, isto , herdando as caractersticas do formulrio bsico; depois s adicionar os elementos necessrios.
Ao criarmos o nosso formulrio, herdando do formulrio bsico, o formulrio que est sendo criado ter,
automaticamente, todos os elementos do formulrio bsico. Alm dos elementos grficos, o cdigo para
tratamento de eventos tambm herdado. O melhor de tudo que, ao alterarmos o formulrio bsico, todas as
alteraes so refletidas nos formulrios herdados. A herana visual facilita, enormemente, a criao de
aplicaes que tenham uma interface consistente e de fcil alterao.
Tratamento estruturado de excees: com o VB.NET, temos muito mais recursos para o tratamento de erros e
excees do que o bom e velho On Error do Visual Basic. Isso faz com que possamos criar programas mais
confiveis.
Falar sobre as novidades do VB.NET assunto para um captulo inteiro. Ensinar o VB.NET: assunto para um livro
inteiro. Em um trabalho futuro estaremos tratando desta nova e excitante verso do VB.
O pessoal da Microsoft realmente conseguiu aliar estas duas caractersticas em uma s linguagem: Poder e Simplicidade.
Conforme veremos nos captulos 3, 4 e 5, o C# de fcil aprendizagem e utilizao, ao mesmo tempo que nos fornece
poderosos mecanismos, antes s encontrados no C++.
www.juliobattisti.com.br 30
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Como no poderia deixar de ser, vamos dar o tradicional exemplo do Hello World !!!, utilizando o C#. Apresentarei o
cdigo e os passos para compilar e rodar o nosso primeiro programa em C#. Nos demais captulos deste livro
aprenderemos mais sobre esta linguagem. Para criar o nosso primeiro programa, utilizaremos o Bloco de Notas do
Windows .
using System;
class primeiroprograma
{
// Meu primeiro programa em C#
// O tradicional Hello World !!
Salve este programa no disco com o nome de primeiroprograma.cs. Agora vamos compilar o programa e execut-lo.
Para compilar o programa, abra um Prompt de Comando (Iniciar -> Programas -> Acessrios -> Prompt de comando).
Na janela do prompt v para a pasta onde voc salvou o arquivo hello.cs e execute o seguinte comando:
csc primeiroprograma.cs
Com este comando estamos compilando o arquivo-fonte primeiroprograma.cs, para gerar um executvel .exe. O resultado
deste comando indicado na Figura 1.8, onde utilizamos o comando dir, para mostrar que a compilao gerou o
executvel primeiroprograma.exe.
Para executar o nosso programa, basta digitar primeiroprograma e pressionar Enter. O programa ser executado,
conforme indicado na Figura 1.9.
Bem, por enquanto isto, fizemos apenas uma pequena apresentao da linguagem C#. Teremos trs captulos deste
livro (3, 4 e 5), para tratar desta linguagem. Apenas um ltimo detalhe para o qual gostaria de chamar a ateno:
Observe, para aqueles que conhecem Java ou C++, a semelhana entre a estrutura de um programa em C# e um
programa em uma destas linguagens.
31 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Dentre outras coisas, o CTS que facilita a integrao entre os programas e servios criados, utilizando-se de diferentes
linguagens do .NET. No modelo antigo, uma das dificuldades de fazer com que um Componente COM+ criado com
o Visual C++ pudesse ser utilizado por um programa escrito em Visual Basic que as linguagens possuam um
diferente conjunto de tipos bsicos. Para que os componentes, escritos em diferentes linguagens, pudessem se comunicar,
www.juliobattisti.com.br 32
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
o programador tinha que mapear os tipos de uma linguagem, para os tipos correspondentes em outra linguagem,
fazendo as converses necessrias. Vejam o quanto este procedimento trabalhoso. Com o CTS do .NET simplesmente
esta preocupao no existe, uma vez que todas as linguagens tm acesso a um conjunto de tipos comum a todas elas.
Fornece uma estrutura que possibilita a integrao entre diferentes linguagens habilitadas ao .NET, com uma
execuo mais rpida, uma vez que a sobrecarga para a converso entre os diferentes tipos de diferentes
linguagens deixa de existir.
Fornece uma estrutura de tipos com base em um modelo orientado a objetos, o que facilita a criao de novas
linguagens habilitadas ao .NET, favorecendo a utilizao de boas prticas de programao, como por exemplo
a herana. Uma vez que os tipos so objetos, podemos criar tipos derivados dos objetos bsicos, os quais
herdam todas as caractersticas dos objetos bsicos.
O CTS define algumas regras que toda linguagem deve seguir, para ser habilitada ao .NET. Por seguirem um
conjunto de regras comum, a interao entre programas escritos em diferentes linguagens fica bem mais fcil.
No Captulo 2, quando detalharemos o CLR, vamos detalhar um pouco mais sobre o CTS.
Metadata
Na seo Questes a considerarmos nos modelos de 3 ou mais camadas utilizados atualmente, descrevemos, como
uma das inconvenincias do modelo de componentes baseados em COM/COM+, o fato de que os mesmos, para
poderem ser utilizados, precisam ser registrados. Ao registrarmos um componente COM/COM+, uma srie de
informaes sobre o mesmo so gravadas na Registry do sistema. Estas informaes so utilizadas pelos programas
que precisam acessar o componente. Se alguma destas informaes estiver errada ou tiver sido alterada, o componente
no poder ser acessado e os programas que utilizam o componente deixaro de funcionar corretamente.
No Framework .NET, para utilizarmos os componentes .NET (.NET Componentes), no necessrio que os mesmos
sejam registrados. O prprio componente .NET possui todas as informaes necessrias ao seu funcionamento, bem
como as informaes necessrias para que outros aplicativos possam utiliz-los. Estas informaes, que fazem parte
do prprio componente .NET ficam gravadas no arquivo que compe componente, na forma de Metadata. Uma
traduo popularmente conhecida para Metadata seria: dados sobre dados. No nosso caso, Metadata seriam as
informaes que o componente .NET possui a respeito de si mesmo, informaes estas que podem ser utilizadas por
outros componentes e servios, para acessar o componente em questo.
Alm de fazer com que no seja necessrio o registro do componente, as informaes de Metadata facilitam a
interoperabilidade entre diferentes componentes, mesmo entre componentes escritos em diferentes linguagens. Estas
informaes so geradas, automaticamente, no momento da compilao do componente e so gravadas no arquivo
.DLL ou .EXE do componente. So muitas as informaes que podem ser inseridas no componente, na forma de
Metadata, tais como:
33 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Quando o componente acessado, o CLR carrega os metadados do componente na memria e faz referncia a estes
metadados, para obter informaes sobre as classes, membros, herana e dependncias do componente.
Mdulos de cdigo auto descritivos: O prprio componente contm toda a informao necessria para interagir
com outros componentes. Desta forma o componente pode ser implementado como um nico arquivo, o qual
contm a sua definio (na forma de metadados) e a sua implementao, o cdigo do componente.
Nunca demais repetir: A utilizao de metadados facilita, enormemente, a interoperabilidade entre
componentes criados usando diferentes linguagens.
Assemblies
Uma aplicao .NET constituda de um conjunto de blocos chamados Assembly. Atravs dos Assemblies que
podemos controlar a distribuio de uma aplicao, fazer o controle de verses, alm de definir as configuraes de
segurana. Um assembly uma coleo de tipos e recursos que foram construdos para trabalharem juntos, formando,
com isso, uma unidade com funcionalidade e escopos bem definidos. Um assembly fornece ao CLR importantes
informaes sobre a implementao de tipos da aplicao. Para o CLR, um tipo somente existe no contexto de um
assembly. De uma maneira mais simples, poderamos dizer que um assembly o mecanismo utilizado pelo .NET, para
empacotar todos os elementos e informaes necessrias ao funcionamento de uma aplicao ou componente.
Vamos simplificar mais ainda: o assembly uma maneira de juntar e organizar os diversos elementos que formam
uma aplicao ou componente.
Os assemblies foram criados para simplificar a distribuio de aplicaes e resolver o problema de verses, existentes
em aplicaes baseadas em componentes. Lembram que no incio deste captulo falamos sobre o termo DLL Hell?.
Com este termo estvamos nos referindo ao problema de um programa, ao ser instalado, substituir uma DLL por uma
verso mais nova ou mais antiga, fazendo com que programas que dependiam da verso anterior da DLL deixassem de
funcionar. Atravs do uso de assemblies e dos metadados contidos em cada componente, possvel que diferentes
verses, do mesmo componente, estejam disponveis, ao mesmo tempo, em um computador. Desta forma, cada programa
utiliza a verso do componente para o qual o programa foi criado. Ao instalarmos uma nova verso do componente, o
qual vem embutido em um assembly, as verses anteriores sero mantidas, se as mesmas estiverem sendo utilizados
por outros programas. Isso faz com que o inferno das DLLs (DLL Hell) seja coisa do passado.
www.juliobattisti.com.br 34
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Para resolver o problema de verses e evitar o inferno das DLLs, o CLR utiliza assemblies da seguinte maneira:
Permite que o desenvolvedor defina regras sobre o uso de diferentes verses entre diferentes componentes .NET.
Fornece a infraestrutura necessria para que as regras de verso definidas pelo desenvolvedor sejam respeitadas.
Fornece a infraestrutura necessria, para que diferentes verses de um mesmo componente de software possam
rodar, simultaneamente. Esta execuo simultnea conhecida como syde-by-syde execution.
Manifesto.
Um conjunto de mdulos.
Windows Forms
Web Forms
Windows Forms
Que o Framework .NET foi todo projetado tendo em vista a Internet nos j sabemos. Porm nem todas as aplicaes
so ou sero desenvolvidas para a Web. A utilizao de Windows Forms (Win Forms ou, se preferirem, Formulrios do
Windows) o mecanismo que nos permite criar as tradicionais aplicaes para Windows.
Win Forms o novo mecanismo para construo de aplicaes Windows, baseadas no Framework .NET.
Um Windows Form bastante semelhante ao conceito de formulrio utilizado pelas verses atuais do VB e do Delphi.
O formulrio o elemento bsico, sobre o qual adicionamos controles e cdigo para determinados eventos associados
com o formulrio e seus controles. O Windows Form tudo isso, porm com a diferena de poder utilizar todos os
mecanismos do Framework .NET. Dentre os principais mecanismos disponveis, destaca-se o mecanismo de herana,
o qual chamado, para o caso dos Win Forms, de herana visual. Anteriormente havamos comentado sobre herana
visual.
35 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Um Win Form, como tudo no Framework .NET, um objeto, o qual obtido a partir da instanciao de uma classe
bsica. Todos os formulrios no Framework .NET so baseados em uma das seguintes classes:
System.Windows.Forms.
So baseadas em um formulrio padro criado pelo usurio, atravs do mecanismo de herana.
Em resumo, o Win Form o elemento bsico de interao com o usurio; em outras palavras, o Win Form o elemento
visual das aplicaes, elemento este com o qual o usurio ir trabalhar.
Na Figura 1.10, temos uma viso geral dos elementos que compem uma aplicao Win32 tpica, construda com o
Framework .NET.
Web Forms
Para aplicaes Win32 a interface com o usurio so os Windows Forms, vistos no item anterior. Para aplicaes Web,
criadas com ASP.NET, as pginas so construdas utilizando-se Web Forms.
Um dos objetivos da utilizao de Web Forms trazer para o desenvolvimento Web as facilidades de arrastar e
soltar, existentes no desenvolvimento de aplicaes tradicionais. Com isso poderemos, com o uso do Visual Studio
.NET, criar pginas Web, simplesmente arrastando componentes sobre um Web Form.
www.juliobattisti.com.br 36
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Com o uso de Web Forms, uma pgina ASP.NET dividida em dois componentes bsicos:
Um modelo (template), o qual contm os elementos visuais e de formatao da pgina, normalmente contedo
baseado em HTML, ou HTML gerado pelo cdigo ASP.NET.
Uma seo de cdigo, a qual responsvel por todo o processamento lgico dos elementos da pgina. Por
exemplo, na seo de cdigo podemos colocar os comandos necessrios para estabelecer uma conexo com um
banco de dados e um comando para retornar os dados que sero utilizados pela pgina. Tambm podemos colocar
comandos que atualizam os dados no banco de dados, de acordo com as informaes digitadas na pgina.
Observe que com estes dois elementos: template e seo de cdigo, temos uma separao entre o cdigo de
processamento e o contedo da pgina propriamente dito. Isso evita a criao de cdigos do tipo macarro, onde
temos sees de cdigo alternadas com sees de HTML, sucessivamente. O cdigo macarro bastante comum
nas verses anteriores do ASP (ASP 2.0 e ASP 3.0).
Com o Framework .NET so disponibilizados uma srie de novos controles para utilizao em pginas ASP.NET.
Estes novos controles apresentam novas caractersticas e propriedades que facilitam a criao de pginas, digamos,
mais inteligentes, onde podemos inserir cdigo em resposta a uma srie de eventos. O melhor disso tudo que o
funcionamento destes controles independente do Navegador utilizado pelo cliente, uma vez que os mesmos so
processados no servidor Web.
A seo de cdigo de um Web Form pode ser criada utilizando qualquer linguagem do Framework .NET, como por
exemplo: VB.NET, C# ou Jscript.NET.
Com a utilizao de Web Forms bem mais simples manter o estado de uma pgina, entre diferentes requisies do
usurio, isso tudo sem a necessidade de implementar a manuteno de estado utilizando os objetos Session e Application.
Alm disso, com o uso de Web Forms podemos construir aplicaes Web com interfaces
NOTA: Veremos mais
bastante sofisticadas e funcionais, de uma maneira fcil atravs da utilizao de
detalhes sobre a criao,
ferramentas de desenvolvimento como o Visual Studio .NET e outras que devero surgir
vantagens e os elementos
para o desenvolvimento para o Framework .NET.
de Web Forms no Captulo
6 Uma Introduo ao Na Figura 1.11, temos uma viso geral dos elementos que compem uma aplicao Web
ASP.NET. tpica, criada com ASP.NET, com a utilizao de Web Forms.
Os Servidores .NET
Alm do Framework .NET, a Microsoft vem disponibilizando novas verses dos servidores da famlia Back Office.
Estas novas verses vm sendo adaptadas para dar suporte ao modelo de desenvolvimento .NET. Por exemplo, os
servidores esto sendo adaptados para o padro XML, que o padro de dados para troca de informaes entre
componentes e servios do Framework .NET. Outra preocupao para esta linha de servidores com a escalabilidade
dos mesmos. Estes servidores foram projetados para atender um grande volume de usurios, alm de terem a capacidade
37 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
de utilizar a tecnologia de Cluster e Balanceamento de Cargas do Windows 2000. Outras diretivas bsicas para estes
servidores so as seguintes:
Interoperabilidade: Ao contrrio do que muitos anunciaram, os Mainframes continuam vivos. Alm disso, o
ambiente de TI das empresas bastante heterogneo, onde convivem diferentes sistemas operacionais e diferentes
fontes e formatos de dados. O Framework .NET e os servidores .NET facilitam a tarefa de integrar dados das
mais variadas fontes, desde o tradicional Mainframe, passando por fontes de dados estruturados como o SQL
Server 2000 ou ORACLE e chegando a fontes no estruturadas, como mensagens de correio eletrnico, arquivos
de vdeo e imagens grficas.
Facilidade de gerenciamento: Dentro da filosofia da Microsoft de construir interfaces
NOTA: Nota: Para de administrao intuitivas e fceis de utilizar. Todos os servidores utilizam interfaces
maiores informaes padronizadas, atravs do uso do MMC Microsoft Management Console e Snap-Ins
sobre MMC e Snap-Ins, especficos para a administrao de cada servidor.
consulte a Unidade IV do
livro: Srie Curso Bsico Neste tpico descreveremos, rapidamente, quais os servidores .NET e qual a funo de
& Rpido: Microsoft cada um no ambiente empresarial. Veremos uma breve descrio dos seguintes servidores:
Windows 2000 Server,
SQL Server 2000
de minha autoria,
Exchange Server 2000
publicado pela editora
Axcel Books BizTalk Server 2000
(www.axcel.com.br). Commerce Server 2000
www.juliobattisti.com.br 38
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Para maiores informaes sobre o SQL Server 2000, consulte as seguintes fontes:
http://www.microsoft.com/sql
Livro: SQL Server 2000 Administrao e Desenvolvimento: Curso Completo, de minha autoria, publicado
pela editora Axcel Books (www.axcel.com.br).
http://www.microsoft.com/exchange
http://www.swynk.com
39 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Firewall
Cache de pginas
Maiores informaes e uma verso de avaliao para download podem ser encontradas no seguinte endereo: http://
www.microsoft.com/isaserver
www.juliobattisti.com.br 40
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
possvel, por exemplo, fazer com que as suas mensagens do Exchange sejam convertidas para o formato em que
possam ser lidas por um celular ou qualquer outro dispositivo habilitado ao WAP.
Maiores informaes e uma verso de avaliao para download podem ser encontradas no seguinte endereo: http://
www.microsoft.com/servers/miserver/default.htm
ADO.NET
Com o ASP 3.0, a tecnologia preferida para o acesso a diferentes fontes de dados a tecnologia ADO Activex Data
Objects, trabalhando em conjunto com OLE-DB, conforme ilustrado na Figura 1.12
Activex Data Objects para o Framework .NET (ADO.NET) um conjunto de classes que expem servios para acesso
a diversas fontes e formatos de dados, para os programadores, utilizando qualquer linguagem habilitada ao .NET.
Cabe ressaltar que ADO.NET no um substituto para o ADO, pois as duas verses de componentes para acesso a
dados podem continuar existindo em um mesmo servidor Web, por exemplo. Ao instalarmos o Framework .NET, o
mesmo instala, alm do suporte a pginas ASP.NET, todo o conjunto de classes do Framework .NET. Porm o acesso
a pginas ASP tradicionais continua disponvel, o que significa que, mesmo aps instalar o Framework .NET, todas as
aplicaes criadas com ASP 3.0 ou verses anteriores do ASP continuaro funcionando sem problemas, at que voc
possa migr-las para ASP.NET. Ento em um mesmo servidor Web podemos ter uma pgina ASP, que acessa dados de
41 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
um arquivo .mdb do Access utilizando ADO, convivendo com um aplicativo criado com ASP.NET, o qual acessa
informaes de uma caixa de correio do Exchange, utilizando ADO.NET.
ADO.NET foi projetado pensando nos desafios de criar programas baseados no modelo de 3 camadas, para a Internet,
os quais precisam acessar dados de diferentes fontes. Alm disso, as aplicaes Internet atuais esto bem mais
sofisticadas, onde necessrio manter o conceito de estado, o que difcil em um mundo como o da Internet, conhecido
como Connection Less. Na Internet o usurio faz a conexo com o servidor, requisita a pgina, recebe o resultado e
desfaz a conexo. Para manter o estado entre uma conexo e outra, no ASP 3.0, utilizvamos os objetos Session e
Application. Conforme veremos nos exemplos prticos, a partir do Captulo 6, manter o estado ficou muito mais
simples com ASP.NET e ADO.NET.
Outro fator importante a ser considerado que, cada vez mais, as aplicaes esto utilizando dados no padro XML.
ADO.NET fornece meios de utilizar dados no padro XML.
Conforme veremos, os objetos e mtodos de ADO.NET so bastante diferentes dos utilizados com ADO. Um dos
primeiros objetos de que sentiremos falta o tradicional Recordset. Na Figura 1.13 temos uma viso geral da
arquitetura do ADO.NET.
Ao longo deste livro, principalmente nos Captulos 10 e 11, estaremos utilizando ADO.NET em diversos exemplos de
conexo de pginas ASP.NET com fontes diversas de dados.
www.juliobattisti.com.br 42
CAPTULO 1: ENTENDENDO A NOVA PROPOSTA DA MICROSOFT O FRAMEWORK .NET
Concluso
Neste captulo apresentamos o .NET ao amigo leitor.
Iniciamos o captulo apresentando uma viso geral e uma definio genrica para a iniciativa .NET da Microsoft.
Tratamos de conceitos como Web Services, CLR Common Language Runtime e .NET Framework Class Library.
Vimos que o .NET a viso da Microsoft em um mundo onde o Software passa a ser desenvolvido e comercializado
na forma de servios. Os programas so construdos a partir de unidades menores, os assemblies. Dentro de um
assembly tenho todos os elementos que garantem uma funcionalidade especfica, para a qual o assembly foi projetado.
Dentro deste contexto podemos concluir que, mais do que uma atualizao tecnolgica, o .NET uma mudana de
Paradigma.
Destacamos os dois principais componentes do Framework .NET. Em primeiro lugar uma ambiente de execuo
comum a todas as linguagens habilitadas ao .NET CLR Common Language Runtime. Qualquer linguagem habilitada
ao .NET, ao ser compilada, gera cdigo MSIL Microsoft Intermediate Language, sendo que o cdigo MSIL que
executado pelo CLR.
Alm disso, fornecida uma biblioteca de classes que pode ser utilizada por qualquer linguagem habilitada ao .NET
.NET uma mudana de Paradigma. Ao colocar a disposio do programador um conjunto de classes padronizadas,
o Framework .NET est incentivando boas prticas de programao, como a herana e a conseqente reutilizao de
cdigo.
Em seguida apresentamos os problemas com o modelo de desenvolvimento atual, baseado em componentes que
seguem o padro COM/COM+. Vimos que, para que um componente possa ser utilizado, o mesmo precisa ser registrado
e que diferentes verses de um mesmo componente no podem coexistir em um mesmo computador, o que pode fazer
com que, ao instalarmos um programa, o mesmo substitua a verso atual do componente por uma verso diferente, a
qual no pode ser utilizada por outros programas que dependem da verso anteriormente instalada. Isto faz com que o
programa que depende da verso substituda deixe de funcionar. Esta situao tambm conhecida como DLL Hell.
Tambm fizemos uma reviso rpida dos modelos de desenvolvimento em 2, 3 ou n camadas. Apresentamos as
deficincias e vantagens de cada modelo.
Em seguida voltamos aos componentes do Framework .NET apresentando, em primeiro lugar, as linguagens que
fazem parte do Framework .NET, com destaque para a facilidade em fazer com que programas escritos em diferentes
linguagens possam se comunicar e trocar informaes. Fizemos uma descrio breve do VB.NET e da nova linguagem
C#. Neste livro estaremos utilizando o C# para a criao das pginas ASP.NET de exemplo.
Continuando nossa jornada pela Framework .NET apresentamos o CTS Common Type System. Vimos a importncia
de todas as linguagens utilizarem um conjunto padronizado de dados, principalmente para garantir a interoperabilidade
entre programas criados em diferentes linguagens.
Tambm tratamos do conceito de metadados (Metadata), o qual faz com que cada componente contenha todas as
informaes necessrias ao seu funcionamento, o que evita que o mesmo tenha que ser registrado, como acontecia
43 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
com os componentes COM/COM+. Alm disso os metadados que possibilitam que diferentes verses de um
componente coexistam em um computador, podendo inclusive as diferentes verses serem executadas simultaneamente.
Vimos que a unidade bsica de empacotamento chamada de assembly. Um assembly contm todos os elementos
necessrios ao funcionamento de um componente. Falaremos mais sobre assemblies no prximo captulo.
Seguindo, passamos a tratar das interfaces com o usurio, onde vimos os conceitos de
IMPORTANTE: Para a Windows Forms e Web Forms, onde foram apresentados diagramas ilustrativos da
documentao sempre utilizao destes elementos. Voltaremos ao assunto Web Forms nos demais captulos
atualizada sobre o .NET, deste livro.
no deixe de consultar o
endereo: http:// Tambm no poderamos deixar de fora uma breve apresentao dos servidores .NET.
msdn.microsoft.com/net. Uma linha de servidores da Microsoft, para facilitar o desenvolvimento de aplicaes
.NET, os quais fornecem uma srie de funcionalidades, desde um servidor de Banco de
NOTA: Devido natureza Dados Relacionais (SQL Server 2000), at um servidor para garantir a segurana na
dinmica da Internet, Internet Internet Security and Acceleration Server 2000.
alguns dos links
apresentados podem ter Para encerrar fizemos uma breve apresentao do ADO.NET. Voltaremos a tratar de
sido alterados e, ADO.NET, principalmente nos captulos que tratam de conexo de pginas ASP.NET
portanto, deixado de com Bancos de dados e outras fontes de dados.
funcionar.
www.juliobattisti.com.br 44
CAPTULO 2: ENTENDENDO O CLR
Introduo CAPTULO
Antes de iniciarmos o nosso aprendizado de C# (Captulos 3, 4 e 5) e de ASP.NET
(demais captulos deste livro), vamos apresentar mais alguns detalhes sobre o
2
CLR Common Language Runtime. O CLR, conforme descrevemos no Captulo
1, o componente principal do Framework .NET.
Na parte final do captulo faremos uma reviso dos conceitos bsicos de orientao
a objetos. Uma vez que o Framework .NET fortemente baseado em conceitos de
orientao a objetos, tambm a linguagem C# que utilizaremos neste livro para a
criao de pginas ASP.NET baseada nos conceitos de orientao a objetos;
bastante oportuno que revisemos os seguintes conceitos:
O que um objeto?
Mtodos e propriedades
O que so Classes?
Herana
45 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Todo o Framework .NET foi criado com base nos conceitos de Orientao a Objetos. A linguagem C# totalmente
orientada a objetos, onde tudo so classes. Claro que alguns puristas poderiam dizer que o C# no completamente
orientado a objetos porque no suporta herana mltipla. Na verdade veremos que o C# foi projetado para conciliar
os benefcios da orientao a objetos e ao mesmo tempo ser simples e prtico. Para isso foram eliminadas algumas
caractersticas da orientao a objetos, caractersticas estas que mais causavam problemas do que propriamente
forneciam solues.
O CLR o ambiente de execuo do Framework .NET. O CLR gerencia a execuo de qualquer aplicativo .NET, alm
de fornecer uma srie de servios que facilitam e agilizam o desenvolvimento de aplicaes. Conforme discutido no
Captulo 1, o maior benefcio do CLR que o mesmo fornece uma srie de servios e funcionalidades que nos
modelos de desenvolvimento anteriores ao .NET tinham que ser codificados na prpria aplicao. Ao fornecer este
conjunto de servios e funcionalidades, estamos evitando que o programador tenha que se preocupar como a maneira
com a aplicao vai ser executada, com a alocao de memria, com liberao de memria e tantos outros aspectos
que dificultavam o desenvolvimento de aplicaes. Com o suporte fornecido pelo CLR, o programador somente
precisa se preocupar com a lgica da sua aplicao e no com a infraestrutura necessria para a mesma funcionar.
O Cdigo que executado sob o controle do CLR chamado de Managed Code; vamos arriscar uma traduo:
Cdigo Gerenciado. Este gerenciado significa: Sob o controle do CLR. Em contrapartida cdigo que no for executado
sob o controle do CLR, no caso de programas no .NET, chamado de non Managed Code, que traduziremos por
Cdigo no gerenciado.
Os programas criados com linguagens habilitadas ao .NET e, portanto, executados sob o comando do CLR, podem se
beneficiar das seguintes vantagens:
www.juliobattisti.com.br 46
CAPTULO 2: ENTENDENDO O CLR
Ao criarmos um programa, utilizando uma linguagem habilitada ao .NET, como por exemplo o VB.NET ou o C#, o
cdigo-fonte do programa, ao ser compilado, gera cdigo MSIL Microsoft Intermediate Language. Senhores! Com
calma. Ainda no hora de comear a malhar o .NET. O CLR, que ser responsvel pela execuo e controle do cdigo
MSIL gerado, COMPILA o cdigo MSIL para cdigo nativo. Com isso, o cdigo que executado pelo CLR cdigo
nativo da plataforma onde est instalado o Framework .NET. At o momento, a nica plataforma compatvel a dobradinha
Windows/Intel. Porm a Microsoft est tornando disponvel, publicamente, as especificaes para CLR e MSIL, o que
possibilita que outras empresas desenvolvam um Framework .NET para outras plataformas, como, por exemplo, o UNIX.
Nos veremos mais adiante, que mesmo uma pgina ASP.NET compilada no servidor Web, antes de ser enviada para
o Navegador do cliente. Em resumo, todo e qualquer cdigo executado pelo CLR, cdigo compilado nativo. Agora
sim. Fiquem vontade para discutir, dizer que no bem assim, que esse tal de MSIL no tem nada a ver, mais um
chope e assim por diante.
O CLR automaticamente gerencia a alocao de objetos na memria, bem como as referncias aos objetos. Quando no
houver mais nenhuma referncia ao objeto, o que significa que o mesmo no est mais sendo utilizado, o CLR
automaticamente remove o objeto, liberando mais memria para o sistema. Com isso, os tradicionais problemas de
memory leaks programas que alocam recursos de memria e no liberam, fazendo com que a quantidade de memria
disponvel fique reduzida, at o ponto de fazer com que o prprio sistema operacional fique instvel e a mquina tenha
que ser reinicializada deixam de existir. Vejam o quanto fica simplificada a tarefa de desenvolvimento, uma vez que o
programador no precisa preocupar-se com alocao e liberao de memria, apenas com a lgica do seu programa.
47 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Podemos criar uma classe Clientes Especiais, em C#, herdada da classe Clientes. Com
isso, a nossa classe Clientes Especiais ir herdar todas as propriedades e mtodos da
NOTA: No final do
classe Clientes.
captulo apresentaremos
os principais conceitos de
Essa integrao entre diferentes linguagens possvel, pois todas as linguagens habilitadas orientao a objetos,
ao .NET tm acesso a um sistema de tipos comuns CTS Common Type System. como por exemplo:
Falaremos um pouco mais sobre o CTS mais adiante, neste captulo. Alm disso cada classes e herana.
componente ou aplicativo possui informaes, na forma de metadados, sobre a sua
estrutura, sobre os mtodos e propriedades que o mesmo possui e que podem ser acessados por outros componentes.
Os passos para a criao e execuo de uma aplicao .NET podem ser resumidos da seguinte maneira:
Cria a aplicao ou componente utilizando uma linguagem habilitada ao .NET (VB.NET, C#, etc).
Compila o cdigo da sua aplicao ou componente para gerar cdigo MSIL. O compilador da linguagem que
voc est utilizando compila o seu cdigo-fonte para MSIL e acrescenta os meta dados necessrios.
Em tempo de execuo, um compilador JIT (Just In Time) do CLR transforma o cdigo MSIL em cdigo
nativo, COMPILADO.
O cdigo nativo executado, utilizando toda a infraestrutura disponibilizada pelo CLR.
Conforme ilustrado na Figura 2.1, quando compilamos o cdigo-fonte criado por uma linguagem habilitada ao .NET,
estamos gerando MSIL, a qual um conjunto de instrues, independente da CPU, conjunto este que pode ser convertido
(pelo JIT) para cdigo nativo. O cdigo MSIL inclui instrues para carregar, armazenar, inicializar e chamar mtodos,
instrues para operaes aritmticas e lgicas, controle de fluxo do programa, acesso direto a memria, tratamento
de excees e demais operaes necessrias execuo do programa.
Antes que o cdigo MSIL possa ser executado, o mesmo precisa ser convertido para cdigo especfico da CPU em
questo. Isto feito pelo JIT Just in time compiler. O CLR disponibiliza compiladores JIT para cada arquitetura
suportada pelo CLR; desta maneira o mesmo conjunto de instrues MSIL pode ser compilado e executado em
qualquer arquitetura para a qual exista um compilador JIT.
Esta a estratgia da Microsoft para fazer com que o cdigo MSIL de aplicaes .NET possa ser executado em
diferentes plataformas, desde servidores Windows ou no Windows, at dispositivos mveis para os quais esteja
disponvel um compilador JIT. claro que a implementao em outras plataformas que no o Windows, como por
exemplo o UNIX, depender da implementao de terceiros. Por exemplo, a HP pode querer implementar um compilador
www.juliobattisti.com.br 48
CAPTULO 2: ENTENDENDO O CLR
JIT que rode no HP-UX, fazendo com que aplicaes .NET possam rodar nesta plataforma. Se surgiro implementaes
para outras plataformas uma questo que somente o tempo e o mercado diro.
Quando o compilador de uma linguagem habilitada ao .NET produz o cdigo MSIL, o mesmo tambm cria os metadados
necessrios. O cdigo MSIL e os metadados esto contidos em um arquivo PE portable executable. O portable
significa que este arquivo pode, em tese, ser compilado e executado em qualquer plataforma para a qual existe um
compilador JIT. A presena dos metadados, juntamente com o cdigo MSIL, torna o cdigo autodescritivo, o que
significa que no temos mais a necessidade de bibliotecas de tipo (type libraries) ou IDL Interface Definition
Language, dispositivos que eram necessrios ao funcionamento de componentes baseados no modelo COM/COM+.
Voltamos a salientar este ponto, o componente criado para o .NET possui, na forma de metadados, toda a informao
necessria ao seu funcionamento e necessria para que possa ser acessado por outros componentes. O CLR localiza e
extrai os metadados do arquivo PE durante a execuo, medida que isso vai sendo necessrio.
O JIT detecta se algum mtodo ou propriedade no ser utilizado durante a execuo do programa. Ao invs de
converter todo o cdigo MSIL, contido no arquivo PE, o JIT converte apenas o cdigo que realmente ser necessrio
49 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
para a execuo do programa. Isso faz com que a compilao seja mais rpida, com que sejam poupados recursos
como por exemplo memria, e o cdigo resultante seja otimizado, tanto em termos de tamanho quanto de velocidade
de execuo.
Como parte da compilao do MSIL para cdigo nativo, o cdigo deve passar por um processo de verificao, a no
ser que tenha sido definida uma poltica de segurana que permite ao cdigo passar pela verificao. O processo de
verificao faz uma anlise do cdigo MSIL e dos metadados, para definir se o cdigo pode ser definido como type
safe. Para que o cdigo possa ser definido como type safe, o mesmo somente deve acessar regies de memria para
as quais o mesmo tem autorizao. Este processo necessrio para garantir que os objetos estejam isolados uns dos
outros, de tal maneira que um objeto no tente alterar ou corromper dados de outros objetos. Na plataforma Windows
9x, quando um programa tenta acessar a rea de memria utilizada por outro programa, gerada uma Falha Geral de
Proteo, com a famigerada mensagem Voc Executou uma Operao Ilegal e o seu programa ser fechado.
Para que o cdigo passe no teste de type safe, o mesmo deve atender as seguintes condies:
Todas as referncias feitas a um determinado tipo so compatveis com o tipo que est sendo referenciado.
Somente operaes devidamente definidas so invocadas pelo objeto.
possvel verificar e confirmar a identidade do objeto. Isso evita que um componente, por exemplo um vrus,
se faa passar por um componente vlido, porm com um comportamento bem diferente do verdadeiro
componente.
O processo de verificao tambm faz uma anlise do cdigo MSIL, para ver se o mesmo
NOTA: O mecanismo de
foi corretamente gerado. Se as polticas de segurana da nossa aplicao definem que o
verificao do cdigo
cdigo deve passar na verificao de type safe e o cdigo no passar nesta verificao,
um exemplo tpico de
uma exceo ser gerada quando o cdigo for executado.
funcionalidade
Um detalhe importante que nem todo o cdigo MSIL compilado para cdigo nativo,
disponibilizada pelo
de uma s vez. A compilao acontece em nvel de mtodo. Quando um mtodo
Framework .NET, a qual,
chamado, o cdigo MSIL do mesmo compilado, o cdigo nativo gerado pelo JIT e o
nos modelos anteriores,
mtodo executado. O cdigo nativo gerado mantido. Quando o mtodo for chamado
precisava ser
pela segunda vez, o cdigo nativo gerado na primeira chamada ser executado, evitando,
desenvolvida pelo
com isso, que o cdigo do mtodo tenha que ser compilado a cada chamada do mesmo,
programador.
o que acarretaria uma perda considervel de desempenho.
Assemblies
Conforme descrito no Captulo 1, chegou o momento de apresentarmos mais alguns detalhes sobre Assemblies e
sobre o formato (ou quem sabe anatomia) de uma aplicao .NET.
www.juliobattisti.com.br 50
CAPTULO 2: ENTENDENDO O CLR
Para o Framework .NET, os diversos componentes de uma aplicao so empacotados atravs da utilizao de
assemblies. Um assembly contm todo o cdigo MSIL gerado pelo compilador, os metadados e os demais arquivos
necessrios ao funcionamento da aplicao. Cada assembly tambm contm um manifesto. O manifesto contm as
seguintes informaes:
Um assembly contm toda a informao necessria ao seu funcionamento. Ao definirmos um assembly, o mesmo
pode estar contido em um nico arquivo ou em mltiplos arquivos. A vantagem de utilizar mltiplos arquivos que as
diferentes partes do assembly podem ser carregadas e executadas medida que as mesmas forem sendo utilizadas.
Funes do Assembly
Pela descrio anterior podemos concluir que o assembly um elemento fundamental na criao de aplicaes .NET.
Os assemblies foram projetados, principalmente, para simplificar o processo de distribuio de aplicaes e para
solucionar o problema do controle de verses existente no modelo COM/COM+. Um assembly responsvel pelas
seguintes funes:
Contm o cdigo executado pelo CLR. O cdigo MSIL contido em um arquivo PE (portable executable) no
poder ser executado se o mesmo no estiver associado a um manifesto.
a unidade bsica para atribuio de permisses e configuraes de segurana. Podemos definir, em nvel de
assembly, quem pode acessar o assembly e com que nvel de acesso.
uma unidade de referncia, pois as informaes contidas no manifesto do assembly so utilizadas para
resolver tipos e para atender requisies de outros assemblies. Estas informaes definem quais os mtodos e
propriedades que so visveis externamente. O manifesto tambm contm informaes a respeito de quais
assemblies o assembly em questo depende.
uma unidade para definio de verso. A atribuio de um nmero de verso feita em nvel de assembly.
51 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
uma unidade de distribuio das aplicaes .NET. Quando uma aplicao inicializada, somente o assembly
chamado na inicializao da aplicao precisa estar disponvel. Outros assemblies somente so chamados
medida que forem sendo utilizados. Essa uma caracterstica muito importante, principalmente para aplicaes
Web, onde a velocidade das conexes sempre um fator muito importante a ser considerado.
Assemblies podem ser estticos ou dinmicos. Assemblies estticos podem incluir tipos do Framework .NET (inter-
faces e classes), alm dos recursos utilizados pelo assembly (bitmaps, .jpg files, arquivos de som ou imagem, etc.).
Assemblies estticos so gravados em disco em arquivos PE. Na verdade um arquivo PE pode ser gravado na forma de
um EXE ou uma DLL.
Assemblies dinmicos rodam diretamente da memria e no so salvos no disco antes de serem executados. Aps a
execuo, podemos salvar assemblies dinmicos em disco.
Componentes do Assembly
Um assembly esttico formado pelos seguintes componentes:
Podemos agrupar todos os elementos constituintes do assembly em um nico arquivo, conforme ilustrado na
Figura 2.2.
www.juliobattisti.com.br 52
CAPTULO 2: ENTENDENDO O CLR
Os componentes do assembly tambm podem estar divididos em diversos arquivos. Estes arquivos podem conter
mdulos de cdigo compilado, recursos (como por exemplo arquivos grficos ou de vdeo) ou qualquer outro arquivo
necessrio ao funcionamento da aplicao .NET.
Existem duas razes para a colocao dos componentes de um assembly em mltiplos arquivos:
Quando precisamos combinar, na mesma aplicao, componentes ou mdulos criados em diferentes linguagens.
Para otimizar o download dos componentes de uma aplicao, de tal maneira que os componentes ou mdulos
menos utilizados somente sejam carregados quando forem necessrios. Esta uma alternativa importante,
principalmente para aplicaes Web.
53 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O manifesto pode estar contido em um arquivo PE Portable executable (pode ser um .exe ou uma .dll), juntamente
com o cdigo MSIL ou pode estar em um arquivo PE separado, o qual contm somente o manifesto. Esta ltima
situao acontece quando temos um assembly formado de diversos arquivos.
Em resumo, reforando o que j foi comentado no Captulo 1, este conjunto de informaes fornece uma autonomia
ao assembly, de tal maneira que o mesmo contm toda a informao necessria ao seu funcionamento. Isso evita que
o assembly tenha que ser registrado. Com estes recursos, o processo de instalar uma aplicao .NET est resumido a
copiar os arquivos necessrios. Como diriam os ainda apaixonados pelo DOS, voltamos ao estilo xcopy de instalao,
em referncia ao comando xcopy, o qual utilizado para copiar arquivos ou pastas.
Uma das maiores dificuldades, no modelo COM/COM+, em fazer com que componentes escritos em diferentes
linguagens pudessem interagir o fato de que cada linguagem possui o seu prprio conjunto de tipos, o qual no
compatvel com o conjunto de tipos das demais linguagens. Colocando de uma maneira mais simples: o tamanho,
forma de armazenamento e demais caractersticas de cada tipo dependente da linguagem, no modelo COM/COM+.
Fornecer uma estrutura de dados e tipos padronizados, estrutura esta que torna a integrao entre diferentes
linguagens uma realidade, alm de garantir uma execuo mais rpida, uma vez que as converses de tipo
passam a ser coisa do passado.
Fornece um modelo orientado a objetos, o qual capaz de suportar qualquer linguagem habilitada ao .NET.
www.juliobattisti.com.br 54
CAPTULO 2: ENTENDENDO O CLR
Define algumas regras e padres que as linguagens habilitadas ao .NET devem obedecer, o que ajuda a garantir
que objetos escritos em diferentes linguagens sero capazes de interagir e trocar mensagens.
Value types: Toda linguagem de programao fornece um conjunto de tipos bsicos de dados, como por
exemplo: inteiros, caracteres, nmeros reais, strings, etc. Estes tipos bsicos so passados por valores. Em
outras palavras, se tenho uma varivel x cujo valor 5, utilizo o seguinte comando:
y=x
neste caso estou passando o valor contido na varivel x, para a varivel y. Alteraes feitas na varivel y no afetaro
o valor da varivel x. No Framework .NET estes tipos bsicos, passados por valor, so chamados de value types.
Estes tipos bsicos fazem parte do conjunto de classes disponibilizado pelo Framework .NET. Por exemplo, um inteiro
acessado como System.Int32 e um valor boleano como System.Boolean. Estes tipos disponibilizados na prpria
biblioteca de classes do Framework .NET so chamados de built-in value types.
Para fornecer uma maior flexibilidade, o Framework .NET tambm permite que sejam criados os chamados User-
defined value types. Com isso o programador pode definir tipos personalizados, os quais so derivados da classe
bsica System.ValueType. Com isso podemos criar tipos especficos, de acordo com as necessidades de cada aplicao.
Por exemplo, para aplicaes de engenharia, podemos criar um tipo para representar nmeros complexos ou matrizes
com caractersticas definidas.
Reference types: Este tipo contm uma referncia para a localizao do valor do
tipo. Em outras palavras, contm o endereo de memria onde est armazenado o NOTA: Nos Captulos 3, 4
valor. Vamos imaginar que x seja uma varivel do tipo reference type. Agora vamos e 5 apresentaremos alguns
fazer uma outra varivel y, tambm do tipo reference type, como sendo igual a x: exemplos que ilustram a
y=x diferena entre value types
Neste caso, o endereo onde est armazenado o valor de x foi atribudo varivel e reference types.
x. Se alterarmos o valor de x, o que acontece com y? Como y contm o endereo
da varivel x, ao alterarmos x, y passar a enxergar o valor modificado. Por
exemplo, se utilizarmos o comando Console.Writeline(y), ser exibido o novo
valor da varivel x.
55 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Configuraes de segurana.
Desenvolvimento de componentes e Web services.
Manipulao de objetos grficos.
Leitura e escrita em disco.
Servio de Sockets, com a possibilidade do envio e recebimento de dados utilizando uma grande variedade de
protocolos de rede.
Criao de aplicaes Web, com servios de fila de mensagens, correio eletrnico, etc.
Manipulao de dados e esquemas XML.
Criar aplicaes Win32 tradicionais atravs do uso de Win Forms.
Criar aplicaes ASP.NET utilizando Web Forms.
Acessar as informaes contidas nos assemblies, na forma de metadados.
As funcionalidades oferecidas pela biblioteca de classes do Framework .NET facilitam a criao de programas, uma
vez que muitas funes j esto prontas para serem utilizadas, evitando que as mesmas tenham que ser implementadas
em cada programa. A utilizao de classes comuns a todas as linguagens do Framework .NET tambm facilita a
interoperabilidade entre diferentes linguagens.
Podemos utilizar as classes diretamente em nossos programas ou podemos criar classes que herdam os mtodos e propriedades
de uma determinada classe e adicionar as modificaes necessrias. Vejam que aqui estamos utilizando o conceito de herana.
Como so milhares de classes, cada uma com seus mtodos e propriedades, o Framework .NET precisa organizar estas
classes de uma maneira a evitar conflito de nomes. A maneira encontrada pelo Framework .NET atravs da utilizao
de um espao de nomes (namespace). Um espao de nomes simplesmente um agrupamento lgico das classes,
estruturas e interfaces relacionadas. A maioria das classes est contida no espao de nomes System. Diretamente
ligado a system temos a definio de tipos bsicos como por exemplo: Int32, String, etc. Um exemplo de classe de
segundo nvel, dentro do espao de nomes System, a classe System.Data, a qual fornece uma srie de mtodos para
acesso s mais variadas fontes de dados. Temos tambm uma classe de segundo nvel chamada System.Security, a qual
fornece servios para configuraes da segurana de acesso s aplicaes .NET. E assim vamos formando uma imensa
hierarquia de classes. As classes de segundo nvel, como System.Data e System.Security, herdam todos os mtodos e
propriedades da classe me System. Este um dos princpios da orientao a objetos: Herana. No prximo item
falaremos mais sobre a herana e os demais fundamentos da orientao a objetos.
Na Figura 2.4, temos uma representao parcial do espao de nomes System, no qual representamos apenas alguns
tipos bsicos, ligados diretamente a System e s classes derivadas System.Data e System.Security.
Podemos continuar nos aprofundando na hierarquia de classes. Por exemplo, existem classes derivadas de System.Data.
A classe System.Data.SqlClient contm toda a funcionalidade necessria para acessar dados de um servidor SQL
Server 2000. J a classe System.Data.OleDb fornece funcionalidades para conexo com qualquer fonte de dados, para
a qual esteja disponvel um OLE-DB Provider. Se acrescentssemos mais estas duas classes, o espao de nomes
System ficaria conforme indicado na Figura 2.5.
Vejam que a hierarquia de classes vai crescendo. No decorrer deste livro estaremos utilizando diversas classes do
.NET Framework Class Library.
www.juliobattisti.com.br 56
CAPTULO 2: ENTENDENDO O CLR
Vamos fazer uma breve descrio das principais classes do .NET Framework Class Library.
NOTA: Para uma descrio completa, de todas as classes do Framework .NET, consulte o item .NET Framework Class Library, dentro do
tpico .NET Framework Reference, na documentao do Framework .NET, conforme indicado na Figura 2.6. Lembrando que, uma vez
instalado o Framework .NET, voc pode acessar a documentao do produto utilizando o comando: Iniciar -> Programas -> Microsoft .NET
Framework SDK -> Documentation.
57 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Microsoft.VisualBasic: Contm o Run Time para o VB.NET e fornece o suporte a linguagem no Framework .NET.
Microsoft.Win32: Fornece dois tipos de classes: um que trata dos eventos gerados pelo sistema operacional e
outro que fornece funes para acessar e gravar informaes na registry do Sistema Operacional.
System: a classe principal para todo o espao de nomes System. Contm todas as caractersticas comuns a
todas as classes, uma vez que as classes derivadas de System herdam suas caractersticas. Tambm contm os
tipos bsicos, como por exemplo inteiros de 16, 32 ou 64 bits, String, byte, etc.
System.Collections: Contm as interfaces e classes que definem vrias colees de objetos, como por exemplo
listas, filas, arrays e dicionrios.
System.Data: Contm a maioria das classes que compem a arquitetura do ADO.NET. Com ADO.NET, podemos
construir componentes capazes de gerenciar, de uma maneira eficiente, dados de mltiplas fontes. Em um
ambiente desconectado (connection less) como a Internet, ADO.NET disponibiliza uma srie de ferramentas
para requisitar, alterar e sincronizar dados em uma arquitetura de mltiplas camadas. O principal elemento do
ADO.NET uma classe chamada DataSet, a qual estudaremos em detalhes nos captulos sobre ASP.NET.
System.Data.Common: Contm as classes que so compartilhadas por todos os .NET data providers (provedores
de dados para o .NET). Um .NET data provider uma coleo de classes que fornece acesso a uma determinada
fonte de dados, como por exemplo dados em um Mainframe ou em um servidor SQL Server 2000.
System.Data.OleDb: Contm as classes que fornecem acesso a qualquer fonte de dados para a qual exista um
OLE-DB Provider disponvel.
System.Data.SqlClient: Contm um conjunto de classes que fornece um acesso otimizado ao SQL Server
2000. Utiliza o driver nativo para o SQL Server 2000, ao invs de um OLE-DB Provider ou uma fonte ODBC.
Por isso o acesso mais rpido.
www.juliobattisti.com.br 58
CAPTULO 2: ENTENDENDO O CLR
System.Diagnostics: Um conjunto de classes com que permite que seja feita a depurao e acompanhamento
da execuo do cdigo das aplicaes .NET. Tambm fornece classes para leitura e escrita no log de eventos,
para inicializar servios do Sistema Operacional, para monitorar a performance do sistema atravs da utilizao
de contadores de desempenho.
System.DirectoryServices: Um conjunto de classes que fornece, para as aplicaes .NET, acesso ao Active
Directory do Windows 2000. As classes de System.DirectoryServices podem ser utilizadas com qualquer
Active Directory Service Provider disponvel. Atualmente esto disponveis os seguintes:
1. IIS Internet Information Server
2. LDAP Lightweight Directory Access Protocol
3. NDS Novel Directory Services
4. WinNT Para acesso ao diretrio do Windows NT 4.0.
59 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Apresentamos apenas uma descrio bsica dos principais namespaces do Framework .NET. Livros inteiros podem
ser escritos sobre um nico namespace como por exemplo System.Net ou System.Security. A melhor fonte de consulta
para as classes, mtodos e propriedades de um namespace a prpria documentao do Framework .NET. No decorrer
deste livro estaremos utilizando algumas classes em nossas pginas ASP.NET. Uma das classes que mais utilizaremos
System.Data e suas classes derivadas como System.SqlCliente e System.OleDb.
Agora vamos fazer uma reviso dos principais conceitos de Orientao a Objetos. importante a reviso destes
conceitos uma vez que a linguagem C# (assunto para os captulos 3, 4 e 5) e todo o Framework .NET so baseados nos
conceitos de Orientao a Objetos.
Produtividade.
Incentivo a boas prticas de programao.
Uma modelagem mais prxima do entendimento do usurio final.
Reutilizao de cdigo.
Facilidade de manuteno do cdigo.
Embora a proposta de orientao a objetos seja bastante consistente, a mesma no teve o nvel de implementao
esperado. No cabe aqui discutir os motivos que fizeram com que a velocidade de adoo ficasse abaixo da esperada.
Este fato ainda mais interessante uma vez que a grande maioria das empresas admite que a orientao a objetos
oferece uma srie de vantagens em relao ao modelo de programao estruturada. Porm a mudana para um novo
modelo envolve uma nova maneira de pensar, uma necessidade de treinamento e, principalmente, uma mudana
cultural. Esta ltima sem sombra de dvidas a mudana mais difcil.
O que um objeto?
Mensagens.
Classes.
Herana.
Instncias.
Reutilizao de cdigo.
www.juliobattisti.com.br 60
CAPTULO 2: ENTENDENDO O CLR
O que um Objeto?
Na programao estruturada, ns temos uma separao entre procedimentos e os dados sobre os quais os mesmos
atuam. Um procedimento pode ser uma funo que retorna um valor ou uma procedure que realiza uma srie de
operaes, podendo ou no retornar um valor. Porm este modelo apresenta srias dificuldades do ponto de vista do
usurio. Ao fazer a anlise e projeto de um programa, o analista precisa traduzir as necessidades dos usurios em
termos de procedimentos, funes, mdulos, etc. Existe uma diferena muito grande entre a linguagem dos usurios
e a linguagem dos analistas/programadores.
Um objeto uma entidade que contm, alm dos dados, todas as funes que atuam sobre estes dados. Ou seja, um
objeto composto dos dados que descrevem o objeto (propriedades) e das operaes que podem ser realizadas sobre
estes dados (mtodos). Esta abordagem j um pouco mais prxima da abordagem entendida pelos usurios finais do
sistema. Vamos imaginar um sistema para o departamento de recursos humanos. Os usurios falam em termos de
empregados, cargos, etc. Poderamos ter um objeto chamado Funcionrio. Este objeto poderia conter diversas
propriedades, tais como:
Matrcula.
Nome.
Endereo.
Fone.
Data de Admisso.
Data de Aniversrio.
Nome do Pai.
Nome da Me.
Nmero da Identidade.
Nmero do CPF.
Cargo.
Salrio.
Com isso podemos observar que as propriedades descrevem as caractersticas de um determinado objeto. O conjunto
de valores contidos nas propriedades de um determinado objeto define o seu estado atual.
Alm das propriedades o objeto pode conter mtodos. Os mtodos descrevem aes que podem ser realizadas pelo
objeto ou no objeto. Por exemplo, o nosso objeto funcionrio poderia ter um mtodo chamado pagamento, outro
chamado transferncia, mais um chamado promoo e assim por diante. Um mtodo, na prtica, uma funo ou
procedimento que realiza uma srie de aes. Os mtodos de um objeto podem receber parmetros e ter o seu
comportamento alterado, dependendo do valor dos parmetros. Por exemplo, o mtodo Promoo de um objeto
funcionrio pode receber, como parmetros, a Matrcula do funcionrio, a data da promoo e o cdigo do novo cargo.
Dentro do mtodo Promoo pode ser chamado um mtodo AtualizaSalrio, o qual atualiza o valor do salrio do
funcionrio, de acordo com o novo cargo que o mesmo ir ocupar.
61 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Mensagens
Os objetos se comunicam atravs de um mecanismo de troca de mensagens. Mensagens so mecanismos de comunicao
entre objetos atravs do qual se desencadeia a execuo de um mtodo especfico. Atravs dos mecanismos de troca de
mensagens um objeto pode invocar mtodos de outros objetos e receber os resultados da execuo do mtodo invocado.
No desenvolvimento baseado em padres como COM/COM+ existem mtodos proprietrios para troca de mensagens.
Alm disso, cada linguagem de programao possui um conjunto distinto de tipos. Desta maneira a troca de mensagens
entre objetos criados em diferentes linguagens no uma tarefa simples. J no .NET existe um sistema de tipos comuns a
todas as linguagens: CTS Common Type System. A existncia do CTS facilita, enormemente, a interao entre objetos
criados em diferentes linguagens. Outra vantagem do Framework .NET que o mesmo utiliza um sistema para troca de
mensagens, baseado no padro XML e no protocolo SOAP, ambos adotados como um padro de fato pela indstria de TI.
Outro termo relacionado com orientaes a objetos instncia. Quando um programa carrega um determinado objeto
na memria, dizemos que foi feita uma instncia do objeto. Ao carregar na memria estamos reservando recursos para
armazenar as caractersticas do objeto atravs da definio dos valores de suas propriedades e tambm recursos para
que os mtodos do objeto possam ser executados.
Classes
Se pesquisarmos a bibliografia sobre orientao a objetos encontraremos um sem-fim de definies para classes.
Vamos inicialmente apresentar algumas das definies formais encontradas na bibliografia. Depois vamos a uma,
digamos, explicao mais light:
www.juliobattisti.com.br 62
CAPTULO 2: ENTENDENDO O CLR
Classes constituem modelos que so utilizados para a criao de objetos. Nas classes so descritas a estrutura
de dados (atravs das propriedades) e o comportamento (atravs de seus mtodos) de um ou mais objetos
similares que possuem seus dados estruturados da mesma forma e so manipulados pelos mesmos mtodos.
Um objeto uma instncia de uma classe que criada em tempo de execuo. Classes so puramente uma
descrio esttica de um conjunto de possveis objetos.
Na prtica, o que significa, por exemplo, termos uma classe chamada Funcionrios? Esta classe serve como modelo
para a criao de objetos do tipo Funcionrio. Na classe Funcionrios esto as definies das propriedades e dos
mtodos para um objeto Funcionrio. Ou seja, sempre que criarmos um objeto do tipo funcionrio, o mesmo ser
criado com todas as propriedades e mtodos da classe Funcionrios.
Como eu sou apaixonado por definies simples e sem meias-palavras, adorei esta definio que encontrei na Internet:
Classe uma forma para fazer objetos. Acho que essa frase resume tudo.
Grande parte da funcionalidade do Framework .NET fornecida por um grande nmero de classes, as quais fazem
parte de .NET Framework Class Library, j descrita anteriormente. O Framework .NET agrupa as classes de acordo
com suas funcionalidades. Um agrupamento de classes criadas para um determinado fim tambm conhecido como
um namespace (espao de nomes). Por exemplo, temos o namespace System.Data. Dentro deste namespace existem
vrias classes que fornecem os mtodos necessrios para a conexo e manipulao de fontes variadas de dados.
Existem classes para a conexo com o SQL Server 2000, outras para a conexo com fontes ODBC e assim por diante.
A biblioteca de classes do Framework .NET organizada de uma forma hierrquica, onde as classes de nveis inferiores
herdam todas as caractersticas da classe me. Falaremos mais sobre herana no prximo item.
Nos Captulos 3, 4 e 5 vamos estudar os fundamentos da linguagem C#. Veremos que tudo (ou quase tudo, como preferem
alguns) no C# so classes. At para criar um simples programa como o Hello World apresentado no Captulo 1 e exibido
novamente na Listagem 2.1, estamos criando uma classe. Observe a palavra class na segunda linha do exemplo.
63 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Herana
o mecanismo que permite definir uma nova classe a partir de uma classe j existente. A classe que est sendo criada
dita subclasse ou classe filha da classe j existente. Em contrapartida a classe j existente chamada de superclasse
da classe que est sendo criada. A subclasse herda a estrutura de dados e os mtodos da superclasse, podendo adicionar
variveis na estrutura de dados herdada, bem como adicionar novos mtodos e reescrever mtodos herdados.
Uma classe pode possuir uma nica superclasse herana simples, ou pode conter mais do que uma superclasse
herana mltipla. A herana mltipla tem sido alvo de muitas discusses e controvrsias. A nica linguagem, do
Framework .NET, que implementa diretamente a herana mltipla o C++. A grande discusso em torno da herana
mltipla tem a ver com a relao custo x benefcio, uma vez que a mesma de difcil implementao e concepo,
embora os benefcios nem sempre sejam os esperados.
Herana um conceito fundamental para a orientao a objetos. Atravs do mecanismo de herana podemos criar uma
classe baseada em outra j existente. A nova classe que est sendo criada herda todas as propriedades e mtodos da
classe base, tambm chamada de classe me ou superclasse conforme descrito anteriormente. A herana evita que as
propriedades e mtodos da classe me tenham que ser redefinidos na classe filho, embora a classe filho ou subclasse
possa redefinir os mtodos da classe me, atravs de um mecanismo conhecido como Overwrite.
Para ilustrar o mecanismo de herana vamos a um exemplo prtico. Vamos imaginar que voc esteja projetando um
programa baseado na orientao a objetos, evidentemente, para um banco. Uma das provveis classes seria a classe
Clientes. Nesta classe poderamos definir as caractersticas e mtodos bsicos para um cliente tpico.
Nome
CPF
RG
Identidade
Endereo
Cidade
CEP
Fone
e-mail
Cadastrar
Excluir
Atualizar
Observe que a nossa classe Clientes possui apenas as propriedades e mtodos comuns a qualquer cliente, quer seja um
grande cliente ou um pequeno correntista. Este um dos princpios da utilizao de classes: nas classes de primeiro nvel
definimos apenas as propriedades e mtodos comuns, os quais devero ser utilizados pelas classes dos demais nveis.
www.juliobattisti.com.br 64
CAPTULO 2: ENTENDENDO O CLR
Continuando o nosso exemplo, o banco tem clientes com caractersticas diferenciadas. Por exemplo:
Correntistas
Contas de poupana
Emprstimos pessoais
Financiamentos habitacionais
Cada um destes tipos de clientes possui propriedades e relaes diferenciadas com o banco. Por isso precisamos de
objetos que representem estas diferenas. A primeira sugesto seria criar uma classe para cada tipo de cliente. A ttulo
de exemplo poderamos criar as seguintes classes:
ClienteCorrentista
ClientePoupana
ClienteEmprstimo
ClienteHabitacional
65 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Ao criar a classe ClienteCorrentista podemos cri-la como uma subclasse da classe Clientes. Com isso, a classe
ClienteCorrentista herda todas as propriedades e mtodos da classe pai Clientes. Somente precisaremos implementar
as propriedades e mtodos que so especficas da subclasse ClienteCorrentista.
NumConta
NumAgncia
Limite
Categoria
DefinirLimite
AumentarLimite
BloquearConta
LiberarConta
Juntando as propriedades e classes que foram herdadas da classe pai Clientes, a classe ClienteCorrentista teria as
seguintes propriedades:
Juntando as propriedades e classes que foram herdadas da classe pai Clientes, a classe ClienteCorrentista teria as
seguintes propriedades:
www.juliobattisti.com.br 66
CAPTULO 2: ENTENDENDO O CLR
Na Figura 2.9 temos uma viso geral da classe ClienteCorrentista, j incluindo as propriedades e mtodos herdados da
classe pai Clientes.
O mesmo raciocnio tambm vlido para a criao das classes ClientePoupana, ClienteEmprstimo e
ClienteHabitacional, como subclasses da classe pai Clientes.
67 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Caso haja necessidade, uma subclasse pode sobrescrever um mtodo herdado da classe pai. Por exemplo, a subclasse
ClienteCorrentista poderia sobrescrever o mtodo Cadastrar da classe pai Clientes. Isso pode ser feito para que
sejam atendidas necessidades especficas do cadastramento de um cliente correntista. As linguagens do Framework
.NET suportam esta tcnica, a qual tambm conhecida como Overwrite.
Aps termos criado as demais classes do nosso exemplo, estaremos com a hierarquia de classes ilustrada na Figura 2.10.
Clientes
Conforme descrevemos anteriormente, uma hierarquia de classes tambm pode ser chamada de namespace ou espao
de nomes. Tambm j descrevemos antes que .NET Framework Class Library , na verdade, um grande nmero de
namespaces, cada um com funcionalidades especficas, funcionalidades estas disponibilizadas por um grande nmero
de classes dentro de cada um dos namespaces. Tambm gostaria de reforar que este um dos grandes atrativos do
.NET, ou seja, oferecer uma infinidade de classes, as quais facilitam muito o desenvolvimento das aplicaes e, ainda
por cima, classes estas que podem ser acessadas a partir de qualquer linguagem do Framework .NET.
Reutilizao de Cdigo
Ao utilizar uma das classes do Framework .NET qual o princpio de orientao a objetos que estamos utilizando?
Herana. Certo. Mas no era bem deste princpio que eu gostaria de tratar. Ento vamos colocar as coisas de uma
maneira um pouco diferente: Ao utilizarmos a herana, qual o princpio de orientao a objetos que estamos utilizando?
Reutilizao ou reaproveitamento de cdigo ou, de uma maneira mais chique: Reusabilidade.
Ao invs de termos que implementar a funcionalidade de determinada classe, em cada programa onde a funcionalidade
for necessria, simplesmente criamos uma classe que herda estas funcionalidades, j prontas, de uma classe do Frame-
work .NET. Com isso estamos reutilizando o cdigo j desenvolvido. Isso poupa trabalho e facilita o desenvolvimento
das aplicaes. Melhor ainda. Vamos imaginar que tenha sido descoberto um pequeno bug em um mtodo de uma
classe. Ao corrigirmos este bug na classe em questo, todos os programas que utilizam a classe passaro a ter acesso
s modificaes, ou seja, iro herdar as alteraes. Isso facilita, enormemente, a manuteno e alterao das aplicaes.
Mas era de esperarmos tal comportamento, uma vez que reutilizao de cdigo, herana e facilidade de manuteno
dos programas so alguns dos princpios bsicos da orientao a objetos.
www.juliobattisti.com.br 68
CAPTULO 2: ENTENDENDO O CLR
Em uma empresa, a equipe de desenvolvimento pode criar classes bsicas, as quais podem ser utilizadas em diversos
programas da empresa. Sempre que forem feitas alteraes nas classes bsicas, as alteraes sero herdadas por todos
os programas que utilizam as classes bsicas. Vejam que este cenrio muito diferente do que acontece, na prtica,
hoje. Muitas vezes cada projeto de desenvolvimento parte do zero, sem que nada seja reaproveitado de projetos
anteriores. Com isso, uma srie de funcionalidades bsicas precisam ser reescritas a cada novo programa. Desta forma
temos projetos mais longos, com maior custo e que muito raramente so concludos no prazo.
Para que voc possa acompanhar os exemplos apresentados nos captulos 3, 4 e 5 necessrio que o Framework .NET
tenha sido instalado com sucesso e que o compilador do C# esteja disponvel.
A seguir coloco os passos necessrios para que voc verifique se est tudo OK com o computador que voc utilizar
para acompanhar os exemplos dos captulos 3, 4 e 5.
Para verificar se o Framework .NET foi instalado com sucesso: NOTA: Para orientaes
sobre o download e a
1. Verifique se a opo Microsoft .NET Framework SDK foi adicionada ao menu
instalao do Framework
Programas (Iniciar -> Programas -> Microsoft .NET Framework SDK).
.NET consulte a
2. Verifique se a pasta \Arquivos de programas\Microsoft.NET\FrameworkSDK foi Introduo deste livro.
criada no drive onde est instalado o Windows 2000.
1. Abra o Bloco de Notas (Iniciar -> Programas -> Acessrios -> Bloco de Notas). NOTA: Se voc est
2. Digite o cdigo indicado na Listagem 2.2: utilizando o Windows
2000 em Ingls, ao invs
Listagem 2.2 Hello World ! de Arquivo de
using System; Programas, procure na
class teste pasta Program Files.
{
// Aprendendo C#.
// Um exemplo simples.
69 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
13. Observe que o nome da pasta Meus documentos vem entre aspas porque a mesma possui espao em branco no
nome. Se no colocarmos aspas o comando cd (change directory) ir gerar um erro.
14. O prompt deve indicar que voc est na pasta Meus documentos, conforme indicado na Figura 2.12.
www.juliobattisti.com.br 70
CAPTULO 2: ENTENDENDO O CLR
16. Se o compilador C# estiver corretamente instalado, o programa teste.cs ser compilado e ser gerado um arquivo
chamado teste.exe. Para executar este arquivo basta digitar teste e pressionar Enter. Voc obter os resultados
indicados na Figura 2.13.
71 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Observe a sada do programa que simplesmente a mensagem: Testando o compilador !!! Isto comprova que o
compilador C# est instalado e funcionando.
Concluso
J temos todas as condies para iniciar a parte prtica. J foram apresentados os aspectos tericos necessrios ao
entendimento do .NET. Agora hora de comear a trabalhar.
www.juliobattisti.com.br 72
CAPTULO 2: ENTENDENDO O CLR
Introduo CAPTULO
Neste captulo apresentaremos a linguagem C# l-se C Sharp. Vamos explicar o
porqu de mais uma linguagem de programao, sendo que j temos tantas.
3
Tambm falaremos sobre as caractersticas que tornaro o C# uma alternativa
atraente para o desenvolvimento de solues corporativas.
Vamos entender como fazer uso das Classes do .NET Framework Class Library.
Veremos que temos duas opes para usar mtodos e propriedades das classes do
.NET Framework Class Library. Explicaremos o uso da instruo Using e veremos
como os comandos de um programa so diferentes dependendo de utilizarmos a
instruo Using ou no utilizarmos.
Vamos falar sobre os tipos bsicos disponveis no C#. Veremos que os tipos so
disponibilizados pelo Framework .NET, no que conhecido como CTS Com-
mon Type System. O CTS disponibiliza um conjunto de tipos padronizados, o
qual est disponvel para qualquer linguagem do Framework .NET. Isso faz com
que um tipo Int32, por exemplo, tenha a mesma estrutura e ocupe a mesma
quantidade de memria, quer seja em um programa escrito em C# ou VB.NET ou
qualquer outra linguagem do Framework .NET. A disponibilizao de um sistema
de tipos padronizado facilita a integrao entre programas escritos em diferentes
linguagens.
73 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
for programador iniciante, no tem problema. Os exemplos apresentados iro ajud-lo a entender a estrutura e os
comandos da linguagem.
O cdigo-fonte com os exemplos dos captulos 3, 4 e 5 esto disponveis para download no site da editora Axcel
Books: www.axcel.com.br.
Crie uma pasta chamada ExCSharp no drive C, ou em outro drive qualquer do computador que voc est utilizando
para acompanhar os exemplos deste livro. Na pasta ExCSharp crie uma subpasta chamada Cap3, outra chamada Cap4
e mais uma chamada Cap5. Colocarei, em cada uma das subpastas, os exemplos dos captulos respectivos. Dentro
destas pastas ficaro gravados dois arquivos para cada exemplo. Um arquivo com a extenso .cs, o qual o arquivo
com o cdigo-fonte, e um arquivo .exe que o resultado da compilao do arquivo .cs.
Para resumir em poucas palavras quais os objetivos da Microsoft com a criao do C#, eu diria o seguinte: Uma nova
linguagem, criada para ter a simplicidade e facilidade de desenvolvimento do Visual Basic, aliadas com o poder do
C++. Vamos resumir um pouco mais:
Simples
Poderosa
Fcil
Alm de poder e simplicidade, sendo uma linguagem do Framework .NET, o C# pode se beneficiar de toda a
funcionalidade disponibilizada pelo mesmo.
Alm disso podemos utilizar o C# para qualquer tipo de desenvolvimento, desde aplicaes de linha de comando,
tambm conhecidas como aplicaes de Console, passando por aplicaes grficas Win32 tradicionais, at aplicaes
Web com ASP.NET. Alis justamente de criao de aplicaes Web com a dobradinha ASP.NET/C# que estaremos
tratando do Captulo 5 at o final deste livro.
Nas verses anteriores, para a criao de pginas ASP ns tnhamos basicamente duas opes: VBScript ou JScript.
Para a criao de aplicaes WIn32 tnhamos vrias opes: VB, C++, etc.
Para aplicaes do tipo console, basicamente o C++. Agora, com o Framework .NET podemos criar qualquer tipo de
aplicao com qualquer linguagem. Se um dia tivermos um Cobol habilitado ao .NET, poderemos criar aplicaes
Web com a dobradinha ASP.NET/Cobol. Parece estranho? Que tal um FORTRAN habilitado ao .NET?
www.juliobattisti.com.br 74
CAPTULO 2: ENTENDENDO O CLR
O C# foi a linguagem utilizada para criar a maioria dos componentes do Framework .NET, o que nos leva a crer que o C#
ser a indicao da Microsoft, como linguagem para o desenvolvimento de aplicativos empresariais, baseados no .NET.
Tambm poderamos questionar se C# realmente uma nova linguagem ou um C++ remodelado com cara de Java.
As interpretaes podem variar de acordo com a opinio pessoal de cada um, mas o fato que o C# muito semelhante
ao C++, com exceo de alguns recursos e comandos que foram retirados.
Uma das diferenas tem a ver com a utilizao de ponteiros. No C# no temos ponteiros. Para os programadores C/
C++ a no existncia de ponteiros soa como uma heresia. Porm com o Framework .NET, muitas das funcionalidades
que tinham que ser codificadas no prprio programa foram passadas para o controle do Framework .NET. Muitas das
operaes avanadas que eram implementadas com a utilizao de ponteiros passaram a ser automaticamente gerenciadas
pelo Framework .NET. O exemplo mais tpico a alocao e liberao de memria pelo programa. Estas funes so
automaticamente tratadas pelo Framework .NET, liberando o programa para tratar apenas da sua prpria funcionalidade
e no de toda a infraestrutura necessria ao seu correto funcionamento. Lembrando do Captulo 1, que o cdigo das
aplicaes .NET chamado de managed code, onde operaes inseguras como o acesso direto memria no so
permitidas. Estas operaes esto a cargo do Framework .NET.
Que aprender C++ no uma tarefa simples ns j sabemos. E aprender C#? uma tarefa simples. Voc poder
constatar isso na prtica, medida que formos avanando neste livro.
Outra melhoria significativa do C# em relao ao C++ foi o gerenciamento de excees. Veremos mais detalhes nos
prximos captulos.
75 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
1. Abra o Bloco de Notas (Iniciar -> Programas -> Acessrios -> Bloco de Notas).
2. Digite o cdigo indicado na Listagem 3.1:
using System;
class ex1cap3
{
// Exemplo1 Captulo 3.
// Entrada e sado com C#
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
Int32 Adicao;
Int32 Produto;
www.juliobattisti.com.br 76
CAPTULO 2: ENTENDENDO O CLR
77 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
minsculas. Por exemplo, se A clusula using utilizada para que possamos utilizar as classes, mtodos e
voc declarar uma varivel i propriedades de um determinado namespace. No nosso exemplo estamos fazendo
minscula e, por engano, referncia ao namespace System. Ao fazermos referncia ao namespace System,
utilizar em uma expresso I passamos a ter acesso a todos os seus mtodos, classes e propriedades. Por exemplo,
maisculo ser gerado um abaixo de System, existe uma classe chamada Console System.Console. Na Classe
erro de compilao. Outro System.Console temos um mtodo chamado WriteLine System.Console.WriteLine.
exemplo, o comando Observe que estamos utilizando este mtodo em nosso programa. Porm, ao invs de
Console.WriteLine deve ser digitar System.Console.WriteLine, utilizamos somente Console.WriteLine. Isso
escrito desta maneira; se possvel pois estamos fazendo referncia ao namespace System, atravs da clusula
voc escrever, por exemplo, using. Se no fizssemos referncia ao namespace System, teramos que utilizar a
Console.writeline ser nomenclatura completa para o mtodo WriteLine System.Console.WriteLine. Ob-
gerado um erro de serve que, ao fazermos referncia a um ou mais namespaces, estamos simplificando o
compilao. nosso cdigo.
Embora a utilizao de referncias no seja obrigatria, uma prtica recomendada, uma vez que simplifica o cdigo-
fonte. No nosso exemplo, se no tivssemos feito referncia ao namespace System, o nosso programa ficaria da
seguinte maneira:
class ex1cap3
{
// Exemplo1 Captulo 3.
// Entrada e sado com C#
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
System.Int32 Adicao;
System.Int32 Produto;
www.juliobattisti.com.br 78
CAPTULO 2: ENTENDENDO O CLR
System.String Aux1=System.Console.ReadLine();
Observe que neste caso teramos que utilizar sempre a nomenclatura completa. Tambm cabe observar a maneira de
acessar um mtodo ou propriedade de uma classe em C#: Utilizamos o nome do namespace (System), um ponto
(System.), o nome da classe (System.Console), mais um ponto (System.Console.) e por ltimo o nome do mtodo e os
parmetros que o mtodo deve receber (System.Console.WriteLine(O valor da soma -> {0},Adicao);). Com a
utilizao da nomenclatura completa o cdigo fica mais longo e de difcil leitura.
using System;
using System.Data;
using System.Net;
using System.Security;
class ex1cap3
{
// Exemplo1 Captulo 3.
// Entrada e sado com C#
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
No C# toda a lgica de um programa deve estar contida dentro de uma classe. Na verdade, para ser mais precisos,
teramos que modificar a frase anterior para que a mesma ficasse assim: No C# toda a lgica de um programa deve
estar contida dentro de uma definio de tipo, sendo que uma definio de tipo pode ser uma classe, uma estrutura ou
79 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
outro tipo qualquer definido no Framework .NET. Para o nosso estudo de introduo ao C#, ficaremos com a primeira
frase, ou seja, toda a lgica dos nossos exemplos estar contida dentro de uma classe.
No nosso caso estamos definindo uma classe chamada ex1cap3. Um detalhe importante que o nome da classe no
precisa ser igual ao nome do arquivo .cs. Por exemplo, poderamos ter uma classe ex1cap3.cs e gravarmos o cdigo-
fonte em um arquivo chamado admult.cs.
Todo o contedo de uma classe (mtodos, propriedades, etc.) deve estar entre chaves. Na linha aps a definio do
nome da classe, temos a abertura das chaves. Na ltima linha do programa temos o fechamento das chaves.
As linhas iniciadas com duas barras (//) so linhas de comentrio. Qualquer semelhana com C/C++ no mera
coincidncia. Como temos mltiplas linhas de comentrios tambm poderamos ter utilizado a sintaxe a seguir:
/* Exemplo1 Captulo 3.
Entrada e sado com C#
Por: Jlio Battisti
MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA */
Aps a chave de abertura da classe (colocada logo aps a definio da classe), comeamos a definir os mtodos e
propriedades da classe ex1cap3. Todo programa em C# deve conter um mtodo chamado Main( ). Este mtodo funciona
como o ponto de entrada da aplicao. Em outras palavras, a execuo da aplicao se inicia pelo mtodo Main( ).
Dentro do mtodo Main( ) podemos fazer chamadas para outros mtodos da classe ex1cap3 ou de outras classes.
Novamente qualquer semelhana com o C/C++ no mera coincidncia.
Int32 Adicao;
Int32 Produto;
www.juliobattisti.com.br 80
CAPTULO 2: ENTENDENDO O CLR
String Aux2=Console.ReadLine();
Int32 Adicao;
Int32 Produto;
Em seguida utilizamos o mtodo Write da classe Console (Console.Write), para exibir uma mensagem na tela. Na
prxima linha o mtodo ReadLine( ) da classe Console (Console.ReadLine) exibe um cursor e fica aguardando que o
usurio digite alguma coisa e pressione Enter. Ao pressionar Enter, o valor digitado pelo usurio passado, no formato
de uma string de texto, para a varivel Aux1:
Ao final da execuo destas duas linhas temos o valor digitado pelo usurio armazenado na varivel Aux1, porm no
formato de uma string de texto. As mesmas explicaes so vlidas para a varivel Aux2.
O prximo passo calcular o valor da adio, que ser armazenado na varivel Adicao e da multiplicao, que ser
armazenado na varivel Produto. Porm as variveis Aux1 e Aux2 so do tipo texto. No podemos adicionar e multiplicar
variveis do tipo texto. Para converter o valor destas variveis para o tipo Int32 (inteiro de 32 bits), utilizamos o
mtodo ToInt32, da classe Convert, conforme indicado pelas duas linhas a seguir:
Uma vez calculados os valores, o passo final exibi-los na tela. Isso feito como o mtodo WriteLine da classe
Console. Um detalhe interessante a utilizao do marcador {0} com esse mtodo. O {0} substitudo pelo valor da
primeira varivel passada para o mtodo, que no nosso exemplo a varivel Adicao:
81 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Neste caso o {0} substituido pelo valor da varivel adio. As mesmas consideraes so vlidas para a varivel
Produto, conforme indicado na linha a seguir:
Aps a chave de fechamento do mtodo Main( ), temos a chave de fechamento da classe ex1cap3. Cabe observar que
para a classe ex1cap3 temos um nico mtodo definido, que justamente o mtodo que obrigatrio para todas as
classes: Main( ).
Outra observao importante que todo comando encerrado com um ponto-e-vrgula (;).
using namespace1;
using namespace2;
...
using namespacen;
class nome_da_classe
{
Agora que j conhecemos a cara de um programa C#, vamos comear a estudar os diversos elementos da linguagem.
Vamos iniciar falando sobre os tipos de dados disponveis no C#.
Tipos da Linguagem C#
No C# temos os seguintes tipos:
www.juliobattisti.com.br 82
CAPTULO 2: ENTENDENDO O CLR
Value Types
Um tipo Value Type contm o valor da varivel. Por conter o valor da varivel e no uma referncia (referncia=
endereo de memria) varivel, valores do tipo Value Type no podem conter o valor Null.
Outro detalhe importante a ser observado que tudo no C#, mesmo os tipos mais simples como um inteiro, considerado
um objeto. Por exemplo, o tipo inteiro definido a partir da Estrutura System.Int32 (ou System.Int16 dependendo do
tamanho necessrio). Ao criarmos uma varivel do tipo System.Int32 estamos criando uma instncia desta estrutura,
o que na prtica significa criar um objeto baseado na estrutura System.Int32. Esta estrutura possui mtodos. Um dos
mtodos, a ttulo de exemplo, o mtodo ToString, o qual converte o valor inteiro na string de texto correspondente.
Vamos a um exemplo. Vamos imaginar que as variveis a e b so do tipo Value Type. Tambm vamos imaginar que
a varivel a contm o valor 10 e a varivel b contm o valor 15. Agora considere o seguinte comando:
a = b
Neste caso o valor da varivel b atribudo varivel a. Ou seja, aps a execuo deste comando, a varivel a
contm o mesmo valor da varivel b, que no nosso exemplo 15. Agora, se modificarmos o valor da varivel b, o
que acontece com o valor da varivel a?
Nada. Como as variveis so do tipo Value Type, ao fazermos a=b, apenas atribumos o valor de b para a. Porm
a no fica com nenhuma referncia para b, ou seja, se b for modificado, a no ser afetado.
using System;
class ex2cap3
{
// Exemplo2 Captulo 3.
// Value Types
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
83 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
a=10;
b=15;
a=b;
b=33;
Console.WriteLine(****************************);
Console.WriteLine(Aps a modificao de b!!!!);
Console.WriteLine(****************************);
Console.WriteLine(Valor da varivel a: {0},a);
Console.WriteLine(Valor da varivel b: {0},b);
}
}
Compile e execute o exemplo da listagem 3.2. Voc obter os resultados indicados na Figura 3.2.
www.juliobattisti.com.br 84
CAPTULO 2: ENTENDENDO O CLR
Observe que, aps modificarmos o valor da varivel b, o valor da varivel a manteve-se inalterado. Este o
comportamento esperado, conforme descrito anteriormente.
Em C# tambm temos os tipos simples presentes na maioria das linguagens. Conforme descrevemos anteriormente,
um tipo simples uma instncia de uma estrutura ou classe do namespace System. Para facilitar a programao, o C#
oferece aliases (apelidos) para os tipos do Framework .NET. Por exemplo, ao invs de declararmos o tipo de uma
varivel inteira como System.Int32, podemos utilizar o alias do C#: int.
Na Tabela 3.1 temos uma descrio dos principais tipos bsicos do C#. Tambm apresentamos o alias correspondente,
bem como uma descrio da faixa de valores de cada tipo.
85 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
No C/C++ o valor verdadeiro, para uma varivel do tipo bool, representado por qualquer valor diferente de
zero. No C# o valor verdadeiro no mais representado por qualquer valor diferente de zero.
O tipo decimal utilizado para valores que necessitam de uma alta preciso, como por exemplo valores para
clculos financeiros e monetrios. Tambm devemos destacar que a preciso dada em dgitos e no em casas
decimais. As operaes so precisas at um mximo de 28 casas decimais.
Agora vamos falar um pouco mais sobre um tipo que nos oferece mais opes: O tipo struct.
O Tipo Struct
Atravs da utilizao da palavra struct podemos construir estruturas complexas de dados. Por exemplo, um ponto no plano
cartesiano representado pelo valor de x e y. Podemos criar uma estrutura chamada ponto, a qual contm dois campos: x e
y. Alm de campos, uma estrutura pode conter constantes, mtodos, propriedades, indexadores, operadores e tipos aninhados.
Pode parecer que um struct a mesma coisa que uma classe. Porm a diferena bsica que um struct um value type,
enquanto uma classe um reference type (falaremos mais sobre reference type mais adiante). O namespace System
contm uma srie de estruturas, algumas delas descritas na tabela 3.1: System.Int16, System.Int32, System.Byte,
System.SByte e assim por diante.
Vamos criar um exemplo simples, onde criamos uma estrutura para representar nmeros complexos. Um nmero
complexo possui uma parte real e uma parte imaginria (s para lembrarmos um pouco da poca do segundo grau). A
seguir temos alguns exemplos de nmeros complexos:
www.juliobattisti.com.br 86
CAPTULO 2: ENTENDENDO O CLR
x = 2 + 3i
y = -1 + 4,5i
z = 3 5,2i
Para representar um nmero complexo, precisamos de dois valores do tipo single: um para a parte real e outro para a
parte imaginria. Para somar dois nmeros complexos, basta somar as partes reais e as partes imaginrias, conforme
exemplo a seguir:
x+y = (2-1)+(3+4,5)i
x=y = 1+7,5y
Vamos a um exemplo simples, onde criaremos uma estrutura para representar nmeros complexos. Nossa estrutura
conter dois campos: um para representar a parte real e outro para representar a parte imaginria. O usurio ir digitar
os valores para dois nmeros complexos e o programa far a soma dos mesmos e exibir os nmeros digitados e o
resultado da soma.
Para definir uma estrutura utilizamos a palavra struct. Por exemplo, vamos definir a estrutura numcomplexo, a qual
ser utilizada no nosso programa:
struct numcomplexo
{
public float preal,pimag;
}
Para utilizar esta estrutura no nosso exemplo, precisamos declarar uma varivel do tipo numcomplexo. Como iremos
utilizar trs variveis, sendo uma delas para conter a soma, precisamos declarar trs variveis do tipo numcomplexo:
numcomplexo num1,num2;
numcomplexo soma;
Para acessar os campos individuais da estrutura utilizamos a notao tradicional da orientao a objetos, ou seja, o
nome da estrutura seguida de um ponto (.) mais o nome do campo. Por exemplo, para atribuirmos um valor ao campo
preal, da estrutura num1, utilizamos a seguinte sintaxe:
num1.preal = 3,5;
Agora que j conhecemos o bsico sobre estruturas, vamos apresentar o nosso exemplo. Considere o exemplo da
Listagem 3.3.
using System;
// Exemplo3 Captulo 3.
87 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
// Utilizao de estruturas.
// Nmeros complexos.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
struct numcomplexo
{
public float preal,pimag;
}
class ex3cap3
{
numcomplexo num1,num2;
numcomplexo soma;
num1.preal = Convert.ToSingle(Auxreal1);
num1.pimag = Convert.ToSingle(Auximag1);
Console.Write(Digite a parte real do segundo nmero ->);
www.juliobattisti.com.br 88
CAPTULO 2: ENTENDENDO O CLR
String Auxreal2=Console.ReadLine();
num2.preal = Convert.ToSingle(Auxreal2);
num2.pimag = Convert.ToSingle(Auximag2);
Console.WriteLine(**********************************************);
Console.WriteLine(O primeiro complexo -> {0} + {1}i,num1.preal,num1.pimag);
Console.WriteLine(**********************************************);
Console.WriteLine(O segundo complexo -> {0} + {1}i,num2.preal,num2.pimag);
Console.WriteLine(**********************************************);
Console.WriteLine(O resultado da soma -> {0} + {1}i,soma.preal,soma.pimag);
Console.WriteLine(**********************************************);
}
}
Digite o exemplo da Listagem 3.3 e salve o mesmo em um arquivo chamado ex3cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.3. Voc obter os resultados indicados na Figura 3.3.
Este exemplo simples serve para ilustrar a criao e utilizao de estruturas. Tambm observe que utilizamos o mtodo
ToSingle, da classe Convert Convert.ToSingle. A utilizao deste mtodo foi necessria, porque o valor retornado
pelo comando ReadLine do tipo String. Precisamos converter este valor para o tipo Single, para que possamos fazer
a operao de adio com os mesmos. O valor retornado por ReadLine armazenado em uma varivel auxiliar do tipo
String, conforme o exemplo a seguir:
String Auxreal1=Console.ReadLine();
89 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Depois este valor convertido para o tipo Single, antes de ser atribudo parte real da varivel num1, conforme
exemplo a seguir:
num1.preal = Convert.ToSingle(Auxreal1);
Os Tipos de Enumerao
Utilizamos tipos de enumerao para criar um conjunto com valores definidos. Alm do valor definido associado
um valor numrico para cada elemento do conjunto. Por padro, o valor numrico associado do tipo inteiro e inicia
com zero.
Neste caso temos associados os seguintes valores do tipo int, com cada elemento:
Domingo = 0
Segunda = 1
Tera = 2
Quarta = 3
Quinta = 4
Sexta = 5
Sbado = 6
Tambm podemos modificar o valor associado com o primeiro elemento do conjunto. Os valores dos demais elementos
vo sendo incrementados de um em um. Vamos modificar um pouco o exemplo anterior:
www.juliobattisti.com.br 90
CAPTULO 2: ENTENDENDO O CLR
Neste caso os valores inteiros associados aos elementos do conjunto seriam os seguintes:
Domingo = 1
Segunda = 2
Tera = 3
Quarta = 4
Quinta = 5
Sexta = 6
Sbado = 7
Tambm possvel definir valores especficos, associados com cada elemento do conjunto. Considere o exemplo a
seguir:
Tambm podemos fazer com que os valores associados com os elementos do conjunto sejam de um tipo diferente de
int. Os tipos permitidos so os seguintes: long, int, short e byte. Para fazer com que os valores numricos associados
aos elementos do conjunto sejam de um tipo diferente, utilizamos a seguinte sintaxe:
Considere o exemplo a seguir, onde definimos o conjunto DiasDaSemana com valores do tipo byte, associados aos
elementos do conjunto:
Neste caso os valores do tipo byte associados aos elementos do conjunto so os seguintes:
Domingo = 1
Segunda = 2
Tera = 3
Quarta = 4
Quinta = 5
Sexta = 6
Sbado = 7
Tambm podemos utilizar a seguinte sintaxe, onde fazemos a definio de cada elemento em uma linha separada, o
que facilita a visualizao do cdigo:
enum DiasDaSemana
{
Domingo = 1,
Segunda = 2,
Tera = 3,
91 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Quarta = 4,
Quinta = 5,
Sexta = 6,
Sbado = 7
}
Reference Types
Os tipos de referncia (reference types) no armazenam os dados reais de uma varivel; ao invs disso, armazenam
uma referncia (endereo de memria) para o local onde estes dados esto armazenados. Quando uma varivel do tipo
reference type passada como parmetro de uma funo, o endereo da varivel passado para a funo e no o seu
valor. Se a funo modificar a varivel passada como parmetro, na verdade estar modificando a varivel original.
object
class
interfaces
Delegaes
string
Arrays
Neste captulo vamos tratar dos tipos string e Arrays. Veremos alguns exemplos de utilizao dos mesmos.
O Tipo String
Toda string (valor do tipo texto) no C# uma instncia da classe System.String do .NET Framework Class Library. Por
ser uma classe, temos disposio uma srie de mtodos, campos, propriedades, operadores e construtores para
manipulao de strings.
Tambm cabe reforar que uma string um valor do tipo reference type.
Para exemplificar o uso de strings considere o exemplo da Listagem 3.4. Neste exemplo utilizaremos alguns mtodos
da classe System.String.
using System;
class ex4cap3
{
www.juliobattisti.com.br 92
CAPTULO 2: ENTENDENDO O CLR
// Exemplo4 Captulo 3.
// Entrada e sado com C#
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
string Texto1;
string Texto2;
Console.WriteLine(*********************************************);
Console.WriteLine(Varivel Texto 1-> {0},Texto1.ToLower());
Console.WriteLine(Varivel Texto 2-> {0},Texto2.ToLower());
Console.WriteLine(*********************************************);
}
}
93 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Observe que o fato de uma string ser uma instncia de uma classe (System.String) faz com que tenhamos acesso a uma
srie de mtodos disponibilizados pela biblioteca de classes do .NET (.NET Framework Class Library). No nosso
exemplo utilizamos os mtodos ToLower( ) e ToUpper.
Digite o exemplo da Listagem 3.4 e salve o mesmo em um arquivo chamado ex4cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.4. Voc obter os resultados indicados na Figura 3.4.
Na Tabela 3.2 temos uma descrio dos principais mtodos da classe System.String.
Mtodo Descrio
Compare( ) Utilizado para comparar o valor de duas strings. Recebe como parmetros duas string:
Compare(str1,str2). Retorna um valor inteiro de 32 bits, com sinal. Se for menor do que
zero, str1 menor do que str2. Por exemplo: Jos menor do que Pedro, conta a ordem
alfabtica. Se for igual a zero str1 igual a str2 e, se for maior do que zero, str1 maior
do que str2.
CompareOrdinal( ) Compara strings desconsiderando diferenas entre idiomas, ou seja, faz uma comparao
posio a posio da string. Recebe como parmetros duas strings.
CompareTo( ) Compara uma string com a instncia de um objeto recebido como parmetro, sendo que
este objeto deve ser capaz de ser avaliado como uma string.
EndsWith( ) Utilizada para verificar se uma substring existe no final de uma string.
Concat( ) Concatena duas ou mais strings passadas como parmetros. Tambm podem ser passados
objetos como parmetros, desde que os mesmos possam ser avaliados como strings.
www.juliobattisti.com.br 94
CAPTULO 2: ENTENDENDO O CLR
Mtodo Descrio
Replace( ) Substitui todas as ocorrncias de um determinado caractere por outro caractere.
ToLower( ) Converte a string para letras minsculas.
ToUpper( ) Converte a string para letras maisculas.
Trim( ) Remove os espaos em branco de uma string.
Uma varivel do tipo string tambm tem duas propriedades interessantes. A primeira a propriedade Length, a qual
retorna o tamanho da strings, ou seja, o nmero de caracteres da string.
Para exemplificar o uso da propriedade Length considere o exemplo da Listagem 3.5. Neste exemplo o usurio deve
digitar uma string de texto e o programa retorna o nmero de caracteres digitados. importante salientar que espaos
em branco tambm contam.
using System;
class ex5cap3
{
// Exemplo5 Captulo 3.
// Utilizao da propriedade Lenght.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
Console.WriteLine(+++++++++++++++++++++++++++++++++++++++++++++++++++);
Console.WriteLine(Voc digitou o seguinte texto -> {0},Texto);
Console.WriteLine(O mesmo tem -> {0} caracteres.,Texto.Length);
Console.WriteLine(+++++++++++++++++++++++++++++++++++++++++++++++++++);
}
}
95 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o exemplo da Listagem 3.5 e salve o mesmo em um arquivo chamado ex5cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.5. Quando o programa solicitar digite o texto: APRENDENDO C# e
pressione ENTER. Voc obter os resultados indicados na Figura 3.5.
Tambm podemos acessar caracteres individuais de uma string, com base na posio dos mesmos. O primeiro caractere
a posio zero; o segundo, a posio 1 e assim por diante. Por exemplo, considere a string Teste definida a seguir:
O Tipo Arrays
Um array uma varivel que contm um conjunto de elementos sendo todos do mesmo tipo. Na poca do Fortran ou
do Pascal para DOS o array era chamado de vetor, quando fosse um array de uma nica dimenso, e matriz, para um
array de duas dimenses. Temos dois fatos fundamentais a respeito de arrays:
www.juliobattisti.com.br 96
CAPTULO 2: ENTENDENDO O CLR
Por exemplo, para criarmos um array de uma nica dimenso (vetor), com 5 elementos do tipo Int32, utilizamos o
seguinte comando:
meuarray[0] = 25;
meuarray[1] = 15;
meuarray[2] = 20;
meuarray[3] = 12;
meuarray[4] = 44;
Tambm podemos criar arrays de mais dimenses. Observe o exemplo a seguir, onde estamos criando um array de
duas dimenses (uma matriz), com 2 linhas e duas colunas:
meuarray[0,0] = 25;
meuarray[0,1] = 15;
meuarray[1,0] = 28;
meuarray[1,1] = 12;
Vamos a um exemplo simples. Onde criamos um array de duas dimenses, com 3 linhas e 3 colunas, atribumos
valores para os elementos do array, e depois exibimos os valores no vdeo.
using System;
class ex6cap3
{
// Exemplo6 Captulo 3.
// Um array de duas dimenses.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
97 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
minhamatriz[0,0] = 0;
minhamatriz[0,1] = 5;
minhamatriz[0,2] = 10;
minhamatriz[1,0] = 15;
minhamatriz[1,1] = 20;
minhamatriz[1,2] = 15;
minhamatriz[2,0] = 10;
minhamatriz[2,1] = 5;
minhamatriz[2,2] = 0;
}
}
www.juliobattisti.com.br 98
CAPTULO 2: ENTENDENDO O CLR
Digite o exemplo da Listagem 3.6 e salve o mesmo em um arquivo chamado ex6cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.6. Voc obter os resultados indicados na Figura 3.6.
Os valores para a(s) dimenso(es) de um array podem ser fornecidos pelo usurio, para
NOTA: Apresentaremos
que o mesmo seja criado com tamanhos variveis, cada vez que o programa executado.
mais alguns exemplos
Por exemplo, vamos supor que o usurio tenha fornecido o valor 5 para a dimenso de
com arrays mais adiante
um array e que este valor esteja em uma varivel chamada dimenarray. Podemos criar,
neste captulo, onde
por exemplo, um array de inteiros com a dimenso definida pela varivel dimenarray,
falaremos sobre as
utilizando o seguinte comando:
estruturas de controle do
C#. Veremos alguns int[] arraydinamico = new int[dimenarray];
exemplos ao
apresentarmos a
estrutura de controle For, Instrues de Fluxo de Controle no C#
a qual tipicamente
Toda linguagem disponibiliza uma srie de instrues para controlar o fluxo de execuo
utilizada para percorrer
do programa. So instrues para executar um ou outro conjunto de comando dependendo
todos os elementos de um
de uma condio ser verdadeira ou falsa; so instrues para executar um conjunto de
array.
comandos um nmero determinado de vezes e instrues para executar um conjunto de
comandos at que uma condio se torne verdadeira ou falsa.
Instrues de seleo.
Instrues de repetio.
Instrues de salto (jump).
A maioria das instrues tem o seu funcionamento baseado em um teste lgico, o qual retorna True ou False.
99 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Instrues de Seleo
As instrues de seleo executam um entre vrios comandos disponveis. O comando a ser executado selecionado
com base no valor de uma expresso.
A Instruo If
Este comando seleciona um comando ou grupos de comando para execuo, com base no valor retornado por uma
expresso boleana. Uma expresso boleana somente pode retornar dois valores: True ou False.
if expresso
{
comando1;
comando2;
...
comandon;
}
Comando1, Comando2 at Comandon somente sero executados se a expresso for verdadeira. Observe que podemos
executar mais do que um comando, caso a expresso seja verdadeira. Para isto basta colocar os diversos comandos
entre chaves. Considere o seguinte exemplo:
if (x>y)
{
Console.WriteLine(X maior do que y)
x = x+1
y = y-1
}
Os comandos entre as chaves somente sero executados quando x for maior do que y; caso contrrio, a execuo
pula para o primeiro comando aps o fechamento das chaves.
Uma outra forma da instruo if a que inclui a clusula else. Com a clusula else podemos definir um conjunto de
comandos que devem ser executados se a expresso de teste retornar False. A sintaxe para esta instruo a seguinte:
if (x<y)
{
comando1_verdadeiro;
comando2_verdadeiro;
...
comandon_verdadeiro;
www.juliobattisti.com.br 100
CAPTULO 2: ENTENDENDO O CLR
}
else
{
comando1_falso;
comando2_falso;
...
comandon_falso;
}
Vamos a um exemplo simples, onde o usurio entra com dois valores. O programa devolve diferentes mensagens para
o caso de o primeiro ser maior do que o segundo ou para o caso do segundo ser maior ou igual ao primeiro.
using System;
class ex7cap3
{
// Exemplo7 Captulo 3.
// Utilizando a instruo If.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
int valor1;
int valor2;
101 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
String Aux2=Console.ReadLine();
valor1 = Convert.ToInt32(Aux1);
valor2 = Convert.ToInt32(Aux2);
if (valor1>valor2)
{
Console.WriteLine(*****************************************);
Console.WriteLine(PRIMEIRO VALOR MAIOR DO QUE O SEGUNDO !);
Console.WriteLine(*****************************************);
Console.WriteLine(O PRIMEIRO VALOR DIGITADO FOI: {0},valor1);
Console.WriteLine(O SEGUNDO VALOR DIGITADO FOI: {0},valor2);
Console.WriteLine(*****************************************);
}
else
{
Console.WriteLine(*****************************************);
Console.WriteLine(PRIMEIRO VALOR MENOR OU IGUAL AO SEGUNDO !);
Console.WriteLine(*****************************************);
Console.WriteLine(O PRIMEIRO VALOR DIGITADO FOI: {0},valor1);
Console.WriteLine(O SEGUNDO VALOR DIGITADO FOI: {0},valor2);
Console.WriteLine(*****************************************);
}
}
}
Digite o exemplo da Listagem 3.7 e salve o mesmo em um arquivo chamado ex7cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.7. Para o primeiro valor digite 10 e para o segundo digite 5. Voc obter
os resultados indicados na Figura 3.7.
www.juliobattisti.com.br 102
CAPTULO 2: ENTENDENDO O CLR
Repita a execuo do programa. Agora digite 10 para o primeiro valor e 15 para o segundo. Voc obter os resultados
indicados na Figura 3.8.
Tambm podemos utilizar mais do que um else na mesma instruo if. Neste caso, aps a clusula else, iniciamos um
novo if. A melhor maneira de entendermos esta estrutura atravs de um exemplo. Vamos supor que voc tenha que
executar diferentes comandos dependendo do valor de uma varivel x ser igual a 0, 1, 2, ou 3. Para isso, poderamos
utilizar o seguinte bloco de cdigo:
103 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
if (x == 0)
{
comandos para x = 0
}
else if (x == 1)
{
comandos para x = 1
}
else if (x==2)
{
comandos para x = 2
}
else
{
comandos para x = 3
}
www.juliobattisti.com.br 104
CAPTULO 2: ENTENDENDO O CLR
Porm, para situaes em que temos que testar vrias possibilidades, a utilizao de sucessivas instrues if-else pode
no ser a soluo mais adequada. Para isso temos a instruo switch.
A Instruo Switch
A instruo switch tem uma expresso de controle bem no incio do lao. Com base no valor da expresso de controle,
diferentes comandos sero executados.
switch (expresso_de_controle)
{
case valor_1:
comando1;
comando2;
...
comandon;
comando para sair;
case valor_2:
comando1;
comando2;
...
comandon;
comando para sair;
...
case valor_n:
comando1;
comando2;
...
comandon;
comando para sair;
default:
comando1;
comando2;
...
comandon;
comando para sair;
}
105 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Para a expresso de controle podemos utilizar os seguintes tipos: sbyte, byte, short, ushort, long, ulong, char, string ou
um tipo de enumerao.
A expresso_de_controle avalidada. Se um dos valores (valor_1, valor_2, etc.) for coincidente com o valor da
expresso_de_controle, os comandos respectivos sero executados. Se no tivermos nenhuma coincidncia, os comandos
do rtulo default: sero executados. Se no houver um rtulo default, e no houver coincidncia com nenhum valor, a
execuo segue para o primeiro comando aps o final do bloco switch.
comando para sair um comando que faz com que a execuo saia do bloco switch, de tal maneira que os demais
valores no precisem ser avaliados, uma vez que uma coincidncia j foi encontrada ou os comandos relacionados ao
rtulo default: foram executados. O comando mais comumente utilizado o break.
Vamos a um exemplo simples, no qual o usurio deve digitar um valor entre 1 e 7. O programa informa o dia da
semana correspondente, de acordo com o seguinte critrio:
Domingo = 1
Segunda-feira = 2
Tera-feira = 3
Quarta-feira = 4
Quinta-feira = 5
Sexta-feira = 6
Sbado = 7
using System;
class ex8cap3
{
// Exemplo 8 Captulo 3.
// Utilizando a instruo switch.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
www.juliobattisti.com.br 106
CAPTULO 2: ENTENDENDO O CLR
int dia;
dia = Convert.ToInt32(Aux1);
switch (dia)
{
case 1:
Console.WriteLine(*****************************************);
Console.WriteLine(VOC ESCOLHEU O DOMINGO !!);
Console.WriteLine(*****************************************);
break;
case 2:
Console.WriteLine(*****************************************);
Console.WriteLine(VOC ESCOLHEU A SEGUNDA-FEIRA !!);
Console.WriteLine(*****************************************);
break;
case 3:
Console.WriteLine(*****************************************);
Console.WriteLine(VOC ESCOLHEU A TERA-FEIRA !!);
Console.WriteLine(*****************************************);
break;
case 4:
107 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Console.WriteLine(*****************************************);
Console.WriteLine(VOC ESCOLHEU A QUARTA-FEIRA !!);
Console.WriteLine(*****************************************);
break;
case 5:
Console.WriteLine(*****************************************);
Console.WriteLine(VOC ESCOLHEU A QUINTA-FEIRA !!);
Console.WriteLine(*****************************************);
break;
case 6:
Console.WriteLine(*****************************************);
Console.WriteLine(VOC ESCOLHEU SEXTA-FEIRA !!);
Console.WriteLine(*****************************************);
break;
case 7:
Console.WriteLine(*****************************************);
Console.WriteLine(VOC ESCOLHEU O SBADO !!);
Console.WriteLine(*****************************************);
break;
default:
Console.WriteLine(*****************************************);
Console.WriteLine(VOC NO DIGITOU UM VALOR ENTRE 1 E 7 !!);
Console.WriteLine(*****************************************);
break;
} //Esta chave fecha o lao switch.
Digite o exemplo da Listagem 3.8 e salve o mesmo em um arquivo chamado ex8cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.8. Digite o valor 5. Voc obter os resultados indicados na Figura 3.9.
www.juliobattisti.com.br 108
CAPTULO 2: ENTENDENDO O CLR
Repita a execuo do programa. Agora digite 10. Voc obter os resultados indicados na Figura 3.10.
Instrues de Repetio
As instrues de repetio, como o prprio nome sugere, permitem que um conjunto de comandos seja executado um
nmero definido de vezes ou at que uma determinada condio seja verdadeira. Vamos estudar as seguintes instrues:
for
while
do/while
foreach
109 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
A Instruo For
Esta instruo utilizada para repetir um ou mais conjuntos, um nmero determinado de vezes. A instruo for do C#
praticamente igual ao comando for do C/C++. composta de trs partes, conforme indicado na sintaxe a seguir:
O nmero de vezes que os comandos da instruo for sero executados determinado por uma varivel de controle. Na
primeira parte do lao for, definimos um valor para esta varivel. Na segunda parte fazemos um teste para ver se a
varivel j atingiu um valor limite. A terceira e ltima parte informa o incremento da varivel a cada passagem do lao.
Enquanto a expresso boleana for verdadeira, os comandos do lao continuam a ser executados. Quando a expresso
torna-se falsa, a execuo pula para o primeiro comando aps a chave de fechamento do lao for.
Vamos a um exemplo simples, onde so exibidos os nmeros entre 1 e 10 e o valor do nmero elevado ao quadrado e
ao cubo.
using System;
class ex9cap3
{
// Exemplo9 Captulo 3.
// A instruo for.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
// Declarao da varivel.
www.juliobattisti.com.br 110
CAPTULO 2: ENTENDENDO O CLR
int i;
}
}
Digite o exemplo da Listagem 3.9 e salve o mesmo em um arquivo chamado ex9cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.9. Voc obter os resultados indicados na Figura 3.11.
Observe que para o lao for utilizamos uma varivel inteira i. Inicializamos a mesma com o valor 1. O teste 1<=10 faz
com que o lao seja executado dez vezes. A ltima parte: i++ e novidade. O operador ++ incrementa a varivel i de um
em um. O resultado o mesmo que se tivssemos utilizado: i=i+1. No prximo captulo faremos um estudo detalhado
dos operadores do C#.
Para calcular o cubo multiplicamos o nmero por ele mesmo, trs vezes: i*i*i.
111 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Operador Descrio
+ Adio.
- Subtrao.
* Multiplicao.
/ Diviso.
Observe que tambm utilizamos o cdigo de controle \t tabulao. Utilizamos a tabulao para alinhar os resultados.
Tambm podemos utilizar instrues for aninhadas, isto , instrues for uma dentro da outra. O uso tpico para
instrues for aninhadas para percorrer os valores de uma matriz, onde a instruo for mais externa vai variando
o nmero das linhas e a instruo for mais interna vai variando o nmero das colunas. Observe o exemplo a seguir:
for (i=1;i<=6;I++)
{
for (j=1;j<=5;j++)
{
Comando1
Comando2
...
Comandon
}
}
Neste caso primeiro i=1. O programa entra no lao interno e para i=1 o lao interno executado 6 vezes, ou seja: i=1,
j=1 e i=1, j=2 e i=1, j=3 e i=1, j=4 e i=1, j=5 . Agora i incrementado e torna-se igual a 2. Para i=2 o j varia de 1 a 5
e a histria se repete. At que i tenha variado at 6 e j at 5.
Vamos comprovar estas variaes atravs de um exemplo prtico. Neste exemplo utilizaremos dois laos. No lao
externo i varia de 1 at 6. No lao interno i varia de 1 at 5. Dentro do lao colocamos comandos que vo exibindo os
valores de i e j respectivamente.
www.juliobattisti.com.br 112
CAPTULO 2: ENTENDENDO O CLR
using System;
class ex10cap3
{
// Exemplo 10 Captulo 3.
// Instrues for aninhadas.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
int i;
int j;
for (i=1;i<=6;i++)
{
for (j=1;j<=5;j++)
{
Console.Write(i);
Console.Write( {0},j);
Console.Write(\t);
}
Console.WriteLine();
}
}
}
113 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o exemplo da Listagem 3.10 e salve o mesmo em um arquivo chamado ex10cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.10. Voc obter os resultados indicados na Figura 3.12.
Aps encerrada a execuo do lao for, a execuo segue normalmente para o comando seguinte ao encerramento do
lao for. Tambm podemos utilizar a instruo break, dentro da lao for, para encerr-lo e desviar a execuo para o
primeiro comando aps o encerramento do lao. Normalmente a instruo break colocada dentro de uma instruo
if, de tal maneira que a mesma somente ser executada se uma determinada condio for alcanada.
A Instruo While
A instruo while executa um ou mais comandos enquanto uma determinada condio
for verdadeira. A condio testada no incio do lao. Se a condio for verdadeira o(s) IMPORTANTE: Os
comando(s) do lao so executados. Ao chegar no final do lao a execuo volta para o comandos de dentro do
teste no incio do lao while. Se a condio continuar verdadeira o(s) comando(s) so lao devem ser capazes
executados novamente e o processo se repete, at que a condio no incio do lao se de tornar a condio falsa
torne falsa. Quando a condio se torna falsa, a execuo pula para o primeiro comando em um determinado
aps o final do lao while. A seguir temos a sintaxe para o comando while: momento, pois caso
contrrio o lao
while (condio) continuar a ser
{ executado infinitamente.
comando1 Neste caso teremos criado
comando2 um lao infinito, no qual
o programa ficar
...
executando,
comandon
normalmente, at
} congelar.
www.juliobattisti.com.br 114
CAPTULO 2: ENTENDENDO O CLR
Uma caracterstica importante da instruo while que, se no incio do lao, a condio j for falsa, os comandos do
interior do lao no sero executados nem uma nica vez.
Vamos a um exemplo de utilizao da instruo While. No exemplo da Listagem 3.11 utilizamos a funo While para
determinar a soma dos n primeiros nmeros inteiros. O valor de n informado pelo usurio.
using System;
class ex11cap3
{
// Exemplo 11 Captulo 3.
// Instruo while.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
int n;
int i;
int soma;
115 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
soma = 0;
i=1;
while (i<=n)
{
soma=soma+i;
i=i+1; //IMPORTANTSSIMO
}
Note a observao: //IMPORTANTSSIMO. Se no colocssemos essa linha i=i+1, a varivel i no seria incrementada
a cada passo do lao e, portanto, o teste (i<=n) nunca se tornaria falso, o que faria com que o lao ficasse executando
infinitamente.
Digite o exemplo da Listagem 3.11 e salve o mesmo em um arquivo chamado ex11cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.11. Digite o valor 50. Voc obter os resultados indicados na Figura 3.13.
www.juliobattisti.com.br 116
CAPTULO 2: ENTENDENDO O CLR
Repita a execuo do programa. Agora digite 85. Voc obter os resultados indicados na Figura 3.14.
A Instruo do/while
Com a instruo do/while deslocamos o teste para o final do lao. Com isso estamos garantindo que os comandos no
interior do lao sero executados pelo menos uma vez, j que a condio somente ser avaliada no final do lao, aps
os comandos terem sido executados.
do
{
comando1
comando2
...
comandon
}
while (teste)
117 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
using System;
class ex12cap3
{
// Exemplo 12 Captulo 3.
// Instruo do/while.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
// Declarao da varivel.
int i;
do
www.juliobattisti.com.br 118
CAPTULO 2: ENTENDENDO O CLR
{
Console.Write(Digite um valor menor do que 10 ->);
String Aux1 = Console.ReadLine();
i = Convert.ToInt32(Aux1);
}
while (i>=10);
Console.WriteLine(***********************************************);
Console.WriteLine(AGORA SIM VOC DIGITOU UM VALOR MENOR DO QUE 10);
Console.WriteLine(***********************************************);
Console.WriteLine(VALOR DIGITADO > {0},i);
Console.WriteLine(***********************************************);
}
}
Digite o exemplo da Listagem 3.12 e salve o mesmo em um arquivo chamado ex12cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.12. Digite o valor 25 e pressione ENTER. Observe que o programa
solicita novamente que seja digitado um valor menor do que 10. Digite 50. Mesma coisa. Agora digite 8. Voc obter
os resultados indicados na Figura 3.15.
119 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
A Instruo Foreach
Esta instruo j uma velha conhecida da turma do Visual Basic. A instruo foreach utilizada para percorrer todos
os elementos de uma determinada coleo. Tambm podemos utilizar esta instruo para percorrer todos os elementos
de um array de elementos, uma vez que um array no deixa de ser uma coleo de elementos do mesmo tipo.
A seguir um exemplo no qual utilizamos a instruo foreach para exibir os elementos de um array de strings.
using System;
class ex13cap3
{
// Exemplo 13 Captulo 3.
// Instruo foreach.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
}
}
Digite o exemplo da Listagem 3.13 e salve o mesmo em um arquivo chamado ex13cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.13. Voc obter os resultados indicados na Figura 3.16.
www.juliobattisti.com.br 120
CAPTULO 2: ENTENDENDO O CLR
O primeiro comando percorre os elementos do array nomes. O segundo comando exibe o valor de cada elemento.
Vamos a mais um exemplo de utilizao de foreach para percorrer os elementos de uma coleo. Dentro do namespace
System, temos a classe System.Environment. Dentro desta classe temos um mtodo chamado GetLogicalDrives. Este
mtodo retorna um array de strings contendo o nome dos drives lgicos do computador. Depois utilizaremos foreach
para percorrer os elementos do array de strings retornado por GetLogicalDrives.
using System;
class ex14cap3
{
// Exemplo 14 Captulo 3.
// Instruo foreach.
// Mtodo Environment.GetLogicalDrives()
// Por: Jlio Battisti
121 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
}
}
Digite o exemplo da Listagem 3.14 e salve o mesmo em um arquivo chamado ex14cap3.cs, na pasta C:\ExCsharp\cap3.
Compile e execute o exemplo da Listagem 3.14. Voc obter os resultados indicados na Figura 3.17.
www.juliobattisti.com.br 122
CAPTULO 2: ENTENDENDO O CLR
break
continue
goto (No, goto no! Tem sim. Mas no se assuste.)
return
throw
A Instruo Break
Sintaxe:
break;
A instruo break utilizada para sair de um lao switch, while, do/while, for ou foreach. A execuo passa para o
primeiro comando aps o final do lao onde o break foi executado. Se colocarmos o break fora de um dos laos
citados, obteremos um erro de compilao.
A Instruo Continue
Dentro de um lao, quando encontrada uma instruo continue, os demais comandos do lao so ignorados e o lao
executado novamente, dependendo do valor do teste. A diferena entre a instruo break e a instruo continue que
o break sai definitivamente do lao, passando a execuo para o comando imediatamente aps o lao; enquanto o
continue apenas suspende os comandos restantes e continua a execuo do lao, at que o mesmo seja encerrado.
A Instruo Goto
A utilizao da instruo goto conhecida de longa data. Podemos utilizar a instruo goto para saltar diretamente
para um rtulo definido no cdigo do programa. Um rtulo definido da seguinte maneira:
nome_do_rtulo:
Porm esta prtica altamente desaconselhada. Quem no lembra dos famosos programas macarro da poca do Basic.
Um programa macarro o que utiliza muitas instrues goto, onde a execuo fica pulando de uma parte para outra do
123 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
programa. O C# desencoraja o uso do goto, aplicando algumas restries para a utilizao do mesmo. Por exemplo, no
podemos utilizar goto para deslocar a execuo para dentro de um bloco de comandos, como por exemplo um for ou while.
A Instruo Return
Esta instruo, normalmente, utilizada dentro de uma funo. A instruo return retorna o controle do programa
para o comando seguinte ao que fez a chamada funo e pode tambm retornar um valor calculado pela funo.
A Instruo Throw
Esta instruo utilizada no tratamento de excees e ser vista no prximo captulo.
Concluso
Neste captulo tratamos dos aspectos bsicos da linguagem C#. Como estaremos utilizando o C# para a criao da parte
programada das pginas ASP.NET a partir do Captulo 6, este captulo forma uma base importante para o restante do livro.
Iniciamos o captulo apresentando as caractersticas gerais do C# e o porqu de mais uma linguagem de programao.
Vimos que a proposta do C# ser simples como o Visual Basic porm to poderoso quanto o C++.
Em seguida apresentamos a estrutura bsica de um programa C#. Vimos que tudo (ou quase tudo) so classes e objetos.
Toda a lgica de programao no C# precisa estar contida dentro de um tipo definido, normalmente uma classe.
Em seguida tratamos dos diversos tipos de dados e estruturas existentes no C#. Vimos que existem tipos de valor
value type e tipos de referncia reference type. Aprendemos as diferenas entre estes dois tipos. Tambm aprendemos
a utilizar alguns mtodos da classe System.Convert para fazer converso entre tipos. Estudamos tipos mais complexos
como structs, strings e arrays.
Para finalizar o captulo apresentamos as instrues de fluxo de controle. Vimos que existem trs categorias de instrues:
Instrues de seleo.
Instrues de repetio.
Instrues de salto (jump).
Junto com os conceitos tericos apresentamos exemplos simples e completos, que o leitor pode compilar e testar para
ver o C# em funcionamento. O objetivo ao criarmos programas simples, de poucas linhas, salientar o tpico em
destaque. Desta maneira cada exemplo d nfase a um comando, instruo ou tcnica especficos.
Agora que j tratamos dos aspectos bsicos do C# podemos tratar de assuntos mais complexos como por exemplo o
tratamento de excees. Mas isso j assunto para o Captulo 4.
www.juliobattisti.com.br 124
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Introduo CAPTULO
Neste captulo continuaremos o nosso estudo da linguagem C#, sempre abordando
os elementos que sero utilizados para a construo de pginas ASP.NET nos
4
demais captulos do livro.
Built-in
Classes, Mtodos, Herana e
Aritmticos
Polimorfismo com o C#
Relacionais e Lgicos
Atribuio (Assignment)
in parameters
ref parameters
out parameters
125 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Operadores unrios: Este tipo de operador atua sobre um nico operando, como por exemplo o sinal de menos
(-) para tornar um nmero negativo, como por exemplo: -5.
Operadores binrios: Atua sobre dois operandos. O exemplo tpico so os operadores aritmticos, como por
exemplo: 2+3, 5*12.
Operador ternrio: Atua sobre trs operandos. Temos um nico operador ternrio em C#, que o ponto-de-
interrogao: ? Na verdade um ponto-de-interrogao metido a if, conforme veremos no exemplo a seguir.
Considere o exemplo:
int y;
int x;
y=22;
x = (y<25) ? 12 : 18;
Neste exemplo x igual a 12. O teste (y<25) avaliado. Como o teste verdadeiro (pois y=22), retornado o valor
antes dos dois-pontos. Se o teste fosse falso seria retornado o valor aps os dois-pontos. ou no um if disfarado?
Built-in Operators
Existem operadores chamados Built-in para os tipos de dados int, uint, long, ulong, float, double e decimal. Isso
significa que em operaes aritmticas bsicas entre operadores destes tipos no precisamos fazer nenhuma converso
explcita. Considere o exemplo a seguir:
www.juliobattisti.com.br 126
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Neste caso no precisamos fazer nenhum tipo de converso explcita (ou cast como chamada no C#), uma vez que
existe o operador de adio interno do prprio C# (Built-in) para o tipo int.
Se tentarmos compilar um programa que contm este trecho de cdigo, obteremos a mensagem de erro indicada na
Figura 4.1:
Para que o nosso exemplo possa funcionar precisamos fazer uma converso explcita, conforme indicado a seguir:
Operadores Aritmticos
Temos os operadores bsicos que toda linguagem tem, ou seja, os operadores para as quatro operaes matemticas,
conforme descrito na Tabela 4.1.
127 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Operador Descrio
+ Adio.
- Subtrao.
* Multiplicao.
/ Diviso.
% Retorna o resto da diviso.
Tambm temos o operador unrio +, o qual simplesmente indica que um nmero positivo. No altera o valor do
nmero. Por exemplo, os dois comandos a seguir so exatamente iguais e vlidos:
int x = -10;
int y = -x;
Console.WriteLine(y);
Neste caso o valor de y ser igual a 10. Isso mesmo, pois o inverte o sinal e, lembrando l do primrio, menos com
menos d mais.
Outra observao que o operador binrio +, alm da adio, tambm utilizado para concatenar strings. Observe o
exemplo da Listagem 4.1.
using System;
using System.Windows.Forms;
class ex1cap4
{
// Exemplo1 Captulo 4.
// Concatenando Strings.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
www.juliobattisti.com.br 128
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
string nome;
string sobrenome;
string nomecompleto;
MessageBox.Show(nomecompleto);
}
}
Digite o exemplo da Listagem 4.1 e salve o mesmo em um arquivo chamado ex1cap4.cs, na pasta C:\ExCsharp\cap4.
Compile e execute o exemplo da Listagem 4.1. Para o nome digite Jos e pressione ENTER. Para o sobrenome digite
da Silva e pressione ENTER. Voc obter os resultados indicados na Figura 4.2. D um clique no boto OK para
fechar a janela de mensagem.
Temos uma novidade neste exemplo: A utilizao do mtodo Show, da classe MessageBox, do namespace
System.Windows.Forms. Observe que no incio do programa adicionamos uma referncia ao namespace
System.Windows.Forms. Para exibir o nome completo utilizamos MessageBox.Show.
129 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Operador de Incremento: ++
O operador de incremento aumenta o valor de uma varivel em 1. O operador pode ser utilizado antes ou depois da
varivel. A melhor maneira de entendermos as diferenas entre o operador estar antes ou depois atravs de um
exemplo. Considere o seguinte trecho de cdigo:
int x = 10;
int y = x++;
x vale 11
y vale 10
Isso acontece porque, na segunda linha, primeiro y feito igual ao valor atual de x (10) e depois x incrementado
passando o seu valor para 11.
int x = 10;
int y = ++x;
x vale 11
y vale 11
Isso acontece porque, na segunda linha, primeiro o x incrementado, passando o seu valor para 11. Em seguida o novo
valor de x (11) atribudo para y.
www.juliobattisti.com.br 130
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Operador de Decremento
O operador de decremento diminui o valor de uma varivel em 1. O operador pode ser utilizado antes ou depois da
varivel. A melhor maneira de entendermos as diferenas entre o operador estar antes ou depois atravs de um
exemplo. Considere o seguinte trecho de cdigo:
int x = 10;
int y = x;
x vale 9
y vale 10
Isso acontece porque, na segunda linha, primeiro y feito igual ao valor atual de x (10) e depois x decrementado
passando o seu valor para 9.
int x = 10;
int y = x;
x vale 9
y vale 9
Isso acontece porque, na segunda linha, primeiro o x decrementado, passando o seu valor para 9. Em seguida o novo
valor de x (9) atribudo para y.
131 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Os operadores lgicos podem ser utilizados para a elaborao de testes mais complexos, inclusive testes compostos,
onde temos dois ou mais testes ligados por operadores lgicos. Os dois principais operadores lgicos so && (AND)
e o || (OR).
Quando temos uma expresso com vrios testes ligados por operadores AND, o resultado somente ser verdadeiro se
todos os testes forem verdadeiros. Basta que um nico teste seja falso, para que toda a expresso seja avaliada como
falsa False.
Neste exemplo, como todos os testes so verdadeiros, a expresso verdadeira e o comando ser executado. Agora
considere o trecho de cdigo a seguir:
Neste exemplo, como um dos testes falso (5<3), toda a expresso avaliada como False e o comando no interior do
lao NUNCA ser executado.
Quando temos uma expresso com vrios testes ligados por operadores OR, o resultado somente ser falso se todos os
testes forem falsos. Basta que um nico teste seja verdadeiro, para que toda a expresso seja avaliada como verdadeira
True.
www.juliobattisti.com.br 132
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Neste exemplo, como um dos testes verdadeiro (3==3), a expresso verdadeira e o comando ser executado. Agora
considere o trecho de cdigo a seguir:
Neste exemplo, como todos os testes so falsos, toda a expresso avaliada como False e o comando no interior do
lao NUNCA ser executado.
Operador Descrio
& Faz um AND bit a bit entre dois operandos.
| Faz um OR bit a bit entre dois operandos.
^ Faz um OR exclusivo (XOR) entre dois operandos.
&& Faz um AND lgico entre dois operandos.
|| Faz um OR lgico entre dois operandos.
int x;
int y;
x = 123;
y = x;
Os operadores de atribuio compostos, alm de fazerem a atribuio, realizam, ao mesmo tempo, uma determinada
operao. Para entendermos os operadores compostos vamos a um exemplo simples com o operador +=. Considere o
trecho de cdigo a seguir:
int x;
int y;
y = 10;
x = 5;
x += y;
133 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Precedncia de Operadores
Em expresses complexas, onde podemos ter diversos operandos e operadores, deve existir uma maneira de decidir
quais operaes sero realizadas em primeiro lugar. A ordem em que as operaes so realizadas determinada pelas
regras de precedncia de operadores.
As regrinhas bsicas so as mesmas das demais linguagens. Uma expresso avaliada da esquerda para a direita. Os
operadores de incremento e decremento aps a varivel tm maior prioridade (x++ ou x). Em seguida so avaliados
os operadores unrios (+ , -, !) e os operadores de incremento e decremento antes da varivel (++x e x). Na seqncia
vm os operadores de multiplicao (*), diviso (/) e resto da diviso (%). Por ltimo, os operadores de adio (+) e
subtrao(-).
Podemos alterar a ordem de precedncia dos operadores utilizando parnteses. Considere a expresso a seguir:
x = (y+z)*k
Neste caso, a adio (y+z) ser executada em primeiro lugar, pois a mesma est dentro do parnteses. O resultado da
adio ento multiplicado por k.
using System;
class ex2cap4
{
// Exemplo 2 Captulo 4.
www.juliobattisti.com.br 134
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
// Precedncia de operadores.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
int i=5;
int j=21;
int k=10;
int l=20;
int m=4;
int expr1;
int expr2;
int expr3;
// Alguns clculos
expr1 = i++*j+k-l*m++;
expr2 = (i++*j)+(k-l)*m++;
expr3 = (i++*j+k)-l*m++;
Console.WriteLine(***********************************);
Console.WriteLine(Valor de expr1: {0},expr1);
Console.WriteLine(Valor de expr2: {0},expr2);
Console.WriteLine(Valor de expr3: {0},expr3);
Console.WriteLine(***********************************);
}
}
135 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o exemplo da Listagem 4.2 e salve o mesmo em um arquivo chamado ex2cap4.cs, na pasta C:\ExCsharp\cap4.
Compile e execute o exemplo da Listagem 4.2. Voc obter os resultados indicados na Figura 4.3.
Observe que temos a mesma expresso, e apenas utilizamos parnteses para mudar a ordem de execuo dos elementos
da expresso. Vamos analisar a primeira expresso, na qual resultou em expr1 = 35.
expr1 = i++*j+k-l*m++;
Aqui no temos nenhum parnteses. Neste caso vale a ordem de precedncia dos operadores. Em primeiro, na ordem
de precedncia esto os operadores de incremento. Porm cabe lembrar que, para a expresso, como o operador de
incremento est aps a varivel, utilizado o valor original de cada varivel e somente depois disso que as variveis
so incrementadas. Ento, para a primeira expresso sero utilizados os seguintes valores:
i=5
j=21
k=10
l=20
m=4
expr1 = 5*21+10-20*4
expr1 = 105+10-80
no que obtemos:
expr1 = 35
www.juliobattisti.com.br 136
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
i=6
j=21
k=10
l=20
m=5
Se o operador de incremento estivesse antes das variveis, primeiro as mesmas seriam incrementadas e depois, j com
o novo valor, a expresso seria calculada.
Classes
O conceito de Classes fundamental para a orientao a objetos. Como o Framework .NET fortemente baseado nos
conceitos de orientao a objetos, bvio que o conceito de Classes igualmente importante para o Framework .NET.
Para sair do discurso terico e partir para a prtica basta analisar os exemplos que apresentamos at o momento. No
houve um nico exemplo em que no utilizamos pelo menos uma classe do .NET Framework Class Library (biblioteca
de classes do .NET). Conforme j havamos salientado, a biblioteca de classes do .NET nos oferece uma infinidade de
classes que podem ser utilizadas em nossos programas e pginas.
Atravs da utilizao de classes estamos viabilizando, na prtica, os princpios da herana e da reutilizao de cdigo.
Ao criarmos uma classe estamos, na verdade, definindo as caractersticas de um novo objeto. A definio da classe
contm os mtodos, propriedades, indexadores (novidade no .NET) e Eventos da classe. Tambm contm informao
sobre a visibilidade dos elementos da classe. A visibilidade define, por exemplo, se um mtodo da classe somente
poder ser utilizado por outros mtodos da prpria classe ou poder ser utilizado externamente classe.
Uma vez definida a classe, podemos utiliz-la em nossos programas e pginas. Para utilizar uma classe criamos e
instanciamos um objeto como sendo do tipo definido pela classe. A partir deste momento o objeto passa a ter acesso
a todos os elementos mtodos, propriedades, etc., da classe. Em outras palavras: o objeto herda todos os elementos
da classe.
Neste captulo aprenderemos a criar e utilizar classes no C#. Tambm aprenderemos a criar os diversos elementos que
compem uma classe.
137 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
using System;
class ClasseEx1
{
//Definio dos membros da classe.
class Ex3cap4
{
// Exemplo 3 Captulo 4.
// Criao de uma classe com dois membros.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
minhaclasse.contador = 125;
minhaclasse.teste = PRIMEIRA CLASSE COM O C#;
www.juliobattisti.com.br 138
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Digite o exemplo da Listagem 4.3 e salve o mesmo em um arquivo chamado ex3cap4.cs, na pasta C:\ExCsharp\cap4.
Compile e execute o exemplo da Listagem 4.3. Voc obter os resultados indicados na Figura 4.4.
Em primeiro lugar a definio da classe ClasseEx1, a qual feita no seguinte trecho de cdigo. Para definir uma nova
classe utilizamos a palavra class. A definio dos elementos da classe acontece dentro do abre e fecha chaves { }.
class ClasseEx1
{
//Definio dos membros da classe.
contador
teste
Estes campos so tambm chamados de membros da classe (na verdade membro qualquer elemento da classe, quer
seja uma propriedade, um campo, um mtodo, etc.). A palavra public faz com que estes campos possam ser acessados
fora da classe, isto , dentro do cdigo do programa que estiver utilizando a classe.
class Ex3cap4
139 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Esta a classe principal do nosso exemplo, a qual conter uma funo Main( ). Dentro da funo Main( ) criamos um
objeto chamado minhaclasse. Observe que este objeto definido como sendo do tipo da classe criada anteriormente,
ou seja, o objeto minhaclasse baseado na classe ClasseEx1. A declarao e instanciao da varivel objeto minhaclasse
feita na seguinte linha de cdigo:
Aps termos criado uma objeto baseado na classe ClasseEx1 podemos acessar os seus membros public. Para acessar
um membro utilizamos a seguinte sintaxe:
nome_da_classe.nome_do_membro
No trecho de cdigo a seguir alteramos o valor do campo contador e do campo teste, do objeto minhaclasse:
minhaclasse.contador = 125;
minhaclasse.teste = PRIMEIRA CLASSE COM O C#;
www.juliobattisti.com.br 140
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Propriedades (Properties)
As propriedades so um pouco diferentes dos campos, pois para definir e ler o valor de uma propriedade so definidos
mtodos especficos. Get para obter o valor da propriedade e Set para definir o valor da propriedade. Veremos como
criar e utilizar propriedades ainda neste captulo.
Constantes (Constants)
Uma constante um campo cujo valor no pode ser alterado. Aprenderemos a criar constantes ainda neste captulo.
Indexadores (Indexers)
Esta uma novidade do .NET. Um indexador um array. O indexador permite que, facilmente, possamos indexar um
objeto para facilitar a definio e obteno dos valores da classe.
Eventos (Events)
Um evento, normalmente, corresponde a uma ao do usurio, ao esta que detectada pela classe e dispara a
execuo de algum cdigo em resposta ao evento. o conceito de evento que todos ns j conhecemos. Por exemplo,
ao clicar em um boto de comando, disparado o evento Ao Clicar.
Agora aprenderemos a criar os diversos membros de uma classe. Mas antes vamos falar um pouco sobre Construtores
(Constructs) e Destrutores (Destructors).
O mtodo construtor criado por padro possui o mesmo nome da classe e no possui parmetros ClasseEx1( ). Se
tivssemos definido um mtodo construtor com parmetros, os mesmos teriam que ser passados no momento da
criao do objeto. Por exemplo, se o mtodo construtor deve receber um parmetro inteiro, a criao do objeto
minhaclasse ficaria assim:
141 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
A principal vantagem de utilizarmos um mtodo construtor personalizado que podemos garantir que o objeto seja
instanciado corretamente, atravs da execuo do cdigo necessrio instanciao do objeto, no mtodo construtor do
mesmo. Quando o usurio instancia um determinado objeto, o mtodo construtor do mesmo chamado e deve finalizar
a sua execuo sem erros; caso contrrio o usurio no poder utilizar o objeto. Este comportamento garante que o
cdigo de inicializao, contido no mtodo construtor do objeto, seja executado, antes que os demais membros do
objeto possam ser utilizados.
O mtodo construtor deve ter o mesmo nome da classe. Para provar que o mtodo construtor sempre executado,
vamos considerar o exemplo da Listagem 4.4.
using System;
class ClasseEx2
{
// Definio do construtor da classe.
// Observe que o nome do mtodo construtor
// deve ter o mesmo nome da classe.
public ClasseEx2()
{
Console.WriteLine(**************************************);
Console.WriteLine(EXECUTANDO OS COMANDOS DO CONSTRUTOR !);
Console.WriteLine(ESTES COMANDOS SERO EXECUTADOS SEMPRE);
Console.WriteLine(QUE UMA INSTNCIA DA CLASSE FOR CRIADA);
Console.WriteLine(**************************************);
}
class Ex4cap4
www.juliobattisti.com.br 142
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
// Exemplo 3 Captulo 4.
// Criao de uma classe com dois membros.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
}
}
Digite o exemplo da Listagem 4.4 e salve o mesmo em um arquivo chamado ex4cap4.cs, na pasta C:\ExCsharp\cap4.
Compile e execute o exemplo da Listagem 4.4. Voc obter os resultados indicados na Figura 4.5.
143 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
No nosso exemplo, no programa principal simplesmente criamos um objeto do tipo ClasseEx2. Ao instanciarmos o
objeto, foi disparado o seu mtodo construtor, o qual exibe algumas informaes na tela.
Alm de um mtodo construtor podemos criar um mtodo destrutor. O mtodo destrutor pode ser chamado para
executar alguns comandos quando a referncia ao objeto deixar de existir, ou seja, os comandos do mtodo destrutor
so chamados quando do encerramento do objeto.
Para criar um mtodo destrutor basta criar um mtodo com o mesmo nome da classe, porm precedido de um til (~).
Por exemplo, para criar um mtodo destrutor para a classe ClasseEx2( ), criada no exemplo anterior, utilizamos a
seguinte sintaxe:
~ClasseEx2()
{
comando1;
comando2;
...
comandon;
}
www.juliobattisti.com.br 144
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Parmetros In: Este tipo de parmetro o mais conhecido. utilizado para passarmos o valor de uma varivel
para o mtodo. Um inconveniente deste tipo de parmetro que o mtodo no pode alterar o valor da varivel,
uma vez que somente foi passado o valor da varivel e no uma referncia para a mesma. O parmetro definido
no mtodo inicializado com uma cpia do valor da varivel passada como parmetro na chamada do mtodo.
Mais uma vez vamos fazer uso de um exemplo para entendermos a criao de mtodos e a utilizao de parmetros in.
using System;
public class ClasseEx3
{
// Definimos um mtodo para calcular o cubo de
// uma varivel passada como parmetro para o mtodo.
int auxint;
auxint = valor;
valor = 6;
return auxint*auxint*auxint;
}
class Ex5cap4
145 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
// Exemplo 5 Captulo 4.
// Criao de uma classe com um mtodo
// que calcula o cubo de um nmero inteiro.
// Parmetros in.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
int valor;
// Exibio do resultado.
Console.WriteLine(*****************************************);
Console.WriteLine(O NMERO DIGITADO FOI -> {0},valor);
Console.WriteLine(*****************************************);
Console.WriteLine(ELEVADO AO CUBO -> {0},minhaclasse.calcula_cubo(valor));
Console.WriteLine(*****************************************);
Console.WriteLine(VALOR ORIGINAL DA VARIVEL VALOR -> {0},valor);
Console.WriteLine(*****************************************);
}
}
www.juliobattisti.com.br 146
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Digite o exemplo da Listagem 4.5 e salve o mesmo em um arquivo chamado ex5cap4.cs, na pasta C:\ExCsharp\cap4.
Compile e execute o exemplo da Listagem 4.5. Voc obter os resultados indicados na Figura 4.6.
Vamos iniciar pela definio de um mtodo para calcular o cubo de um nmero passado como parmetro. Isso feito
pelo trecho de cdigo a seguir:
int auxint;
auxint = valor;
valor = 6;
return auxint*auxint*auxint;
}
147 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O mtodo recebe um parmetro do tipo inteiro chamado valor. Como o parmetro passado por valor, o mtodo
recebe uma cpia do valor da varivel e no uma referncia para a mesma. Neste caso temos um parmetro in. Dentro
do mtodo declaramos uma varivel do tipo int chamada auxint. Atribumos o valor recebido como parmetro para a
varivel auxint, atravs do comando:
auxint = valor;
Em seguida modificamos o valor da varivel recebida como parmetro. Fizemos isso para provar que esta modificao no
altera o valor da varivel original, definida no programa principal. Este fato pode ser comprovado na Figura 4.6, onde a
varivel original continua com o valor digitado pelo usurio, ou seja, a alterao feita no mtodo calcula_cubo no afetou a
varivel original. Este o comportamento esperado, uma vez que o parmetro foi passado por valor e no por referncia.
A ltima linha do mtodo faz o clculo, retornando o valor passado (agora armazenado na varivel auxint), elevado ao cubo.
No programa principal declaramos e instanciamos uma varivel chamada minhaclasse, a qual do tipo ClasseEx3.
Isto feito com a seguinte linha de cdigo:
Uma vez criado um objeto do tipo ClasseEx3 temos acesso ao mtodo calcula_cubo(valor), ou seja:
minhaclasse.calcula_cubo(valor), o qual utilizado na seguinte linha de cdigo:
Este um exemplo simples mas que salienta a criao e utilizao de um mtodo pblico. Tambm comprovamos que
as alteraes feitas em um parmetro passado por valor no afetam o valor da varivel no programa principal.
Parmetros ref: Quando utilizamos parmetros do tipo ref, como o prprio nome sugere, passada uma referncia
para o parmetro e no somente o valor do mesmo. Na prtica isto significa que, se o mtodo alterar o valor do
parmetro, esta alterao ter efeito na varivel original, no programa principal. Vamos utilizar o mesmo
exemplo anterior, porm apenas modificando o tipo de parmetro. A vamos conferir se o valor da varivel
original, no programa principal, foi modificado.
using System;
public class ClasseEx4
{
// Definimos um mtodo para calcular o cubo de
// uma varivel passada como parmetro para o mtodo.
www.juliobattisti.com.br 148
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
int auxint;
auxint = valor;
valor = 6;
return auxint*auxint*auxint;
}
class Ex6cap4
{
// Exemplo 6 Captulo 4.
// Criao de uma classe com um mtodo
// que calcula o cubo de um nmero inteiro.
// Parmetros ref.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
149 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
int valor;
// Exibio do resultado.
Console.WriteLine(*****************************************);
Console.WriteLine(O NMERO DIGITADO FOI -> {0},valor);
Console.WriteLine(*****************************************);
Console.WriteLine(ELEVADO AO CUBO -> {0},minhaclasse.calcula_cubo(ref valor));
Console.WriteLine(*****************************************);
Console.WriteLine(VALOR ORIGINAL DA VARIVEL VALOR -> {0},valor);
Console.WriteLine(*****************************************);
}
}
Digite o exemplo da listagem 4.6 e salve o mesmo em um arquivo chamado ex6cap4.cs, na pasta C:\ExCsharp\cap4.
Compile e execute o exemplo da listagem 4.6. Voc obter os resultados indicados na Figura 4.7.
www.juliobattisti.com.br 150
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Em primeiro lugar, na definio do mtodo calcula_cubo, utilizamos a palavra ref para definir que o parmetro ser
passado por referncia, conforme indicado no trecho a seguir:
int auxint;
auxint = valor;
valor = 6;
return auxint*auxint*auxint;
}
Neste caso, como o parmetro est sendo passado por referncia, a alterao feita no parmetro valor ter reflexos na
varivel valor no programa principal, o que pode ser comprovado pelos resultados exibidos na Figura 4.7.
Quando passamos um parmetro por referncia, na verdade estamos passando o endereo da varivel. Por isso quando
o mtodo altera o valor da varivel passada como parmetro est, na prtica, alterando o valor da varivel original.
Tambm importante salientar que no momento de utilizarmos o mtodo, a palavra ref deve ser colocada antes do
parmetro que est sendo passado, conforme indicado na linha de cdigo a seguir:
Parmetros out: Um parmetro do tipo out utilizado para que o mtodo possa passar um resultado de volta
para o programa que fez a chamada ao mtodo. O programa que est chamando o mtodo no precisa inicializar
a varivel que ser retornada.
151 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
using System;
public class ClasseEx4
{
// Definimos um mtodo para calcular o cubo de
// uma varivel passada como parmetro para o mtodo.
class Ex7cap4
{
// Exemplo 7 Captulo 4.
// Criao de uma classe com um mtodo
// que calcula o cubo de um nmero inteiro.
// Parmetros out.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
www.juliobattisti.com.br 152
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
int valor;
int valoraocubo;
minhaclasse.calcula_cubo(valor,out valoraocubo);
// Exibio do resultado.
Console.WriteLine(*****************************************);
Console.WriteLine(O NMERO DIGITADO FOI -> {0},valor);
Console.WriteLine(*****************************************);
Console.WriteLine(ELEVADO AO CUBO -> {0},valoraocubo);
Console.WriteLine(*****************************************);
Console.WriteLine(VALOR ORIGINAL DA VARIVEL VALOR -> {0},valor);
Console.WriteLine(*****************************************);
}
}
Digite o exemplo da Listagem 4.7 e salve o mesmo em um arquivo chamado ex7cap4.cs, na pasta C:\ExCsharp\cap4.
Compile e execute o exemplo da Listagem 4.7. Voc obter os resultados indicados na Figura 4.8.
153 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Novamente mudamos o mtodo calcula_cubo. Agora o mtodo recebe um parmetro inteiro por valor e retorna o cubo
deste parmetro atravs do parmetro valoraocubo. O parmetro valoraocubo definido como um parmetro de
retorno ou sada (out), pelo uso da palavra out. O valor que deve ser retornado atribudo ao parmetro valoraocubo
pelo cdigo do mtodo, conforme indicado no fragmento de cdigo a seguir:
valoraocubo = valor*valor*valor;
}
Tambm importante salientar a utilizao da palavra void antes do nome do mtodo. O void informa que no ser
retornado nenhum valor pelo prprio mtodo. O valor ser retornado atravs da utilizao de um parmetro do tipo out.
A utilizao do mtodo calcula_cubo, no programa principal, tambm diferente dos exemplos anteriores. Neste
exemplo primeiro declaramos uma varivel do tipo int:
int valoraocubo;
Esta varivel receber o valor retornado pelo mtodo calcula_cubo. Em seguida fazemos uma chamada ao mtodo
calcula_cubo, passando como primeiro parmetro o valor digitado pelo usurio e o segundo parmetro o nome da
varivel que receber o valor de retorno, conforme indicado no cdigo a seguir:
minhaclasse.calcula_cubo(valor,out valoraocubo);
www.juliobattisti.com.br 154
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Para vermos o princpio do polimorfismo em ao vamos a um exemplo prtico. Criaremos uma classe chamada
Funcionrios, na qual definimos um mtodo chamado calcula_salario. Depois criaremos uma classe baseada na classe
Funcionrios, a qual faz um override do mtodo calcula_salrio.
using System;
public class ClasseFuncionarios
{
// Definimos um mtodo para calcular o salrio
// com base no cargo que foi passado como parmetro.
switch (cargo)
{
case gerente:
return 2500;
case diretor:
return 4500;
case funcionario:
return 1500;
default:
return 1500;
}
}
155 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
class Ex8cap4
{
// Exemplo 8 Captulo 4.
// Exemplo de override de mtodo.
// Por: Jlio Battisti
www.juliobattisti.com.br 156
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
Console.WriteLine(********************************************);
Console.WriteLine(RESULTADOS DO MTODO ORIGINAL);
Console.WriteLine(VALOR DO SALRIO PARA {0}, ->
{1},aux1,FuncionarioOriginal.calcula_salario(aux1));
}
}
157 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
IMPORTANTE: Alguns comandos aparecem divididos em duas linhas, por questo de espao para exibio. Estes comandos
devem ser digitados em uma nica linha. A seguir temos um exemplo de um comando que est dividido em duas linhas por
questes de espao:
Digite o exemplo da Listagem 4.8 e salve o mesmo em um arquivo chamado ex8cap4.cs, na pasta C:\ExCsharp\cap4.
Compile e execute o exemplo da Listagem 4.8. Voc obter os resultados indicados na Figura 4.9.
Inicialmente criamos uma classe ClasseFuncionarios, na qual criamos um mtodo chamado calcula_salario. Este
mtodo recebe um parmetro do tipo string e retorna o valor do salrio correspondente ao cargo passado como parmetro
para o mtodo. Utilizamos a palavra virtual para informar que este mtodo pode ser redefinido (override) em classes
derivadas.
Em seguida criamos uma classe chamada HerdaDeFuncionarios. Esta classe baseada na classe Classefuncionarios.
Observe que para definir uma classe como sendo baseada em outra, utilizamos a sintaxe indicada a seguir:
simplesmente colocamos dois-pontos (:) aps o nome da classe e o nome da classe base.
Dentro da classe HerdaDeFuncionarios utilizamos a palavra override para redefinir o mtodo calcula_salario, conforme
indicado no trecho de cdigo a seguir:
www.juliobattisti.com.br 158
CAPTULO 4: CLASSES, MTODOS, HERANA E POLIMORFISMO COM O C#
switch (cargo)
{
case gerente:
return 3000;
case diretor:
return 4000;
case funcionario:
return 2000;
default:
return 1000;
}
}
Concluso
Iniciamos o captulo falando de operadores e precedncia de operadores. Tratamos das diversas categorias de operadores
e apresentamos alguns exemplos de utilizao dos mesmos.
Em seguida comeamos a aprender como implementar, na prtica, os conceitos de orientao a objetos com o C#.
Aprendemos a criar classes. Tambm falamos sobre mtodos construtores e destrutores.
Na seqncia tratamos da criao de mtodos, dos diferentes tipos de parmetros que podem ser passados para um
mtodo, e para finalizar tratamos do override de mtodos.
No prximo captulo finalizaremos o nosso estudo bsico da linguagem C#. Veremos tpicos como o tratamento de
excees e classes e mtodos para operaes matemticas e outras operaes bsicas no C#. A partir do Captulo 6
iniciaremos o nosso estudo de ASP.NET.
159 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Introduo CAPTULO
Neste captulo veremos mais alguns tpicos do C#, tpicos estes que sero
utilizados na construo de pginas ASP.NET nos demais captulos do livro.
Quando acontecem erros, o programa deve ser capaz de tratar os mesmos de uma
maneira elegante. Por exemplo, se o usurio der um comando para gravar no
disquete e no existir um disquete no drive, o programa deve ser capaz de
interceptar e interpretar este erro e emitir uma mensagem para que o usurio
insira um disquete e repita o comando. No seria nada elegante se o programa
simplesmente fechasse devido a um erro deste tipo. Para fazer com que nossos
programas sejam capazes de lidar bem com situaes como a descrita anteriormente
devemos fazer o tratamento de excees. Neste captulo vamos aprender a fazer o
tratamento de excees com o C#.
Com este captulo encerramos o nosso estudo dos aspectos bsicos da linguagem
C#. Estudamos algumas das classes disponveis no .NET Framework Class Li-
brary. Existem, sem exagero, literalmente, milhares de classes e mtodos no .NET
Framework Class Library. Abordamos os elementos bsicos da linguagem,
elementos estes que iremos utilizar na construo de pginas ASP.NET nos demais
captulos deste livro.
www.juliobattisti.com.br 160
CAPTULO 5: TPICOS DIVERSOS EM C#
E: Este campo retorna o valor do nmero e, o qual a base para os logartmos neperianos. O valor do nmero
e 2,7182818284590452354. O valor retornado do tipo double.
PI: Este campo retorna o valor da constante PI, cujo valor 3.14159265358979323846. O valor retornado do
tipo double.
Vamos apresentar um exemplo que ilustra a utilizao da classe System.Math e dos campos E e PI. Observe o exemplo
da Listagem 5.1.
using System;
class ex1cap5
{
// Exemplo1 - Captulo 5.
// Campos da classe System.Math.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
}
}
161 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o exemplo da Listagem 5.1 e salve o mesmo em um arquivo chamado ex1cap5.cs, na pasta C:\ExCsharp\ cap5.
Compile e execute o exemplo da Listagem 5.1. Voc obter os resultados indicados na Figura 5.1.
Como a classe Math faz parte do namespace System, simplesmente utilizamos Math. E para fazer referncia ao campo
E da classe Math. O mesmo vlido para o campo PI.
Se utilizarmos a nomenclatura completa, conforme indicado no trecho de cdigo a seguir, o resultado ser o mesmo:
Mtodo Abs System.Math.Abs(nmero): Este mtodo retorna o valor absoluto do nmero, ou seja, o mdulo
do nmero passado como parmetro. O nmero passado como parmetro pode ser de um dos seguintes tipos:
Decimal, Double, Int16, Int32, Int64, SByte ou Single.
Ex:
System.Math.Abs(-32.15) retorna 32,15.
Mtodo Acos System.Math.Acos(nmero): Este mtodo retorna o valor do ngulo em que o coseno o
nmero passado como parmetro. O valor passado como parmetro deve estar no intervalo de 1 at +1, que
so os valores vlidos para o coseno. O valor do ngulo retornado est em radianos. Em termos de radianos,
3,14 radianos equivalem a 180 graus. Para converter de radiano para graus s utilizar a seguinte frmula:
valor_em_graus = (valor_em_radianos*180)/PI
www.juliobattisti.com.br 162
CAPTULO 5: TPICOS DIVERSOS EM C#
Ex:
System.Math.Acos(-1)
System.Math.Acos(-0.5)
System.Math.Acos(0)
System.Math.Acos(0.5)
System.Math.Acos(1)
Vamos a um exemplo completo no qual utilizamos os mtodos Abs e Acos. Considere o exemplo da Listagem 5.2
using System;
class ex2cap5
{
// Exemplo2 - Captulo 5.
// Mtodos da classe System.Math.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
Console.WriteLine(*************************************************);
Console.WriteLine(VALOR ABSOLUTO DE -32.10 -> {0},Math.Abs(-32.10));
Console.WriteLine(*************************************************);
Console.WriteLine(UTILIZAO DO MTODO ACOS);
Console.WriteLine(*************************************************);
Console.WriteLine(NGULO PARA COS = -1 -> {0},Math.Acos(-1));
Console.WriteLine(NGULO PARA COS = -0,5 -> {0},Math.Acos(-0.5));
Console.WriteLine(NGULO PARA COS = 0 -> {0},Math.Acos(0));
Console.WriteLine(NGULO PARA COS = 0.5 -> {0},Math.Acos(0.5));
Console.WriteLine(NGULO PARA COS = 1 -> {0},Math.Acos(1));
163 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Console.WriteLine(*************************************************);
Console.WriteLine(*************************************************);
Console.WriteLine(CONVERSO DOS NGULOS PARA GRAUS);
Console.WriteLine(*************************************************);
Console.WriteLine(NGULO PARA COS = -1 -> {0},((Math.Acos(-1)*180)/Math.PI));
Console.WriteLine(NGULO PARA COS = -0,5 -> {0},((Math.Acos(-0.5)*180)/Math.PI));
Console.WriteLine(NGULO PARA COS = 0 -> {0},((Math.Acos(0)*180)/Math.PI));
Console.WriteLine(NGULO PARA COS = 0.5 -> {0},((Math.Acos(0.5)*180)/Math.PI));
Console.WriteLine(NGULO PARA COS = 1 -> {0},((Math.Acos(1)*180)/Math.PI));
Console.WriteLine(*************************************************);
}
}
Neste exemplo, primeiro exibimos os valores dos ngulos em radianos, depois utilizamos a frmula para converso de
radianos para graus, que simplesmente multiplicar por 180 e dividir por PI. Observe que, para obter o valor do PI,
utilizamos o campo PI da classe System.Math.
Digite o exemplo da Listagem 5.2 e salve o mesmo em um arquivo chamado ex2cap5.cs, na pasta C:\ExCsharp\cap5.
Compile e execute o exemplo da Listagem 5.2. Voc obter os resultados indicados na Figura 5.2.
Mtodo Asin System.Math.Asin(nmero): Este mtodo retorna o valor do ngulo em que o seno o nmero
passado como parmetro. O valor passado como parmetro deve estar no intervalo de 1 at +1, que so os
valores vlidos para o seno. O valor do ngulo retornado est em radianos. Em termos de radianos, 3,14
radianos equivalem a 180 graus. Para converter de radiano para graus s utilizar a seguinte frmula:
valor_em_graus = (valor_em_radianos*180)/PI
Ex:
System.Math.Asin(-1)
System.Math.Asin(-0.5)
System.Math.Asin(0)
System.Math.Asin(0.5)
System.Math.Asin(1)
www.juliobattisti.com.br 164
CAPTULO 5: TPICOS DIVERSOS EM C#
Se no exemplo da Listagem 5.2, simplesmente trocssemos Acos por Asin, obteramos os resultados indicados na
Figura 5.3.
Figura 5.3: Executando o programa ex2cap5.exe, aps trocar Acos por Asin.
165 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Mtodo Atan System.Math.Atan(nmero): Este mtodo retorna o valor do ngulo em que a tangente o
nmero passado como parmetro. O valor do ngulo retornado est em radianos.
Ex:
System.Math.Atan(0)
System.Math.Atan(2)
Mtodo Atan2 System.Math.Atan2(nmero,nmero): Este mtodo retorna o valor do ngulo em que a tangente
igual diviso dos dois nmeros passados como parmetros. O valor do ngulo retornado est em radianos.
Ex:
System.Math.Atan2(6,2) retorna 1,24904577239825 radiano
System.Math.Atan2(4,2) retorna 1,10714871779409 radiano
Mtodo Ceiling System.Math.Ceiling(nmero): Este mtodo retorna o menor nmero inteiro que igual ou
maior do que o nmero passado como parmetro. O valor do parmetro do tipo double.
Ex:
System.Math.Ceiling(2.3498) retorna 3
System.Math.Ceiling(-2.3498) retorna -2 (lembre que 2 maior do que 3)
System.Math.Ceiling(5.0001) retorna 6
System.Math.Ceiling(-1.9999) retorna -1 (lembre que 1 maior do que 2)
Mtodo Cos System.Math.Cos(valor em radianos): Este mtodo retorna o coseno do valor que foi passado
como parmetro. O valor do parmetro deve estar em radianos. Por exemplo, ao invs de 180 graus, informamos
3,14 radianos (PI radianos).
Nos exemplos a seguir utilizamos o campo PI para passar os valores em radianos para o mtodo Cos.
Ex:
System.Math.Cos(Math.PI) retorna -1
System.Math.Cos(0) retorna 1
Mtodo Exp System.Math.Exp(nmero): Este mtodo retorna o nmero e (Math.E) elevado no expoente
passado como parmetro.
Ex:
System.Math.Exp(2) retorna 7,38905609893065
System.Math.Exp(0) retorna 1
Mtodo Floor System.Math.Floor(nmero): Este mtodo retorna o maior nmero inteiro que igual ou
menor do que o nmero passado como parmetro. O valor do parmetro do tipo double.
Ex:
System.Math.Floor(2.3498) retorna 2
System.Math.Floor(-2.3498) retorna -3 (lembre que 3 menor do que 2)
System.Math.Floor(5.0001) retorna 5
System.Math.Floor(-1.9999) retorna -2 (lembre que 2 menor do que 1)
Mtodo IEEERemainder System.Math. IEEERemainder(x,y): Este mtodo retorna o resto da diviso de x por y.
Ex:
System.Math. IEEERemainder(10,4)retorna 2
System.Math. IEEERemainder(250,6) retorna 4
System.Math. IEEERemainder(10,5)retorna 0
www.juliobattisti.com.br 166
CAPTULO 5: TPICOS DIVERSOS EM C#
Mtodo Log10 System.Math. Log10(nmero). O mtodo Log retorna o logaritmo na base 10, do nmero
passado como parmetro.
Ex:
System.Math. Log10(10) retorna 1
System.Math. Log10(100) retorna 2
System.Math. Log10(1000) retorna 3
Mtodo Max System.Math.Max(nmero,nmero): Este mtodo retorna o maior valor dentre dois valores
passados como parmetros. Os dois valores devem ser do mesmo tipo. Os tipos permitidos so os seguintes:
Byte, Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16, UInt32 ou UInt64.
Ex:
System.Math.Max(-5.-6) retorna -5
System.Math.Max(5,6) retorna 6
Mtodo Min System.Math.Min(nmero,nmero): Este mtodo retorna o menor valor dentre dois valores
passados como parmetros. Os dois valores devem ser do mesmo tipo. Os tipos permitidos so os seguintes:
Byte, Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16, UInt32 ou UInt64.
Ex:
System.Math.Min(-5.-6) retorna -6
System.Math.Min(5,6) retorna 5
Mtodo Sin System.Math.Sin(valor em radianos): Este mtodo retorna o seno do valor que foi passado como
parmetro. O valor do parmetro deve estar em radianos. Por exemplo, ao invs de 180 graus, informamos
3,14 radianos (PI radianos).
167 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Nos exemplos a seguir utilizamos o campo PI para passar os valores em radianos para o mtodo Sin.
Ex:
System.Math.Sin(Math.PI/2) retorna 1
System.Math.Sin(0) retorna 0
Mtodo Sign System.Math.Sign(nmero): Este mtodo retorna um valor indicando o sinal do nmero passado
como parmetro. O nmero passado como parmetro pode ser de um dos seguintes tipos: Decimal, Double,
Int16, Int32, Int64, SByte ou Single.
Ex:
System.Math.Sign(-32.15) retorna -1
System.Math.Sign(32.15) retorna 1
Mtodo Sqrt System.Math.Sqrt(nmero): Este mtodo retorna a raiz quadrada do nmero passado como
parmetro.
Ex:
System.Math.Sqrt(25) retorna 5
System.Math.Sqrt(144) retorna 12
Mtodo Tan System.Math.Tan(valor em radianos): Este mtodo retorna a tangente do valor que foi passado
como parmetro. O valor do parmetro deve estar em radianos. Por exemplo, ao invs de 180 graus informamos
3,14 radianos (PI radianos).
Nos exemplos a seguir utilizamos o campo PI para passar os valores em radianos para o
IMPORTANTE: No mtodo Tan.
existe a tangente para
valores onde o coseno Ex:
vale 0. Para 90 (PI/2) e
System.Math.Tan(Math.PI/3) retorna 1,73205080756888
270 graus (3PI/2) no System.Math.Tan(0) retorna 0
existe o valor da
Vamos a um exemplo completo no qual utilizamos todos os mtodos matemticos
tangente.
apresentados neste item. Considere o exemplo da Listagem 5.3
using System;
class ex3cap5
{
// Exemplo 3 - Captulo 5.
// Campos e Mtodos da classe System.Math.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
www.juliobattisti.com.br 168
CAPTULO 5: TPICOS DIVERSOS EM C#
Console.WriteLine(*************************************************);
Console.WriteLine(VALOR ABSOLUTO DE -32.10 -> {0},Math.Abs(-32.10));
Console.WriteLine(*************************************************);
Console.WriteLine(UTILIZAO DO MTODO Asin);
Console.WriteLine(*************************************************);
Console.WriteLine(NGULO PARA SIN = -1 -> {0},Math.Asin(-1));
Console.WriteLine(NGULO PARA SIN = -0,5 -> {0},Math.Asin(-0.5));
Console.WriteLine(NGULO PARA SIN = 0 -> {0},Math.Asin(0));
Console.WriteLine(NGULO PARA SIN = 0.5 -> {0},Math.Asin(0.5));
Console.WriteLine(NGULO PARA SIN = 1 -> {0},Math.Asin(1));
Console.WriteLine(*************************************************);
Console.WriteLine(*************************************************);
Console.WriteLine(CONVERSO DOS NGULOS PARA GRAUS);
Console.WriteLine(*************************************************);
Console.WriteLine(NGULO PARA SIN = -1 -> {0},((Math.Asin(-1)*180)/Math.PI));
Console.WriteLine(NGULO PARA SIN = -0,5 -> {0},((Math.Asin(-0.5)*180)/
Math.PI));
Console.WriteLine(NGULO PARA SIN = 0 -> {0},((Math.Asin(0)*180)/Math.PI));
Console.WriteLine(NGULO PARA SIN = 0.5 -> {0},((Math.Asin(0.5)*180)/Math.PI));
Console.WriteLine(NGULO PARA SIN = 1 -> {0},((Math.Asin(1)*180)/Math.PI));
Console.WriteLine(*************************************************);
Console.WriteLine(ANGULO PARA TAN = 3 -> {0},Math.Atan2(6,2));
Console.WriteLine(ANGULO PARA TAN = 2 -> {0},Math.Atan2(4,2));
Console.WriteLine(*************************************************);
169 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Console.WriteLine(*************************************************);
Console.WriteLine(COSENO PARA 180 graus PI-> {0},Math.Cos(Math.PI));
Console.WriteLine(COSENO PARA 0 graus -> {0},Math.Cos(0));
Console.WriteLine(*************************************************);
Console.WriteLine(e elevado ao quadrado-> {0},Math.Exp(2));
Console.WriteLine(e elevado na zero -> {0},Math.Exp(0));
Console.WriteLine(*************************************************);
Console.WriteLine(ARREDONDA UTILIZ. Floor -> {0},Math.Floor(2.3498));
Console.WriteLine(ARREDONDA UTILIZ. Floor -> {0},Math.Floor(-2.3498));
Console.WriteLine(ARREDONDA UTILIZ. Floor -> {0},Math.Floor(5.0001));
Console.WriteLine(ARREDONDA UTILIZ. Floor -> {0},Math.Floor(-1.9999));
Console.WriteLine(*************************************************);
Console.WriteLine(RESTO DA DIVISO 10/4 -> {0},Math.IEEERemainder(10,4));
Console.WriteLine(RESTO DA DIVISO 250/6 -> {0},Math.IEEERemainder(250,6));
Console.WriteLine(RESTO DA DIVISO 10/5 -> {0},Math.IEEERemainder(10,5));
Console.WriteLine(*************************************************);
Console.WriteLine(LOGARITMO NATURAL DE 10 -> {0},Math.Log(10));
Console.WriteLine(LOG DE 100 NA BASE 10 -> {0},Math.Log(100,10));
Console.WriteLine(LOG DE 16 NA BASE 2 -> {0},Math.Log(16,2));
Console.WriteLine(*************************************************);
Console.WriteLine(LOGARITMO DE 10 -> {0},Math.Log10(10));
Console.WriteLine(LOGARITMO DE 100 -> {0},Math.Log10(100));
Console.WriteLine(LOGARITMO DE 1000 -> {0},Math.Log10(1000));
Console.WriteLine(*************************************************);
Console.WriteLine(MXIMO ENTRE -5 E -6 -> {0},Math.Max(-5,-6));
Console.WriteLine(MXIMO ENTRE 5 E 6 -> {0},Math.Max(5,6));
Console.WriteLine(*************************************************);
www.juliobattisti.com.br 170
CAPTULO 5: TPICOS DIVERSOS EM C#
Console.WriteLine(*************************************************);
Console.WriteLine(2 ELEVADO NA 2 -> {0},Math.Pow(2,2));
Console.WriteLine(2 ELEVADO NA 3 -> {0},Math.Pow(2,3));
Console.WriteLine(2 ELEVADO NA 4 -> {0},Math.Pow(2,4));
Console.WriteLine(5 ELEVADO NA 2 -> {0},Math.Pow(5,2));
Console.WriteLine(*************************************************);
Console.WriteLine(ROUND EM 2,49 -> {0},Math.Round(2.49));
Console.WriteLine(ROUND EM 2,4599 -> {0},Math.Round(2.4599));
Console.WriteLine(10,4987564 COM 3 CASAS -> {0},Math.Round(10.4987564,3));
Console.WriteLine(*************************************************);
Console.WriteLine(SENO PARA 90 graus PI/2-> {0},Math.Sin(Math.PI/2));
Console.WriteLine(SENO PARA 0 graus -> {0},Math.Sin(0));
Console.WriteLine(*************************************************);
Console.WriteLine(SINAL PARA -32,15 -> {0},Math.Sign(-32.15));
Console.WriteLine(SINAL PARA 32,15 -> {0},Math.Sign(32.15));
Console.WriteLine(*************************************************);
Console.WriteLine(RAIZ QUADRADA DE 25 -> {0},Math.Sqrt(25));
Console.WriteLine(RAIZ QUADRADA DE 144 -> {0},Math.Sqrt(144));
Console.WriteLine(*************************************************);
Console.WriteLine(TANENTE PARA 60 graus PI-> {0},Math.Tan(Math.PI/3));
Console.WriteLine(TANENTE PARA 0 graus -> {0},Math.Tan(0));
}
}
Digite o exemplo da Listagem 5.3 e salve o mesmo em um arquivo chamado ex3cap5.cs, na pasta C:\ExCsharp\ cap5.
Compile e execute o exemplo da Listagem 5.3. Obteremos os resultados indicados a seguir:
171 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
*************************************************
VALOR ABSOLUTO DE -32.10 -> 32,1
*************************************************
UTILIZAO DO MTODO Asin
*************************************************
NGULO PARA SIN = -1 -> -1,5707963267949
NGULO PARA SIN = -0,5 -> -0,523598775598299
NGULO PARA SIN = 0 -> 0
NGULO PARA SIN = 0.5 -> 0,523598775598299
NGULO PARA SIN = 1 -> 1,5707963267949
*************************************************
CONVERSO DOS NGULOS PARA GRAUS
*************************************************
NGULO PARA SIN = -1 -> -90
NGULO PARA SIN = -0,5 -> -30
NGULO PARA SIN = 0 -> 0
NGULO PARA SIN = 0.5 -> 30
NGULO PARA SIN = 1 -> 90
*************************************************
NGULO PARA TAN = 3 -> 1,24904577239825
NGULO PARA TAN = 2 -> 1,10714871779409
*************************************************
ARREDONDA UTILIZ. Ceiling -> 3
ARREDONDA UTILIZ. Ceiling -> -2
ARREDONDA UTILIZ. Ceiling -> 6
ARREDONDA UTILIZ. Ceiling -> -1
*************************************************
COSENO PARA 180 graus PI-> -1
COSENO PARA 0 graus -> 1
*************************************************
*************************************************
e elevado ao quadrado -> 7,38905609893065
e elevado na zero -> 1
*************************************************
www.juliobattisti.com.br 172
CAPTULO 5: TPICOS DIVERSOS EM C#
173 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Vamos apresentar um exemplo onde utilizamos os principais construtores da estrutura System.DateTime. Considere o
exemplo da Listagem 5.4
using System;
class ex4cap5
{
// Exemplo 4 - Captulo 5.
// Construtores de System.DateTime.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
www.juliobattisti.com.br 174
CAPTULO 5: TPICOS DIVERSOS EM C#
}
}
Digite o exemplo da Listagem 5.4 e salve o mesmo em um arquivo chamado ex4cap5.cs, na pasta C:\ExCsharp\cap5.
Compile e execute o exemplo da Listagem 5.4. Voc obter os resultados indicados na Figura 5.4.
Neste exemplo utilizamos os trs construtores mais utilizados. Observe o cdigo a seguir:
Neste exemplo estamos utilizando um construtor no qual so passados trs valores: ano, ms e dia. Os valores para
hora, minuto e segundo so inicializados com zero, conforme pode ser confirmado na Figura 5.4.
Neste exemplo utilizamos um construtor no qual passamos, com nico parmetro, o nmero de milisegundos a partir
da menor data suportada pelo Framework .NET. Como passamos um valor zero, o mesmo ir exibir a menor data
possvel, que, conforme podemos confirmar pela sada do programa, : 1/1/0001 00:00:00.
175 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Neste exemplo utilizamos um construtor no qual so passados seis valores: ano, ms, dia, hora, minuto e segundo.
DateTime.MaxValue: Este campo retorna o valor da maior data/hora suportada pela estrutura DateTime. O
valor retornado : 31/12/9999 23:59:59, para o sistema de Data/Hora do Brasil.
DateTime.MinValue: Este campo retorna o valor da menor data/hora suportada pela estrutura DateTime. O
valor retornado : 1/1/0001 00:00:00, para o sistema de Data/Hora do Brasil.
Propriedade Descrio
Date Retorna apenas a parte referente data.
Day Retorna apenas o dia.
DayOfWeek Retorna um nmero que indica o dia da semana. O nmero varia de zero para o
Domingo, 1 para a segunda-feira, 2 para a tera-feira e assim por diante, at 6 para o
sbado.
DayOfYear Retorna um nmero que indica o dia do ano. Retorna 1 para 1 de Janeiro, 2 para 02 de
Janeiro e assim por diante, at 365 (ou 366 se for ano bissexto) para 31 de Dezembro.
Hour Retorna apenas a hora.
Minute Retorna apenas o minuto.
Month Retorna apenas o ms.
Now Retorna a Data e a Hora do sistema.
Second Retorna os segundos.
Year Retorna apenas o Ano.
www.juliobattisti.com.br 176
CAPTULO 5: TPICOS DIVERSOS EM C#
using System;
class ex5cap5
{
// Exemplo 5 - Captulo 5.
// Propriedades de System.Date.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
Console.WriteLine(****************************************);
Console.WriteLine(HORA DO SISTEMA -> {0},constrex1.Hour);
Console.WriteLine(MINUTO DO SISTEMA -> {0},constrex1.Minute);
Console.WriteLine(SEGUNDOS DO SISTEMA -> {0},constrex1.Second);
Console.WriteLine(ANO DO SISTEMA-> {0},constrex1.Year);
Console.WriteLine(MS DO SISTEMA-> {0},constrex1.Month);
Console.WriteLine(DIA DO SISTEMA-> {0},constrex1.Day);
Console.WriteLine(DATA COMPLETA -> {0},constrex1.Date);
Console.WriteLine(DIA DA SEMANA -> {0},constrex1.DayOfWeek);
Console.WriteLine(DIA DO ANO ->
{0},constrex1.DayOfYear);
}
}
177 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o exemplo da Listagem 5.5 e salve o mesmo em um arquivo chamado ex5cap5.cs, na pasta C:\ExCsharp\cap5.
Compile e execute o exemplo da Listagem 5.5. Voc obter os resultados indicados na Figura 5.5.
Nesta seo apresentaremos alguns mtodos e propriedades das classes System.IO.File e System.IO.FileInfo. Nos
demais captulos deste livro vamos utilizar novamente estas classes, alm da classe System.IO.Directory.
Alguns mtodos recebem caminhos como parmetros. Existem vrias maneiras de especificar um caminho. Pode ser
o caminho completo: C:\\Documentos\relatorio.doc. Pode ser o caminho para uma pasta: C:\\Documentos. Pode ser
um caminho relativo, em relao ao diretrio atual: Documentos\\Fiscais\2001. Pode ser um caminho de rede no
formato UNC (Universal Naming Convention). Por exemplo, para usar o formato UNC para acessar um arquivo
chamado vendas.doc, que est em uma pasta compartilhada chamada Vendas em um servidor chamado vendassrv,
www.juliobattisti.com.br 178
CAPTULO 5: TPICOS DIVERSOS EM C#
devemos utilizar o seguinte caminho: \\\\vendassrv\vendas\vendas.doc. Todo caminho UNC inicia com duas barras,
porm a barra invertida considerada um caractere especial e todo caractere especial deve ser precedido de uma barra
invertida. O mesmo comentrio vlido para os casos anteriores, onde ao invs de uma estamos utilizando duas
barras. Por isso cada barra invertida representada duas vezes.
Mtodo Descrio
AppendText Anexa texto a um arquivo j existente ou cria um novo arquivo se ainda no existir o
arquivo passado como parmetro.
Copy Efetua a cpia de um arquivo para uma pasta diferente ou para a mesma pasta com um
nome diferente. Podemos especificar se o arquivo deve ser substitudo caso o mesmo j
exista.
Create Cria um arquivo em uma pasta especificada como parmetro.
Delete Exclui um arquivo passado como parmetro. Caso o arquivo no exista, ser gerada uma
exceo.
Exists Determina se o arquivo passado como parmetro existe.
GetAttributes Obtm os atributos do arquivo passado como parmetro.
GetCreationTime Retorna a data e a hora em que o arquivo foi criado.
GetLastAccessTime Retorna a data e a hora em que o arquivo foi acessado pela ltima vez.
GetLastWriteTime Retorna a data e a hora em que foram gravadas informaes no arquivo, pela ltima vez.
Move Move o arquivo para uma nova localizao.
SetAttributes Define os atributos de um arquivo.
SetCreationTime Define a informao sobre a hora e a data em que o arquivo foi criado.
SetLastAccessTime Define a informao sobre a ltima data e hora em que o arquivo foi acessado.
SetLastWriteTime Define a informao sobre a ltima data e hora em que foram feitas gravaes no
arquivo.
Vamos apresentar um exemplo no qual utilizamos alguns mtodos da classe System.IO.File. Neste exemplo vamos
criar um arquivo chamado teste.txt. Este arquivo ser criado na pasta C:\. Depois utilizaremos alguns mtodos da
classe System.IO.File.
179 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
using System;
using System.IO;
class ex6cap5
{
// Exemplo 6 - Captulo 5.
// Mtodos de System.IO.File
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
File.Copy(C:\\autoexec.bat,C:\\teste.bat);
www.juliobattisti.com.br 180
CAPTULO 5: TPICOS DIVERSOS EM C#
}
}
Digite o exemplo da Listagem 5.6 e salve o mesmo em um arquivo chamado ex6cap5.cs, na pasta C:\ExCsharp\cap5.
Compile e execute o exemplo da Listagem 5.6. Voc obter os resultados indicados na Figura 5.6.
IMPORTANTE: Se o
arquivo C:\teste.bat j
existir, ser gerado o erro
de execuo indicado nas
Figuras 5.7 e 5.8.
181 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Tambm importante salientar que, para termos acesso classe File, fizemos referncia ao namespace System.IO no
incio do programa:
using System.IO;
Se no tivssemos feito esta referncia, ao invs de utilizar simplesmente File, teramos que utilizar o caminho completo:
System.IO.File
As consideraes sobre o caminho a ser fornecido como parmetro so as mesmas que foram feitas para a classe
System.IO.File.
Propriedade Descrio
Name Retorna o nome do arquivo.
Length Retorna o tamanho do arquivo ou pasta passado como parmetro.
www.juliobattisti.com.br 182
CAPTULO 5: TPICOS DIVERSOS EM C#
Propriedade Descrio
Directory Retorna uma instncia de um objeto do tipo Directory, a qual aponta para a pasta onde
est o arquivo.
DirectoryName Retorna o caminho completo para o arquivo passado como parmetro.
using System;
using System.IO;
class ex7cap5
{
// Exemplo 7 - Captulo 5.
// Propriedades de System.IO.FileInfo
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
183 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o exemplo da Listagem 5.7 e salve o mesmo em um arquivo chamado ex7cap5.cs, na pasta C:\ExCsharp\cap5.
Compile e execute o exemplo da Listagem 5.7. Voc obter os resultados indicados na Figura 5.9.
O Tratamento de Excees
Tratar excees de fundamental importncia para que um programa no seja encerrado inesperadamente. Uma
exceo pode acontecer durante o processamento do programa, quando algo inesperado acontece e deve ser tratado
pelo programa, para que o mesmo no seja encerrado sem que o usurio saiba o que est acontecendo. Dois exemplos
tpicos de excees:
As excees devem ser detectadas e opes devem ser oferecidas para o usurio do programa. Por exemplo, no caso do
disquete que no est no drive, a exceo deve ser detectada e o programa deve exibir uma mensagem solicitando que o
usurio insira um disquete no drive. Este procedimento muito mais amigvel do que simplesmente encerrar o programa.
www.juliobattisti.com.br 184
CAPTULO 5: TPICOS DIVERSOS EM C#
Outra grande vantagem do Framework .NET que o tratamento de excees padronizado, independentemente da
linguagem que est sendo utilizada. Uma exceo gerada em um componente escrito em C++ pode ser tratada em um
cliente escrito em C# e vice-versa.
Vamos apresentar um exemplo no qual utilizamos try e catch para fazer o tratamento de excees. O nosso programa
solicita que o usurio digite dois nmeros. Depois, o programa faz a diviso dos nmeros e exibe o resultado. Para
forar uma exceo vamos fornecer um valor zero para o segundo nmero, de tal forma que o programa, ao tentar
fazer uma diviso por zero, ir gerar uma exceo.
using System;
class ex8cap5
{
// Exemplo 8 - Captulo 5.
// Tratamento de excees com try e catch.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
try
185 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
int divisao;
// Clculo da diviso.
divisao = Convert.ToInt32(Aux1) / Convert.ToInt32(Aux2);
Digite o exemplo da Listagem 5.8 e salve o mesmo em um arquivo chamado ex8cap5.cs, na pasta C:\ExCsharp\cap5.
Compile e execute o exemplo da Listagem 5.8. Digite 10 para o numerador e 2 para o denominador. Voc obter os
resultados indicados na Figura 5.10.
www.juliobattisti.com.br 186
CAPTULO 5: TPICOS DIVERSOS EM C#
Observe que o programa executa normalmente. Agora vamos forar uma exceo, e para isso digitaremos 0 para o
segundo valor, forando uma diviso por zero. Vamos executar novamente o programa. Digite 10 para o primeiro valor
e 0 para o segundo. Voc obter os resultados indicados na Figura 5.11.
Neste segundo caso, ao tentar fazer uma diviso por zero, uma exceo ser gerada. Ao ser gerada a execuo, o
cdigo do bloco catch ser executado. O bloco catch recebe um parmetro do tipo Exception. Exception uma classe
do namespace System System.Exception. Uma das propriedades desta classe Message, a qual contm a mensagem
associada com a exceo. No nosso exemplo a mensagem : Attempted to divide by zero, o que confirma a nossa
tentativa de fazer uma diviso por zero.
187 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Existem classes que tratam excees mais especficas, como por exemplo:
System.OutOfMemoryException
System.OverFlowException
System.NullReferenceException
System.NotSupportedException
System.NotImplementedException
System.NotFiniteNumberException
System.MissingMethodException
System.MissingMemberException
System.MissingFieldException
System.MethodAccessException
System.MemberAccessException
System.InvalidProgramException
System.InvalidOperationException
System.InvalidCastException
System.IndexOutOfRangeException
System.FormatException
System.FieldAccessException
System.ExecutionEngineException
System.EntryPointNotFoundException
System.DuplicateWaitObjectException
System.DllNotFoundException
System.DivideByZeroException
Vamos utilizar algumas destas classes nos demais captulos deste livro.
www.juliobattisti.com.br 188
CAPTULO 5: TPICOS DIVERSOS EM C#
using System;
class ex9cap5
{
// Exemplo 9 - Captulo 5.
// Tratamento de excees com try e finally.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
try
int divisao;
// Clculo da diviso.
189 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
finally
{
Console.WriteLine(CDIGO EXECUTADO TENHA OU NO SIDO GERADA UMA EXCEO);
}
Digite o exemplo da Listagem 5.9 e salve o mesmo em um arquivo chamado ex9cap5.cs, na pasta C:\ExCsharp\cap5.
Compile e execute o exemplo da Listagem 5.9. Digite 10 para o numerador e 2 para o denominador. Voc obter os
resultados indicados na Figura 5.12. Observe que o cdigo do bloco finally foi executado, mesmo sem ter sido gerada
nenhuma exceo.
www.juliobattisti.com.br 190
CAPTULO 5: TPICOS DIVERSOS EM C#
Agora vamos forar uma exceo, e para isso digitaremos 0 para o segundo valor, forando uma diviso por zero.
Vamos executar novamente o programa. Digite 10 para o primeiro valor e 0 para o segundo. Na Figura 5.13 aberta
uma janela indicando que ocorreu uma exceo no programa.
Neste caso, como no havia um bloco catch, a exceo no foi tratada. Por isso surgiu a janela indicada na Figura 5.13.
D um clique em OK para fechar a janela de aviso e observe que o cdigo do bloco finally foi executado, mesmo tendo
sido gerada uma exceo, conforme indicado pela Figura 5.14:
191 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Neste caso temos que juntar os blocos catch e finally, em um arranjo conhecido como try catch finally. Vamos
alterar o exemplo anterior para termos uma estrutura try catch finally, de tal forma que as excees sejam tratadas
e tenhamos um cdigo que sempre executa no encerramento do programa.
using System;
class ex10cap5
{
// Exemplo10 - Captulo 5.
// Tratamento de excees com try - catch - finally.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
try
int divisao;
www.juliobattisti.com.br 192
CAPTULO 5: TPICOS DIVERSOS EM C#
// Clculo da diviso.
catch (Exception e)
{
Console.WriteLine(FOI GERADA A SEGUINTE EXCEO: + e.Message);
}
finally
{
Console.WriteLine(CDIGO EXECUTADO TENHA OU NO SIDO GERADA UMA EXCEO);
}
}
}
193 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o exemplo da Listagem 5.10 e salve o mesmo em um arquivo chamado ex10cap5.cs, na pasta C:\ExCsharp\cap5.
Compile e execute o exemplo da Listagem 5.10. Digite 10 para o numerador e 2 para o denominador. Voc obter os
resultados indicados na Figura 5.15. Observe que o cdigo do bloco finally foi executado, mesmo sem ter sido gerada
nenhuma exceo. Como no foi gerada exceo, o cdigo do bloco catch no foi executado.
Agora vamos forar uma exceo, e para isso digitaremos 0 para o segundo valor, forando uma diviso por zero.
Vamos executar novamente o programa. Digite 10 para o primeiro valor e 0 para o segundo. Na Figura 5.16 observamos
que a exceo foi identificada e a mensagem respectiva foi emitida. Isto indica que o cdigo do bloco catch foi
executado e, portanto, a exceo foi tratada. Tambm podemos observar que o cdigo do bloco finally foi executado,
mesmo tendo sido gerada uma exceo.
www.juliobattisti.com.br 194
CAPTULO 5: TPICOS DIVERSOS EM C#
Concluso
Neste captulo encerramos nosso estudo sobre os aspectos bsicos do C#. Estudamos os elementos da linguagem C#
que sero utilizados no restante do livro. Com esse captulo encerramos a Parte I do livro, na qual falamos sobre o
Framework .NET e sobre a linguagem C#. Estes captulos formam a base para o restante do livro. A partir do Captulo
6, com o qual iniciamos a Parte II deste livro, estaremos tratando da criao de pginas ASP.NET.
195 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
PARTE
2
Fundamentos do ASP.NET
www.juliobattisti.com.br 196
CAPTULO 6: UMA INTRODUO AO ASP.NET
Introduo CAPTULO
Na Parte I deste livro (Captulos de 1 a 5) tratamos dos conceitos bsicos do
Framework .NET e da linguagem C#. Neste captulo iniciamos a Parte II do livro,
6
na qual vamos apresentar esta nova verso da tecnologia ASP (Active Server Pages)
ASP.NET.
Ao final deste captulo voc dever estar apto a relacionar as principais melhorias
do ASP.NET em relao s verses anteriores. Voc tambm ser capaz de entender
a estrutura de uma pgina ASP.NET bem como a maneira com que as mesmas so
processadas pelo servidor IIS Internet Information Services.
197 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Menos de dois anos aps o lanamento do ASP 3.0, o qual faz parte do IIS 5.0 com o Windows 2000, a Microsoft lana
mais uma verso da tecnologia ASP Active Server Pages. Na verdade no apenas o lanamento de mais uma
verso. O ASP.NET est inserido em um contexto maior, que a iniciativa .NET da Microsoft. Alm de estar inserido
no contexto do .NET, a tecnologia ASP.NET apresenta enormes diferenas em relao ao ASP 3.0, o que no
permite que a caracterizemos simplesmente como um upgrade do ASP 3.0.
A tecnologia ASP.NET segue os mesmos princpios do Framework .NET, cujo principal objetivo facilitar o
desenvolvimento de aplicaes. No caso especfico do ASP.NET, aplicaes Web. Conforme veremos mais adiante,
com ASP.NET as aplicaes Web passam a usufruir de todos os recursos do Framework .NET.
A tecnologia ASP teve uma enorme aceitao por parte da comunidade de desenvolvedores. Para comprovar tal afirmao
basta conferir o nmero de sites que utilizam ASP. Esta aceitao no se deve somente fora de mercado da Microsoft,
mas tambm facilidade de desenvolvimento propiciada pela utilizao de ASP. Antes de falarmos sobre a nova
verso ASP.NET, vamos ver exatamente o que a tecnologia de Active Server Pages da Microsoft.
O contedo dos sites ficava armazenado em arquivos de cdigo HTML (.htm ou .html) nos servidores Web ou servidores
HTTP como tambm so conhecidos. O usurio utiliza um programa, o Browser, para acessar as pginas HTML. Com
essa combinao, uma pgina HTML era capaz de exibir, alm de texto, elementos grficos. Com isso a internet
passou a ser mais atraente e comeou a conquistar um nmero cada vez maior de usurios.
www.juliobattisti.com.br 198
CAPTULO 6: UMA INTRODUO AO ASP.NET
O problema da linguagem HTML que a mesma fornece contedo esttico, isto , no dinmico. Vamos exemplificar.
Se utilizamos o HTML para publicar uma lista de preos de um catlogo de produtos. Todo o contedo do catlogo
com a lista de preos faz parte do prprio cdigo HTML. Cada vez que tivermos que alterar um preo temos que editar
o arquivo HTML e salvar as alteraes. Somente aps fazermos isto que o usurio passar a ter acesso s modificaes.
Com o crescimento da Internet e o uso cada vez maior da rede para operaes de comrcio, ficou claro que a
tecnologia de pginas estticas do HTML no seria suficiente para a criao de sites e aplicaes Web que
suportassem o Comrcio Eletrnico.
Ento comearam a surgir tecnologias para a criao dinmica de contedo, a partir de informaes contidas em
bancos de dados e outras fontes de informaes. A tecnologia pioneira foi a dobradinha CGI com a linguagem Perl.
A Microsoft, como no poderia deixar de ser, resolveu entrar nesta briga. Em primeiro lugar lanou o seu prprio
servidor Web, que o IIS Internet Information Services. Por ser gratuito e devido grande base Windows instalada,
o IIS rapidamente foi adotado por uma grande parcela de sites. Com a verso 3 do IIS, a Microsoft lana a sua
tecnologia para a criao de pginas dinmicas, o ASP 1.0 Active Server Pages 1.0.
Com a tecnologia ASP, ao invs de pginas .htm ou .html, criamos pginas com a extenso .asp. Estas pginas contm,
alm de cdigo HTML, o chamado cdigo ASP, o qual pode realizar uma srie de operaes que tornam as pginas
dinmicas. Vamos utilizar o exemplo anterior, onde queramos construir um catlogo de preos. Com a tecnologia
ASP, podemos fazer com que a pgina, ao ser carregada, busque a lista de preos em um banco de dados, monte uma
pgina com estas informaes e retorne a pgina para o usurio, exibindo sempre os resultados mais atualizados. Na
Figura 6.2 temos uma viso desta nova fase, com contedo dinmico.
Alm de criar uma pgina que exibe as informaes mais atualizadas, podemos criar formulrios interativos, onde o
usurio pode inserir o cdigo ou nome de um produto e enviar tais informaes para o servidor IIS. Uma pgina ASP
199 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
recebe estas informaes, conecta com um banco de dados e faz uma pesquisa utilizando os critrios passados pelo
usurio. Uma vez encerrada a pesquisa, a pgina ASP retorna apenas os resultados que atendem os critrios da pesquisa.
Observe que agora, alm de receber informaes da Internet, o usurio tambm pode enviar informaes.
Pelo diagrama, podemos ver a possibilidade de o usurio enviar informaes para a Internet, e no apenas receber
informaes. Isto possibilitou o desenvolvimento de uma srie de servios, simplesmente impossveis de criar, apenas
com a utilizao de pginas criadas somente com HTML.
Para enviar informaes, o usurio preenche os campos de um formulrio (o qual criado com a utilizao de HTML) e,
ao clicar em um boto Enviar, os dados so enviados para o site da Web. Ao chegar no servidor Web, estes dados precisam
ser recebidos por um programa capaz de entender o formato dos dados e armazen-los em um Banco de dados.
Os primeiros programas, capazes de realizar esta tarefa, seguiam a especificao conhecida como CGI Common
Gateway Interface. Muitas aplicaes Web foram desenvolvidas, utilizando-se a especificao CGI, sendo que vrias
ainda continuam sendo utilizadas. A utilizao de Scripts desenvolvidos na linguagem Perl um exemplo de utilizao
de CGI. O Script recebe os dados enviados pelo formulrio, decodifica estes dados e armazena o resultado em um
Banco de dados. Embora bastante funcional, a utilizao de CGI comeou a apresentar alguns problemas, e com isso
novas alternativas foram surgindo. Est fora do escopo deste livro, discutir os problemas da utilizao de CGI.
Dentre as vrias alternativas que surgiram para a gerao de contedo dinmico, podemos citar a tecnologia de Active
Server Pages, a qual faz parte do servidor Web IIS (Internet Information Services), da Microsoft. Podemos criar uma
pgina ASP, capaz de receber os dados enviados por um formulrio e armazenar estes dados em um Banco de dados,
como por exemplo o Microsoft Access ou o Microsoft SQL Server.
Com a conexo de pginas com Bancos de dados, uma srie de possibilidades novas surgiu, como por exemplo:
www.juliobattisti.com.br 200
CAPTULO 6: UMA INTRODUO AO ASP.NET
Apesar das suas limitaes, um novo panorama desenhava-se na Internet, com a possibilidade da criao de sites mais
dinmicos, atravs da conexo com Bancos de dados. Apenas para exemplificar o funcionamento de uma pesquisa em
Banco de dados, atravs da Internet, observe a Figura 6.3.
Vamos analisar os passos executados, desde o momento em que o usurio preenche o critrio de pesquisa, at o
momento em que o resultado da consulta retornado:
O usurio acessa a pgina onde temos um formulrio para a digitao de um ou mais critrios de pesquisa. Por
exemplo, pode ser uma consulta a uma base dos CEPs de todo o Brasil. O usurio poderia digitar o nome da
Cidade, selecionar um Estado e digitar o nome ou parte do nome da Rua.
Aps preencher o(s) critrio(s) de pesquisa, o usurio clica em um boto Enviar ou Pesquisar. Os dados digitados
no formulrio so enviados para o servidor.
Um Script CGI, ou uma pgina ASP, no servidor, recebe os dados enviados pelo usurio. Com estes dados,
montado um comando (normalmente uma String SQL Structured Query Language), o qual vai efetuar a
consulta no Banco de dados. Aps montado o comando, o mesmo enviado para o Servidor de Banco de
dados (o qual pode ser uma mquina separada, ou pode estar instalado no prprio servidor Web).
O Servidor de Banco de dados recebe o comando de pesquisa, localiza um ou mais registros que atendam o(s)
critrio(s) de pesquisa e retorna o resultado para o Script CGI, ou para a Pgina ASP.
201 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Com o resultado retornado pelo Servidor de Banco de dados, o Script CGI, ou a Pgina ASP, monta uma
pgina HTML, normalmente no formato de uma tabela, e envia esta pgina HTML de volta para o Navegador
do cliente. Caso no seja encontrado nenhum registro que atenda o(s) critrio(s) especificado(s), retornada
uma pgina com uma mensagem de que no foi encontrado nenhum registro.
Veja que, ao mesmo tempo em que aumentaram as possibilidades de desenvolvimento, tambm aumentaram as
complexidades a serem gerenciadas, tanto na criao de pginas, quanto no gerenciamento dos sites. Observe que
ainda nem falamos de questes tais como segurana, proteo do Banco de dados contra acessos no autorizados, ou
at mesmo ataques de Hackers tentando roubar informao ou corromper a informao do Banco de dados.
A tecnologia ASP 3.0 possibilita a criao do formulrio de pesquisa descrito no nosso exemplo. Utilizando ASP 3.0
em conjunto com o padro COM/COM+ da Microsoft, podemos criar aplicaes Web de 3 ou mais camadas.
Mas, se podemos criar aplicaes to sofisticadas e funcionais com ASP 3.0, porque precisamos de uma nova verso?
Vamos responder a esta pergunta no prximo item, onde estaremos falando sobre as principais melhorias do ASP.NET
em relao ao ASP 3.0. Nos demais captulos do livro vamos aprender a utilizar os novos recursos do ASP.NET.
Em uma pgina ASP.NET temos acesso a todas as classes da biblioteca de classes do Framework .NET .NET
Framework Class Library. Tambm temos acesso a um tipo comum de dados e a todos os benefcios do Framework
.NET. S estes benefcios j justificam uma migrao do ASP 3.0 para o ASP.NET.
Com ASP.NET podemos utilizar qualquer linguagem que esteja habilitada para o Framework .NET. Inicialmente so
disponibilizadas as linguagens VB.NET, C# e JScript. Apesar do nome JScript, esta e as demais linguagens so
compiladas, o que significa que toda pgina ASP.NET compilada antes de ser executada. Na primeira vez que uma
pgina ASP.NET acessada, a mesma compilada em uma Classe do Framework .NET. A verso compilada mantida
em Cache para melhorar o desempenho para os prximos acessos. Qualquer alterao na pgina automaticamente
www.juliobattisti.com.br 202
CAPTULO 6: UMA INTRODUO AO ASP.NET
detectada pelo Framework .NET; a pgina recompilada e a verso em Cache atualizada, fazendo com que o cliente
tenha sempre acesso verso mais atualizada da pgina. Se no houver mudanas continua sendo utilizada a verso
que est no Cache, o que torna a carga da pgina muito mais rpida.
Alm disso, diversas empresas de Software j anunciaram que esto portando suas linguagens para que sejam compatveis
com o Framework .NET. Desta maneira voc poder utilizar, para a criao de pginas ASP.NET, a linguagem com a
qual est mais familiarizado, desde que a mesma esteja habilitada ao .NET. Voc prefere Delphi? Sem problemas. f
do COBOL? Por que no?
Uma srie de controles mais inteligentes e com melhor funcionalidade foi criada, os chamados Server controls. Estes
controles fornecem grande funcionalidade com um mnimo de programao. Alguns artigos fazem referncia
inteligncia dos server controls. Um dos aspectos considerados inteligentes que, no momento da carga da pgina,
o controle detecta, por exemplo, se o navegador do cliente o Internet Explorer ou o Netscape Navigator e adapta o
seu comportamento e exibio de acordo com o navegador do cliente.
Com ASP tarefas simples, como por exemplo validar os dados digitados em formulrios, exigem a criao de cdigo
especfico. Com os controles inteligentes do ASP.NET, fazer a validao simplesmente questo de configurar
algumas propriedades do controle e pronto, a verificao ser feita no momento em que a pgina for acessada. Nos
Captulos 7, 8 e 9 estaremos falando sobre os diversos controles disponveis. Daremos destaque especial s seguintes
categorias de controles:
Na Listagem 6.1 temos um exemplo de pgina ASP que faz conexo com um banco de dados do Microsoft Access.
203 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<BODY>
<H1>
<FONT color=navy>Clientes da Empresa ABC LTDA.</FONT>
</H1>
<%
O cdigo a seguir aparece em duas linhas por questo de espao, porm o mesmo
deve ser digitado em uma nica linha.
www.juliobattisti.com.br 204
CAPTULO 6: UMA INTRODUO AO ASP.NET
%>
<P>
<HR>
<TR>
<TD align=middle bgColor=gray>Cdigo</TD>
<TD align=middle bgColor=gray>Cargo</TD>
<TD align=middle bgColor=gray>Endereo</TD>
<TD align=middle bgColor=gray>Fone</TD>
</TR>
<%
Inicio um Loop para percorrer todos os registros
do RecordSet Clientes, exibindo um Registro em
cada Linha da tabela.
Do Until Clientes.eof %>
<TR>
<TD align=middle bgColor=gray><%=Clientes.Fields(CodigoCliente)%></TD>
<TD align=middle bgColor=gray><%=Clientes.Fields(Cargo)%></TD>
<TD align=middle bgColor=gray><%=Clientes.Fields(Endereco)%></TD>
<TD align=middle bgColor=gray><%=Clientes.Fields(Fone)%></TD>
</TR>
205 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<%
Clientes.MoveNext
loop %>
</TABLE>
</P>
<HR>
</BODY>
</HTML>
Observe que por mais organizados que sejamos, inserindo comentrios e endentaes no cdigo, no nada fcil a
leitura e interpretao de uma pgina ASP. Isso acontece devido, principalmente, intercalao de cdigo ASP e
cdigo HTML. Em uma mesma pgina ASP posso ter vrias sees de cdigo ASP. Cada seo inicia com <% e
encerra com %>. Tudo o que no estiver entre estes dois marcadores cdigo HTML.
www.juliobattisti.com.br 206
CAPTULO 6: UMA INTRODUO AO ASP.NET
J com ASP.NET isto no acontece. A parte de apresentao da pgina separada da parte de processamento, isto , da
parte onde est o cdigo responsvel pela lgica de processamento da pgina. Com isto estamos separando a lgica da
apresentao, o que facilita a manuteno das pginas.
Para criar os exemplos deste livro, utilizei um servidor com as seguintes configuraes:
Pentium 450
256 MB RAM
Windows 2000 Server em Portugus
IIS 5.0
Microsoft .NET Framework SDK
Nome do servidor: Servidor
Endereo IP: 10.204.123.1
207 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O Framework .NET est disponvel para vrias verses do Windows. ASP.NET suportado no Windows 2000 e no
Windows NT 4 com Service Pack 6a. A utilizao de Web Services suportada em todas as plataformas suportadas
pelo Microsoft .NET Framework SDK, com exceo do Windows 95.
O endereo para acessar a pgina inicial do servidor o seguinte: http://www.groza.com ou http://localhost. Sempre
que for feita referncia a um destes dois endereos, voc deve substituir pelo endereo do equipamento que voc est
utilizando para acompanhar os exemplos deste livro.
Ao instalarmos o IIS criada uma pasta conhecida por Home Directory. O Home Directory a pasta padro que
acessada quando digitamos o endereo do servidor IIS, como por exemplo: http://localhost. Dentro da pasta padro
podemos definir um documento padro, como por exemplo index.asp. Com isso ao acessar o servidor http://localhost,
a pgina padro (index.asp) do diretrio padro ser automaticamente carregada. O diretrio padro criado na pasta
\Inetpub\wwwroot do drive onde o Windows 2000 est instalado. Ao instalar o IIS o usurio pode alterar a localizao
da pasta padro. No computador que estou utilizando, o Windows 2000 Server est instalado em D:\Win2k. Por isso o
Home Directory do servidor est em D:\Inetpub\wwwroot.
Dentro da pasta wwwroot irei criar uma pasta para cada captulo, conforme indicado na Tabela 6.1.
Captulo Pasta
Captulo6 D:\Inetpub\wwwroot\chap6
Captulo7 D:\Inetpub\wwwroot\chap7
Captulo8 D:\Inetpub\wwwroot\chap8
Captulo9 D:\Inetpub\wwwroot\chap9
Captulo10 D:\Inetpub\wwwroot\chap10
Captulo11 D:\Inetpub\wwwroot\chap11
Captulo12 D:\Inetpub\wwwroot\chap12
Captulo13 D:\Inetpub\wwwroot\chap13
Captulo14 D:\Inetpub\wwwroot\chap14
Captulo15 D:\Inetpub\wwwroot\chap15
Criarei os exemplos de cada captulo dentro da respectiva pasta. Por exemplo, ao criar o exemplo 1 deste captulo, vou
salv-lo na pasta D:\Inetpub\wwwroot\chap6, com o nome de chap6ex1.aspx. O exemplo 2 deste captulo ser salvo
como chap6ex2.aspx e assim por diante.
www.juliobattisti.com.br 208
CAPTULO 6: UMA INTRODUO AO ASP.NET
Lembrando sempre que localhost uma referncia ao servidor local, ou seja, na prpria
mquina onde estamos trabalhando. Ao invs de localhost podemos utilizar o nome DNS completo da mquina, no
meu caso: http://www.groza.com.
Tambm cabe lembrar que, para que as pginas ASP.NET possam ser processadas,
IMPORTANTE: Se voc
necessrio que voc tenha instalado o Framework .NET conforme descrito na introduo,
estiver utilizando uma
no seguinte item:
configurao diferente
para testar os exemplos
Como obter e instalar o Microsoft .NET Framework SDK.
deste livro, utilize as
configuraes do
equipamento que estiver
ASP e ASP.NET Podem Rodar no Mesmo Servidor? utilizando em substituio
Sim. importante salientar este ponto. Ao instalarmos o Framework .NET, estamos
s descritas neste item.
habilitando o suporte a pginas ASP.NET, porm as pginas ASP tradicionais continuam
Por exemplo, sempre que
sendo processadas normalmente. Ou seja, continuamos tendo suporte ao cdigo ASP.
for solicitado acesso
Desta maneira podemos migrar as aplicaes j desenvolvidas, aos poucos para ASP.NET.
http://www.groza.com,
substitua este endereo
Podemos inclusive fazer com que um formulrio de uma pgina ASP seja processado pelo endereo que voc
por uma pgina ASP.NET e vice-versa, isto tudo no mesmo servidor. estiver utilizando.
209 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Na Listagem 6.2 colocamos a estrutura bsica de uma pgina ASP.NET, onde temos uma seo de cdigo e uma seo
com os elementos que formam a parte visual, ou de apresentao da pgina.
<body>
controles e
demais
elementos
da interface
- Server controls
- Web Forms
- etc
</body>
</html>
Toda pgina ASP.NET tem esta estrutura. Uma parte inicial onde temos o cdigo, responsvel pela lgica da pgina.
Na seo de cdigo, como chamada, podemos colocar comandos para fazer a conexo com um banco de dados, para
realizar clculos, para responder a eventos que acontecem na pgina, como por exemplo um clique do usurio em um
www.juliobattisti.com.br 210
CAPTULO 6: UMA INTRODUO AO ASP.NET
boto, enfim, toda a lgica de programao necessria ao funcionamento da pgina. A seo de cdigo representada
pelo seguinte trecho.
Na segunda parte da pgina, a partir da tag <body>, colocamos os elementos de apresentao da interface. Nesta parte
podemos colocar desde cdigo HTML bsico, at controles mais avanados como os disponibilizados pelo ASP.NET.
Nos Captulos 7, 8 e 9 estaremos estudando os controles disponveis com o ASP.NET.
Tudo o que voc j conhece de HTML pode ser utilizado na seo de apresentao da pgina.
Se ao invs de utilizarmos o VB quisssemos utilizar a linguagem C#, teramos que definir a tag <script>, da seguinte maneira:
Observe que a estrutura de uma pgina ASP.NET deixa bem clara a separao entre
cdigo ASP.NET e cdigo de apresentao, bem diferente do que acontecia com o ASP NOTA: Nos exemplos
3.0 onde sees de cdigo ASP so intercaladas com sees de cdigo HTML. deste livro estaremos
utilizando o C#. Para uma
A estrutura apresentada na Listagem 6.2 o que chamamos de Code Inline, ou seja, o introduo linguagem
cdigo na prpria pgina ASP.NET, embora em uma seo de cdigo, separada da seo C# consulte os Captulos
de apresentao. 3, 4 e 5.
Por exemplo, vamos criar o cdigo utilizando a linguagem C# e salvar o cdigo em um arquivo chamado codex1.cs, na
mesma pasta onde est a pgina ex1.aspx. No incio da pgina ex1.aspx, devemos colocar o seguinte comando, para
termos acesso ao cdigo do arquivo codex1.cs:
211 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Esta deve ser a primeira linha da pgina, antes inclusive da tag <html>.
A utilizao de Code Behind facilita o reaproveitamento de cdigo. Vamos supor que estejamos criando uma srie de
pginas que acessam um banco de dados no SQL Server 2000. Podemos colocar o cdigo de acesso ao banco de dados
em um arquivo separado e utilizar a diretiva @Page para ter acesso a este cdigo em cada pgina onde o acesso ao
SQL Server 2000 for necessrio. Se por algum motivo a forma de acesso tiver que ser modificada, basta alterar o
arquivo com o cdigo e, pronto, as pginas que fazem uso deste arquivo passaro a acessar a verso atualizada. Se a
pgina j tiver sido acessada anteriormente e estiver no cache de pginas no servidor IIS, o Framework .NET detecta
que houve mudanas em um dos elementos da pgina. Na primeira vez que a pgina for solicitada aps as mudanas,
uma nova verso da pgina ser compilada e enviada para o usurio. A nova verso ser mantida no cache para
melhorar o desempenho. Se novas mudanas forem detectadas, o processo todo se repete.
Exemplo 1
Vamos criar um exemplo bastante simples. A nossa pgina contm dois controles do tipo texto, onde o usurio pode
digitar informaes. A pgina tambm contm um boto de comando. Ao clicar no boto de comando, gerado o
evento Click do respectivo boto. Vamos utilizar este evento. No evento Click do boto de comando vamos verificar os
valores digitados nos campos usurio e senha e compar-los com valores previamente definidos, no prprio cdigo do
evento. Se os valores digitados forem iguais aos valores previamente definidos, emitimos uma mensagem: LOGON
EFETUADO COM SUCESSO !!!!; caso contrrio emitimos a mensgem LOGON FALHOU, TENTE
NOVAMENTE!!!.
www.juliobattisti.com.br 212
CAPTULO 6: UMA INTRODUO AO ASP.NET
}
else
{
Message.InnerHtml = LOGON FALHOU, TENTE NOVAMENTE !!!;
}
}
</script>
<body>
<h3>Digite a senha:
<input id=Senha type=password size=40 runat=server>
<input type=submit value=Enter OnServerClick=Botao_Click
runat=server>
<h1>
<span id=Message runat=server> </span>
</h1>
</form>
</body>
</html>
Digite o cdigo da Listagem 6.3 e salve o mesmo em um arquivo chamado chap6ex1.aspx, na pasta chap6, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo:
http://localhost/chap6/chap6ex1.aspx
Ao carregarmos esta pgina no Internet Explorer obtemos o resultado indicado na Figura 6.5.
Digite user1 para o nome e senha123 para a senha. D um clique no boto Enter. Voc receber uma mensagem
dizendo que o logon foi efetuado com sucesso. Agora digite jose para o nome e senha123 para a senha. D um clique
no boto Enter. Voc receber uma mensagem informando que o logon falhou e que voc deve tentar novamente,
conforme indicado na Figura 6.6.
213 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Criao da interface Para criarmos a interface da pgina utilizamos alguns controles HTML chamados de
Controles HTML do Servidor HTML Server Controls. Observe o atributo runat=server destes controles,
indicando que os mesmos so HTML Server Controls.
Por padro, as tags HTML normais so tratadas como texto e no temos acesso s propriedades das mesmas, atravs
de cdigo. Com o uso de HTML Server Controls os controles HTML so tratados como elementos do servidor e
podemos ter acesso a estes controles atravs de programao. No exemplo da Listagem 6.2 estamos acessando a
propriedade Value dos controles Nome e Senha, para verificar os valores digitados pelo usurio. No teramos como
acessar estas propriedades, utilizando os controles HTML tradicionais.
Por exemplo, para acessar o valor digitado no controle Nome, acessamos a propriedade Value deste controle, utilizando
a seguinte sintaxe:
Nome.Value
www.juliobattisti.com.br 214
CAPTULO 6: UMA INTRODUO AO ASP.NET
215 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
5. Dependendo dos valores digitados pelo usurio, uma ou outra mensagem ser retornada.
Agora que apresentamos um exemplo bastante simples, apenas para comearmos com o ASP.NET, vamos ver um
exemplo que faz conexo com um banco de dados do SQL Server 2000.
SERVNET\NETSDK
A primeira diferena que voc ir notar em relao ao ASP 3.0 que no temos mais o objeto Recordset, o qual
bastante utilizado com o ASP 3.0, para conexes de pginas com bancos de dados.
Na Listagem 6.4 temos o cdigo para a criao da pgina proposta. NOTA: A partir do
Captulo 10 estaremos
Listagem 6.4 O segundo exemplo: conectando com o banco de dados pubs tratando em detalhes da
chap6ex2.aspx. conexo de pginas
<%@ Import Namespace=System.Data %> ASP.NET com banco de
<%@ Import Namespace=System.Data.SqlClient %> dados.
<html>
www.juliobattisti.com.br 216
CAPTULO 6: UMA INTRODUO AO ASP.NET
</script>
<body>
<% Exibe as informaes do DataGrid no corpo da pgina. %>
217 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</html>
www.juliobattisti.com.br 218
CAPTULO 6: UMA INTRODUO AO ASP.NET
Digite o cdigo da Listagem 6.4 e salve o mesmo em um arquivo chamado chap6ex2.aspx, na pasta chap6, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap6/chap6ex2.aspx
Ao carregarmos esta pgina no Internet Explorer obtemos o resultado indicado na Figura 6.7
Alguns comentrios sobre o exemplo chap6ex2.aspx, sem entrar em maiores detalhes sobre o cdigo do exemplo.
Para ter acesso s classes de um determinado namespace, precisamos adicionar uma referncia ao mesmo, no incio da
pgina ASP.NET, utilizando a diretiva Import, conforme indicado no trecho de cdigo a seguir:
Observe que estamos fazendo referncia a dois namespaces: System.Data e System.Data.SqlCliente. Vamos tratar
exaustivamente dos membros destes namespaces nos captulos 10 e 11.
Observe que utilizamos duas barras invertidas ao invs de uma nica barra. Isto necessrio porque a barra invertida
considerada um caractere de escape com significado especial para a linguagem C#. Quando, ao invs do caractere de
escape, queremos que o C# entenda o mesmo como um caractere normal, temos que preced-lo de uma barra invertida.
Na prtica as duas barras invertidas so interpretadas, pelo C#, como uma nica barra, o que produz o resultado
desejado: SERVIDOR\NETSDK.
SqlConnection
SqlDataAdapter
Tambm utilizamos as seguintes classes do namespace System.Data:
219 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
DataSet
DataView
MyDataGrid.DataSource = source ;
MyDataGrid.DataBind();
Veja que no precisamos utilizar um lao While para percorrer todos os registros da tabela Authors, como tnhamos
que fazer com o objeto RecordSet.
O controle DataGrid faz parte dos chamados Web Server Controls. No Captulo 8 aprenderemos a utilizar os diversos
Web Server Controls disponveis.
Diferente do ASP 3.0, em nossas pginas ASP.NET, os comandos da seo de cdigo podem estar em mais do que uma
linha, sem problemas. Inclusive na Listagem 6.3 temos comandos que ultrapassam uma linha e a pgina carrega sem
maiores problemas, conforme exemplificado no trecho a seguir:
Voc deve ter observado que utilizamos um comando SQL para retornar os dados da tabela authors. Utilizamos um
comando SELECT, conforme indicado a seguir:
Vamos alterar o comando SQL para introduzir uma condio. Queremos que sejam retornados somente os registros
para os autores em que a cidade (city) Oakland. Para isso basta que seja utilizada uma clusula where para especificar
a condio city=Oakland, conforme indicado a seguir:
www.juliobattisti.com.br 220
CAPTULO 6: UMA INTRODUO AO ASP.NET
Faa esta alterao na pgina chap6ex2.aspx e salve a nova verso da pgina na pasta chap6, com o nome de
chap6ex3.aspx. Ao carregar esta nova verso, obteremos o resultado indicado na Figura 6.8.
221 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Em seguida fizemos um Check List para verificar se o computador que voc est utilizando est apto a rodar pginas
ASP.NET. Tambm falamos sobre o Home Directory do servidor IIS e como acessar pginas gravadas em subpastas
do Home Directory.
Na seqncia apresentamos a estrutura bsica de uma pgina ASP.NET. Tambm aprendemos a definir uma seo de
cdigo atravs da tag <script>.
Para finalizar o captulo apresentamos dois exemplos, sem detalhar o cdigo dos exemplos. No primeiro exemplo
apresentamos alguns HTML Server Controls. No segundo exemplo utilizamos algumas classes do Framework .NET,
mais especificamente dos namespaces System.Data e System.Data.SqlCliente, para fazer acessar os dados do banco
de dados pubs do SQL Server 2000.
No prximo captulo estudaremos os HTML Server Controls disponveis. Veremos um a um, todos os controles
disponveis, bem como as propriedades de cada um. Tambm apresentaremos alguns exemplos prticos para ilustrar o
uso dos HTML Server Controls.
www.juliobattisti.com.br 222
CAPTULO 7: HTML SERVER CONTROLS
Introduo CAPTULO
Uma das inovaes mais bem-vindas do ASP.NET a disponibilizao de uma
srie de controles mais poderosos, flexveis e inteligentes. Com ASP.NET
7
temos acesso a diversos controles que permitem a criao de pginas com uma
aparncia grfica mais parecida com os programas tradicionais do Windows, alm
de termos acesso a um rico modelo de eventos, o que j estava disponvel em
aplicaes tradicionais do Windows, a um bom tempo.
Com as verses anteriores, criar pginas com uma aparncia grfica mais elaborada
no era tarefa das mais fceis. Para alcanar uma aparncia mais profissional,
HTML Server Controls
tnhamos que lanar mo de uma srie de tecnologias diferentes, o que era bastante
trabalhoso. Com o ASP.NET temos uma srie de elementos, conhecidos como
controles de servidor, que nos ajudam na tarefa de criar pginas com uma aparncia
mais profissional, e que so exibidas da mesma maneira nos diferentes
navegadores.
Com a utilizao dos controles de servidor (Server Controls) temos uma mudana
na maneira como criamos nossas pginas. O novo modelo utiliza a programao
baseada em eventos. Aes que acontecem em um ou mais controles da pgina
podem ser detectadas pelo servidor e uma ao pode ser tomada em resposta ao
evento. Conforme voc j deve ter notado, o tradicional modelo de programao
baseado em eventos, s que agora trazido para o mundo do desenvolvimento de
aplicaes e pginas Web.
223 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Neste captulo vamos estudar os HTML Server Controls. Vamos apresentar os controles existentes, bem como as
diversas propriedades de cada controle. Tambm vamos apresentar uma srie de pginas que ilustram a utilizao
destes controles.
Antes de iniciarmos com a apresentao dos controles, veremos o que mudou na maneira como uma pgina carregada
no servidor e disponibilizada para o usurio. Veremos que o modelo das pginas mudou significativamente no ASP.NET,
em relao s verses anteriores. Tambm falaremos sobre o cache automtico de pginas no servidor.
A diferena bsica entre os eventos Page_Init e Page_Load em relao aos controles da pgina. Quando o evento
Page_Init dispara, os controles da pgina ainda esto com seus valores padro, pois o estado dos mesmos, caso tenham
sido alterados, ainda no foi carregado. J quando dispara o evento Page_Load, os controles esto com seus estados
atualizados, sendo que j temos acesso aos reais valores de cada controle.
www.juliobattisti.com.br 224
CAPTULO 7: HTML SERVER CONTROLS
Esta seqncia de eventos refora a idia de que o modelo de programao baseado em eventos foi transportado para
o mundo das aplicaes Web, pelo ASP.NET.
A Classe Page
Toda pgina .aspx acessada a partir de um servidor onde est instalado o Framework .NET, quer a pgina contenha
cdigo ASP.NET ou somente cdigo HTML, compilada e criado um objeto do tipo Page, o qual fica armazenado
no cache de memria do servidor. Em outras palavras, ao acessarmos uma pgina .aspx, a mesma compilada, sendo
gerada uma instncia da classe Page, sendo esta instncia armazenada no cache do servidor para melhorar a velocidade
de acesso pgina. Qualquer alterao na pgina , automaticamente, detectada pelo Framework .NET, a nova verso
compilada e armazenada no cache de memria do servidor, em substituio verso anterior.
Na classe Page esto definidos as propriedades, mtodos e eventos comuns a todas as pginas processadas pelo
Runtime do ASP.NET. A classe Page funciona como um Conteiner para todos os componentes que fazem parte da
pgina. Como analogia, nas aplicaes Windows, temos a figura do Formulrio (Form), o qual um Container para
todos os elementos da aplicao.
Evento Descrio
AbortTransaction Ocorre quando uma transao cancelada.
CommitTransaction Ocorre quando uma transao finalizada com sucesso.
DataBinding Ocorre quando um controle de servidor (Server Control) vinculado a uma fonte de dados.
Error Ocorre quando detectada uma exceo que no foi tratada.
Init Ocorre quando a pgina inicializada.
Load Ocorre quando a pgina carregada e todos os seus controles tiverem sido carregados.
PreRender Ocorre antes que qualquer informao seja enviada para o navegador do cliente.
Unload Ocorre quando o processamento da pgina finalizado. Isto ocorre aps todas as
informaes terem sido enviadas para o navegador do cliente.
Vamos a um exemplo no qual utilizamos o evento Load da pgina, para emitir uma mensagem.
Na Listagem 7.1 temos um exemplo de pgina, onde definimos o valor de um controle da pgina controle Mensagem,
durante o evento Load da pgina.
225 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<body>
<input id=Mensagem type=text size=60 runat=server>
</body>
</html>
Digite o cdigo da Listagem 7.1 e salve o mesmo em um arquivo chamado chap7ex1.aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex1.aspx
Ao carregarmos esta pgina no Internet Explorer obtemos o resultado indicado na Figura 7.1.
Em primeiro lugar quero reforar o fato de termos disposio um modelo de programao baseado em eventos, o que
para o ambiente Web um avano significativo em relao s verses anteriores.
www.juliobattisti.com.br 226
CAPTULO 7: HTML SERVER CONTROLS
O segundo detalhe para o qual gostaria de chamar a ateno a utilizao de um controle de servidor. Mais
especificamente, utilizamos um HTML Server Control, para exibir a mensagem definida no evento Load da pgina.
Utilizamos o controle Input, conforme indicado no trecho de cdigo a seguir:
Observe a propriedade runat=server definindo que este um controle de servidor e que, portanto, temos acesso s
suas propriedades atravs do cdigo da pgina. Foi exatamente isto que fizemos no evento Load, quando definimos o
valor da propriedade Load do evento Mensagem, conforme indicado a seguir:
Podemos utilizar os eventos da classe Page, para uma srie de funes, tais como:
Propriedade Descrio
Application Faz referncia a um objeto do tipo Application. Um nico objeto do tipo Application
criado para cada aplicao Web. A instncia do objeto Application compartilhada por
todos os clientes que acessam pginas da aplicao Web.
Cache Retorna uma referncia a um objeto do tipo Cache, o qual pode ser utilizado para
armazenar dados que so utilizados nas prximas solicitaes da pgina. O objeto cache
utiliza campos do tipo oculto para manter o estado dos elementos de uma pgina entre
uma chamada e outra da pgina.
ClientTarget Esta propriedade permite alterar a deteco automtica do Browser do cliente, que feita
pelo Framework .NET, e especificar o Browser que deve ser considerado para a montagem
da pgina de retorno para o usurio.
EnableViewState um valor Boleano (True ou False). O valor desta propriedade indica se os controles da
pgina devem ou no manter o seu estado entre uma chamada e outra da pgina. Esta
propriedade afeta todos os controles da pgina. Por padro definida em True.
227 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Propriedade Descrio
ErrorPage Pode ser utilizada para retornar ou definir a pgina que deve ser carregada, caso seja
detectada uma exceo no tratada.
IsPostBack um valor Boleano. Se for verdadeiro (True), indica que a pgina est sendo recarregada
pelo usurio, o que conhecido como um round-trip (ida e volta). Quando for False,
significa que a pgina est sendo carregada pela primeira vez e, conseqentemente, no
existem valores de estado armazenados no cache do servidor, para os controles da
pgina. Podemos utilizar esta propriedade para detectar se est sendo feita a carga inicial
da pgina e, em caso afirmativo, utilizar o evento Page_Load para definir os valores
iniciais, para os controles da pgina.
IsValid Com o ASP.NET temos os chamados Validation Controls. Estes controles so capazes de
fazer a validao dos dados digitados em um formulrio. Se a validao de todos os
controles ocorrer com sucesso, a propriedade IsValid definida como True; caso contrrio,
a propriedade ser definida como False. Se a pgina no tiver nenhum controle de
validao, a propriedade retornar True.
Request Permite que tenhamos acesso aos dados enviados com a requisio HTTP da pgina. Esta
propriedade retorna uma referncia ao objeto Request. Estudaremos este objeto em
detalhes, ainda neste captulo.
Response Permite que tenhamos acesso aos dados enviados com HTTP response da pgina. Esta
propriedade retorna uma referncia ao objeto Response. Um Response est, geralmente,
associado com um formulrio. Estudaremos este objeto em detalhes, ainda neste captulo.
Server Retorna uma referncia ao objeto Server.
Session Retorna uma referncia ao objeto Session.
TraceEnabled uma propriedade Boleana. Retorna True se o Trace para a pgina estiver habilitado e
False, em caso contrrio. O objeto Trace utilizado para depurao de pginas.
Trace Retorna uma referncia ao objeto Trace, caso o mesmo tenha sido habilitado.
User Obtm informaes a respeito do usurio que est fazendo a requisio da pgina.
Validators Retorna uma coleo que contm todos os controles de validao da pgina.
Na Listagem 7.2 temos um exemplo de pgina, onde so exibidos os valores de diversas propriedades da classe page.
www.juliobattisti.com.br 228
CAPTULO 7: HTML SERVER CONTROLS
}
</script>
<body>
<TABLE>
<TR>
<TD>
<B>Propriedade</B>
</TD>
<TD>
<B>Valor retornado.</B>
</TD>
</TR>
<TR>
<TD>
<B>Application: </B>
229 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</TD>
<TD>
<input id=PrApplication type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>Cache: </B>
</TD>
<TD>
<input id=PrCache type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>ClientTarget: </B>
</TD>
<TD>
<input id=PrClientTarget type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>EnableViewState: </B>
</TD>
<TD>
<input id=PrEnableViewState type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>ErrorPage: </B>
</TD>
www.juliobattisti.com.br 230
CAPTULO 7: HTML SERVER CONTROLS
<TD>
<input id=PrErrorPage type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>IsPostBack: </B>
</TD>
<TD>
<input id=PrIsPostBack type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>IsValid: </B>
</TD>
<TD>
<input id=PrIsValid type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>Request: </B>
</TD>
<TD>
<input id=PrRequest type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>Response: </B>
</TD>
<TD>
<input id=PrResponse type=text size=60 runat=server>
231 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</TD>
</TR>
<TR>
<TD>
<B>Server: </B>
</TD>
<TD>
<input id=PrServer type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>Session: </B>
</TD>
<TD>
<input id=PrSession type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>Trace: </B>
</TD>
<TD>
<input id=PrTrace type=text size=60 runat=server>
</TD>
</TR>
<TR>
<TD>
<B>User: </B>
</TD>
<TD>
<input id=PrUser type=text size=60 runat=server>
www.juliobattisti.com.br 232
CAPTULO 7: HTML SERVER CONTROLS
</TD>
</TR>
</TABLE>
</body>
</html>
Digite o cdigo da Listagem 7.2 e salve o mesmo em um arquivo chamado chap7ex2.aspx, na subpasta chap7, dentro
da pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://
localhost/chap7/chap7ex2.aspx
Ao carregarmos esta pgina no Internet Explorer obtemos o resultado indicado na Figura 7.2.
233 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Utilizamos esta diretiva para termos acesso classe Convert, do namespace System. Utilizamos o mtodo ToString da
classe Convert Convert.ToString, para converter os valores retornados pelas propriedades da classe Page, em valores
de texto, e atribuir os valores de texto para controles do tipo input na seo de apresentao da pgina.
Na seo de cdigo acessamos os valores para as propriedades da classe page. Por exemplo, para a propriedade
Application, utilizamos o seguinte cdigo:
PrApplication.Value = Convert.ToString(Page.Application);
Page.Application retorna o valor da propriedade Application. O valor retornado convertido para String pelo mtodo
Convert.ToString. O valor j convertido para String atribudo propriedade Value do controle PrApplication, na
seo de apresentao da pgina. O resultado prtico disso tudo que o valor da propriedade Application ser exibido
no controle PrApplication, na seo de apresentao.
Na seo de apresentao utilizamos uma tabela para exibir os controles melhor alinhados. Para isso utilizamos as tags
do HTML para construo de tabelas:
nome_do_objeto.nome_componente
Por exemplo, para acessar a propriedade Cache, do objeto page, utilizamos a seguinte sintaxe:
Page.Cache.
IMPORTANTE: Quando uma pgina .aspx carregada, a mesma compilada como um objeto que uma instncia da classe
Page. Sendo um objeto, temos acesso a suas propriedades, mtodos e eventos.
www.juliobattisti.com.br 234
CAPTULO 7: HTML SERVER CONTROLS
Mtodos Descrio
DataBind Executa uma operao de DataBind para todos os controles da pgina.
FindControl Permite que localizemos um determinado controle, na pgina.
MapPath Retorna o caminho fsico para um determinado diretrio virtual.
Validate Faz com que os controles de validao da pgina faam a validao de seus contedos.
Para acessar uma pgina, o usurio digita o endereo da pgina no seu navegador, como por exemplo: http://
www.juliobattisti.com.br/certificacao.aspx.
O navegador envia a requisio da pgina para o servidor IIS, atravs de uma requisio HTTP (HTTP Request). O
servidor localiza os dados solicitados, envia de volta para o usurio e fecha a conexo. Este aspecto bsico no mudou,
at porque faz parte da definio do protocolo HTTP, independente do contedo que est sendo carregado. Porm,
com ASP.NET, tivemos muitas melhorias em relao maneira como a pgina carregada e como as informaes so
mantidas entre uma requisio e outra.
Com o modelo atual, parte do processamento acontece no navegador do cliente e parte no servidor. Normalmente no
cliente so colocados os elementos visuais da pgina. No servidor so feitos os processamentos do cdigo de script da
pgina. Porm o processamento do tipo tudo de uma s vez, ou seja, o cliente envia a requisio, o servidor
processa todos os elementos da pgina, formata uma sada e retorna a sada formatada para o cliente. Para que possa
haver um novo processamento, uma nova requisio da pgina precisa ser feita.
Com ASP.NET temos uma mudana neste modelo, devido criao dos chamados Server Controls. Um controle do
tipo Server Control fornece elementos visuais para uma pgina ASP.NET, ao mesmo tempo que processado no
servidor. Estes controles tm, inclusive, um modelo de eventos que pode ser acessado via cdigo. Com isso temos
disponvel um modelo de desenvolvimento baseado em eventos, semelhante ao desenvolvimento de aplicaes Win-
dows tradicionais.
Outra mudana que possvel, graas aos Server Controls, em relao iterao entre a pgina e o servidor.
Como os Server Controls possuem eventos, podemos escrever cdigo para ser executado em resposta a estes eventos.
Este cdigo de eventos processado no servidor. Dentro de uma mesma requisio de pgina, podem ser disparados
diversos eventos, medida que o usurio vai trabalhando na pgina. Para cada evento, o cdigo respectivo, caso
exista, processado no servidor. Observem que o cliente fica indo e voltando do servidor, para processar o
cdigo associado a eventos. Cada ida e vinda equivale a uma requisio. Este processo de ida e vinda conhecido
como server round-trip.
235 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Para que um round-trip seja disparado, basta que o usurio realize alguma ao na pgina, ao esta que dispara um
evento. Por exemplo, clicar em um campo para entrada de texto, para provocar um evento Click do respectivo controle.
www.juliobattisti.com.br 236
CAPTULO 7: HTML SERVER CONTROLS
A propriedade runat=server faz com que o controle seja compilado juntamente com a pgina e executado, no
servidor, cada vez que a pgina requisitada. Observe que esta forma de processamento demanda mais recursos do
servidor do que os controles HTML tradicionais.
Em segundo lugar os controles disponibilizam um modelo de programao baseado em eventos. Esta uma mudana
importante em relao s verses anteriores. Por exemplo, quando o usurio clica em um boto Enviar, os valores do
formulrio so enviados para o servidor e o evento Click do boto disparado. Podemos escrever o cdigo que executa
quando o evento disparado. Ns j fizemos uso desta tcnica no Exemplo da Listagem 6.1 chap6ex1.aspx.
Na seo de apresentao do exemplo citado, temos um controle do tipo Submit um boto de comando. Este controle
criado com a linha de cdigo a seguir:
Observe a propriedade OnServerClick=Botao_Click. Esta propriedade define o nome do procedimento que ser
executado, no servidor, em resposta ao evento Click do boto.
Na seo de cdigo da pgina criamos um procedimento chamado Botao_Click, o qual executado em resposta ao
evento Click do boto de comando, conforme indicado no cdigo a seguir:
Cada controle de servidor considerado, pelo Framework .NET, como um objeto da pgina. Como um objeto, o
controle possui propriedades, mtodos e eventos, os quais so acessveis atravs do cdigo de programao.
237 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
HTML Server controls devem ser colocados dentro de um formulrio, na pgina ASP.NET. Criamos um formulrio,
conforme veremos mais adiante, com as tags <FORM> </FORM>. Alm disso, a propriedade runat, do formulrio,
deve ser definida como: runat=server.
Como a utilizao de Server Controls exige mais recursos do servidor do que o uso de controles tradicionais, somente
devemos utilizar Server Controls, quando as suas caractersticas forem necessrias. Porm com o avano e sofisticao
das aplicaes Web, vai ser difcil acharmos uma situao em que possamos dispensar o modelo baseado em eventos,
disponibilizado pelos Server Controls.
Em algumas situaes simples pode ser dispensvel a utilizao de Server Controls. Como por exemplo, quando o
elemento um link para outra pgina e no precisamos processar a informao do link, no servidor. Agora vamos
estudar os diversos HTML Server Controls disponveis.
Propriedade Descrio
Attributes Retorna uma coleo de todos os atributos do tipo pares de nome/valor contidos na
pgina .aspx, na qual est o controle.
ClientID Retorna a identificao do controle. Esta identificao gerada pelo ASP.NET e utilizada,
dentre outras coisas, para manter o estado do controle.
Disabled Utilizado para retornar ou definir um valor que indica se o controle est ou no desabilitado.
EnableViewState Utilizado para retornar ou definir um valor boleano que indica se o controle de estado
est habilitado (true) ou desabilitado (false), para o controle.
ID Utilizado para retornar ou definir um nome associado ao controle. Este nome utilizado
no cdigo para acessar as propriedades e mtodos do controle.
Page Retorna uma referncia para a pgina que contm o controle.
www.juliobattisti.com.br 238
CAPTULO 7: HTML SERVER CONTROLS
Propriedade Descrio
Site Retorna informao a respeito do Web site.
Visible Utilizado para retornar ou definir um valor que indica se o controle ou no visvel.
<form
runat=server
id=identificao_no_cdigo
method=POST | GET
action=endereo
>
Controles que definem os elementos do formulrio
</form>
runat=server: Define que um controle de servidor, ou seja, que ser processado no servidor.
id=identificao_no_cdigo: Um nome que atribumos ao controle, nome este que ser usado para acessar
as propriedades e mtodos do controle, atravs de programao.
method: Existem dois mtodos para enviar um formulrio para o servidor: POST e GET. O mtodo GET
mais limitado, sendo que na grande maioria das vezes utilizamos o mtodo POST.
action: O endereo de uma pgina que ir receber os dados digitados no formulrio e realizar alguma ao
com os dados. Por exemplo, podemos criar um formulrio de cadastro, onde o formulrio digita os seus dados
para o cadastramento. O formulrio de cadastro criado como uma pgina ASP.NET chamada cadastro.aspx.
O usurio preenche os dados e clica em um boto Enviar. Ao clicar no boto Enviar, os dados digitados pelo
usurio sero passados para a pgina definida na propriedade action vamos cham-la de insere.aspx. A
pgina insere.aspx recebe os dados digitados pelo usurio, insere os mesmos em uma tabela de um banco de
dados do SQL Server 2000 e retorna uma mensagem para o usurio. As etapas do exemplo descrito esto
ilustradas na Figura 7.3.
239 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
}
</script>
<body>
www.juliobattisti.com.br 240
CAPTULO 7: HTML SERVER CONTROLS
<tr>
<td><h3>Voc digitou: </h3> </td>
<td><input id=Voltou type=text size=40 runat=server> </td>
</tr>
<tr>
<td><h3>Clique no boto ></h3></td>
<td><input type=submit value=Enviar OnServerClick=Enviar_Click
runat=server></td>
</tr>
</table>
</form>
</body>
</html>
Digite o cdigo da Listagem 7.3 e salve o mesmo em um arquivo chamado chap7ex3.aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex3.aspx
Ao carregarmos esta pgina no Internet Explorer obtemos um formulrio com dois campos para digitao de texto.
Digite a mensagem: Exemplo de formulrio, no primeiro controle e d um clique no boto Enviar. A mensagem
Exemplo de formulrio ser exibida no segundo campo, conforme indicado na Figura 7.4.
241 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Agora uma pequena demonstrao de como o ASP.NET mantm o estado dos controles. No nosso exemplo vamos
provar que o valor contido nos campos do formulrio mantido no servidor. Pressione F5 para atualizar a pgina do
nosso exemplo (se voc estiver utilizando o Netscape pressione Ctrl+R). Com o ASP 3.0 e verses anteriores, ao
pressionarmos F5, a pgina seria recarregada e os campos apareceriam em branco ou com os seus valores padro. No
caso do ASP.NET so exibidos os valores atualmente definidos, ou seja, o estado atual da pgina foi mantido. Pressione
F5 e observe. O texto Exemplo de formulrio ser exibido nos dois campos, o que comprova a manuteno automtica
de estado com o ASP.NET.
NOTA: Apenas para lembrar, voc pode desabilitar a manuteno automtica de estado utilizando a seguinte diretiva, no incio da pgina:
<%@Page EnableViewState=false %>
No definimos a propriedade action do formulrio. Com isso, ao clicar no boto Enviar, a pgina chama a si mesma,
pois, conforme descrito, o valor padro para a propriedade action o endereo da prpria pgina, onde est o formulrio.
No formulrio definimos um evento a ser disparado em resposta ao clique no boto enviar. Esta definio feita na
seguinte linha de cdigo:
Neste caso definimos que, ao ocorrer o evento Click (OnServerClick), deve ser executado o procedimento Enviar_Click.
O procedimento enviar Click, atribui o valor digitado no campo Digitou propriedade Value do campo Voltou. Isto
equivalente a copiar o contedo do campo Digitou para o campo Voltou. O procedimento Enviar_Click est na seo
de cdigo da pgina, conforme indicado na figura a seguir:
HTMLInputText Control
utilizado para a criao de campos, em um formulrio, onde o usurio pode digitar texto. Este controle utilizado
para criar controles que rodam no servidor, para os tipos e funes indicados na Tabela 7.5. O que define o controle
como sendo de servidor a propriedade runat=server.
www.juliobattisti.com.br 242
CAPTULO 7: HTML SERVER CONTROLS
Tipo Descrio
Texto <input type=text>. Para a digitao de informaes como por exemplo:
nome, endereo, telefone, e-mail, etc.
Senha <input type=password>. Para a digitao de senhas. Ao ser digitada
uma senha, so exibidos somente asteriscos (*) no Windows 95, 98,
NT ou 2000; j no Windows XP so exibidos pontos grandes.
<input
type=text | password
runat=server
id=identificao_no_cdigo
maxlength=nmero mximo de caracteres
size=tamanho de exibio da caixa para digitao
value=valor padro para o campo
>
runat=server: Define que um controle de servidor, ou seja, que ser processado no servidor.
id=identificao_no_cdigo: Um nome que atribumos ao controle, nome este que ser usado para acessar
as propriedades e mtodos do controle, atravs de programao.
maxlength: tamanho mximo de caracteres para o campo.
size: tamanho da caixa que exibida para o campo. Se for menor que o tamanho mximo do campo, ao digitar
informao, quando o texto digitado atingir o tamanho mximo de exibio, o texto ser deslocado para a
esquerda, para que o usurio continue digitando.
value: Valor padro associado ao campo. Ao carregarmos a pgina o controle exibido em branco, a menos
que exista um valor padro para o mesmo, caso em que ser exibido o valor padro.
No exemplo da pgina chap7ex3.aspx, utilizamos dois controles do tipo <input type=text>, conforme indicado pelo
trecho de cdigo a seguir:
...
<td><h3>Digite um texto:</h3> </td>
<td><input id=Digitou type=text size=40 runat=server></td>
...
<td><h3>Voc digitou: </h3> </td>
<td><input id=Voltou type=text size=40 runat=server> </td>
...
243 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Vamos modificar algumas propriedades destes controles. Vamos definir um valor padro para o controle Digitou.
Vamos definir o valor padro Exemplo de ASP.NET. Tambm vamos definir um tamanho mximo de 20 para a
caixa de exibio do campo Digitou. Aps as alteraes propostas, o nosso cdigo deve ficar assim:
...
<td><h3>Digite um texto:</h3> </td>
<td><input id=Digitou type=text size=20 runat=server
value=Exemplo de ASP.NET></td>
...
<td><h3>Voc digitou: </h3> </td>
<td><input id=Voltou type=text size=40 runat=server> </td>
...
Faa estas alteraes no cdigo da Listagem 7.3 e salve a mesma com o nome de chap7ex4.aspx, na subpasta chap7,
da pasta wwwroot descrita anteriormente. Para acessar esta nova verso da pgina, utilize o seguinte endereo: http:/
/localhost/chap7/chap7ex4.aspx
HTMLInputCheckBox
utilizado para a criao de controles de seleo em um formulrio. Os controles do tipo CheckBox so exibidos
como pequenos quadradinhos. So controles do tipo marcado/desmarcado. Se o controle estiver marcado, ao clicarmos
ele ser desmarcado. Se o controle estiver desmarcado, ao clicarmos ele ser marcado. Normalmente utilizado em
grupos. Em um grupo de controles do tipo CheckBox podemos selecionar mais do que um controle. Por exemplo, para
www.juliobattisti.com.br 244
CAPTULO 7: HTML SERVER CONTROLS
criar um formulrio de cadastro, onde o cliente pode informar as reas de interesse em uma livraria. Podemos utilizar
controles do tipo CheckBox, onde o cliente pode selecionar uma ou mais reas de interesse. Apresentaremos este
exemplo logo em seguida.
<input
type=checkbox
runat=server
id=identificao_no_cdigo
checked
>
Onde temos:
runat=server: Define que um controle de servidor, ou seja, que ser processado no servidor.
id=identificao_no_cdigo: Um nome que atribumos ao controle, nome este que ser usado para acessar
as propriedades e mtodos do controle, atravs de programao.
checked: Valor boleano que indica se o controle est marcado (True) ou no (False).
Exemplo: Vamos criar um formulrio onde o cliente digita o Nome, o E-mail e seleciona as res de preferncia, nas
quais deseja receber informaes por e-mail. Utilizaremos o evento Click do boto Enviar, para exibir os valores
digitados pelo usurio. Para exibio dos valores vamos utilizar um controle do tipo caixa de texto HtmlTextArea
control; mais adiante falaremos em detalhes sobre este controle.
String Aux;
245 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Aux = Nome.Value;
Aux = Aux + \n + Email.Value;
if (Negocios.Checked==true)
{
Aux= Aux +\n +Negcios;
}
if (Administrao.Checked==true)
{
Aux= Aux +\n +Administrao;
}
if (Informtica.Checked==true)
{
Aux= Aux +\n +Informtica;
}
if (Fico.Checked==true)
{
Aux= Aux +\n +Fico;
}
Dados.Value = Aux;
</script>
<body>
<form method=post runat=server>
<table>
<tr>
<td><h3>Nome:</h3> </td>
<td><input id=Nome type=text size=40 runat=server></td>
</tr>
<tr>
<td><h3>E-mail: </h3> </td>
www.juliobattisti.com.br 246
CAPTULO 7: HTML SERVER CONTROLS
<tr>
<td><h3>Administrao:</h3> </td>
<td><input id=Administrao type=checkbox runat=server> </td>
</tr>
<tr>
<td><h3>Informtica:</h3> </td>
<td><input id=Informtica type=checkbox runat=server> </td>
</tr>
<tr>
<td><h3>Fico:</h3> </td>
<td><input id=Fico type=checkbox runat=server> </td>
</tr>
<tr>
<td><h3>Dados do cliente:</h3> </td>
<td><textarea id=Dados cols=60" rows=10" visible=false
runat=server></textarea> </td>
</tr>
<tr>
<td><h3>Clique no boto ></h3></td>
<td><input type=submit value=Enviar OnServerClick=Enviar_Click
runat=server></td>
</tr>
</table>
</form>
</body>
</html>
247 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o cdigo da Listagem 7.4 e salve o mesmo em um arquivo chamado chap7ex5.aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex5.aspx
Ao carregarmos esta pgina no Internet Explorer obtemos um formulrio com dois campos para digitao de texto.
Um para o nome do usurio e outro para o e-mail. Tambm so exibidos quatro controles do tipo checkbox onde o
usurio pode escolher uma ou mais das seguintes opes:
Negcios
Administrao
Informtica
Fico
Ao carregar a pgina pela primeira vez, o controle do tipo textarea est oculto, pois definimos sua propriedade visible
como false. Para o nome digite Jos da Silva e para o e-mail digite josedasilva@abc.com.br. Selecione as opes
Negcios e Informtica, conforme indicado na Figura 7.6
www.juliobattisti.com.br 248
CAPTULO 7: HTML SERVER CONTROLS
D um clique no boto Enviar. Um controle do tipo textarea ser exibido na parte final da pgina, com os dados que
voc digitou para o Nome e o e-mail do usurio, alm das informaes selecionadas, conforme indicado na Figura 7.7.
Desmarque a opo Negcios e marque as opes Administrao e Fico. D um clique no boto Enviar e observe
que as novas opes j so exibidas no controle do tipo textarea.
Na seo de apresentao (entre as tags <body> e </body>) criamos um formulrio. Neste formulrio colocamos
dois controles do tipo text para que o usurio possa digitar o nome e o e-mail. Depois inclumos quatro controles
do tipo checkbox para que o usurio possa selecionar uma ou mais preferncias.
Novamente utilizamos uma tabela para fazer o alinhamento dos controles. NOTA: Para maiores
Na seo de cdigo utilizamos o evento Click do boto Enviar. Dentro deste evento informaes sobre os
tornamos o controle Dados visvel e depois declaramos uma varivel do tipo String comandos bsicos da
Aux. A vamos concatenando os valores digitados para o nome e o e-mail linguagem HTML consulte
varivel Aux, conforme indicado no trecho de cdigo a seguir: o Anexo I.
249 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Dados.Visible = true;
String Aux;
Aux = Nome.Value;
Aux = Aux + \n + Email.Value;
Na seqncia utilizamos a instruo if para determinar se o controle Negcios foi selecionado. Em caso
afirmativo concatenamos Negcios varivel Aux, conforme indicado no trecho de cdigo a seguir:
if (Negocios.Checked==true)
{
Aux= Aux +\n +Negcios;
}
Na ltima linha da seo de cdigo definimos a propriedade Value do controle Dados (controle do tipo textarea)
como sendo igual varivel Aux, conforme indicado no seguinte comando:
Dados.Value = Aux;
HtmlTextArea Control
Utilizamos este controle no exemplo da Listagem 7.4. Vamos apresentar mais alguns detalhes sobre este controle. O
controle textarea utilizado para a digitao ou exibio de grandes quantidades de texto. A sua funo semelhante
funo dos campos do tipo memo no Microsoft Access.
<textarea
runat=server
id=identificao_no_cdigo
cols=nmero de colunas
name=nome enviado para o navegador
rows=nmero de linhas
onserverchange=onserverchangehandler
www.juliobattisti.com.br 250
CAPTULO 7: HTML SERVER CONTROLS
>
Texto para ser exibido no controle.
</textarea>
A propriedade onserverchange utilizada para definir um evento que ser executado em resposta ao envio da pgina
para processamento no servidor.
Observe que este controle possui uma tag de abertura <textarea> e uma de fechamento </textarea>. Utilizamos esta
sintaxe no exemplo do item anterior:
Observe que simplesmente colocamos uma barra antes do sinal de fechamento >. Podemos utilizar qualquer uma das
duas sintaxes.
HTMLInputRadioButton Control
utilizado para a criao de controles de seleo em um formulrio. Os controles do tipo RadioButton so exibidos
como pequenos crculos. So controles do tipo marcado/desmarcado. Se o controle estiver marcado, ao clicarmos ele
ser desmarcado. Se o controle estiver desmarcado, ao clicarmos ele ser marcado. Normalmente utilizado em grupos.
Em um grupo de controles do tipo RadioButton podemos selecionar somente um controle. Ao clicarmos em um
controle, se outro controle do grupo estava marcado, ser desmarcado. Para criar um grupo de controles do tipo
RadioButton definimos todos os controles com o mesmo valor para a propriedade name.
<input
type=checkbox
runat=server
id=identificao_no_cdigo
checked
name=nome do grupo
>
Onde temos:
runat=server: Define que um controle de servidor, ou seja, que ser processado no servidor.
id=identificao_no_cdigo: Um nome que atribumos ao controle, nome este que ser usado para acessar
as propriedades e mtodos do controle, atravs de programao.
checked: Valor boleano que indica se o controle est marcado (True) ou no (False).
name: nome do grupo. Para criar um grupo de controles do tipo RadioButton basta definir o mesmo nome para
todos os controles do grupo.
251 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Exemplo: Vamos criar um formulrio com trs controles do tipo RadioButton. O usurio seleciona uma opo e clica
no boto Enviar. Para processar as informaes enviadas pela pgina vamos utilizar a propriedade OnServerChange
do controle RadioButton. Esta propriedade permite que seja definido um procedimento que ser executado quando a
pgina for processada, em resposta a uma alterao no controle. Este procedimento detecta o tipo de carto selecionado
e exibe o tipo de carto em um controle do tipo text.
<body>
<form runat=server>
<h3><font face=Verdana>Selecione o tipo de carto:</font></h3>
<input type=radio
id=Visa
name=Cartao
OnServerChange=Server_Change
runat=server/>
Visa<br>
<input type=radio
id=Master
name=Cartao
www.juliobattisti.com.br 252
CAPTULO 7: HTML SERVER CONTROLS
OnServerChange=Server_Change
runat=server/>
Master Card<br>
<input type=radio
id=Outros
name=Cartao
OnServerChange=Server_Change
runat=server/>
Outros
<p>
<input id=Exibe type=text size=60 runat=server>
<p>
<input type=submit id=Enviar
value=Enviar
runat=server>
</form>
</body>
</html>
Digite o cdigo da Listagem 7.5 e salve o mesmo em um arquivo chamado chap7ex6aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex6aspx
Ao carregarmos esta pgina no Internet Explorer, obtemos um formulrio com trs controles do tipo RadioButton.
Podemos selecionar um dos controles. D um clique na opo Visa. Agora d um clique na opo Master Card.
Observe que a opo Visa foi, automaticamente, desmarcada. D um clique no boto Enviar. Voc obter o resultado
indicado na Figura 7.8.
A novidade neste exemplo que, ao invs de utilizar o evento Click do boto de comando, utilizamos um evento
definido pela propriedade OnServerChange dos controles do tipo RadioButton.
253 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
A vantagem de utilizarmos os controles de servidor que temos acesso a uma srie de propriedades e mtodos dos
controles de servidor. Por exemplo, podemos adicionar ou remover linhas e colunas dinamicamente, com base em
eventos ocorridos na pgina. Atravs de programao podemos utilizar os mtodos das colees
HtmlTableRowCollection e HtmlTableCellCollection para adicionar ou remover elementos da tabela.
Vamos estudar cada um dos controles individualmente, e depois vamos apresentar alguns exemplos de utilizao.
O Controle HtmlTable
Temos a seguinte sintaxe para este controle:
<table
runat=server
id=identificao_no_cdigo
align=left | center | right
bgcolor=cor de fundo
border=tamanho da borda em pixels
www.juliobattisti.com.br 254
CAPTULO 7: HTML SERVER CONTROLS
bordercolor=cor da borda
cellpadding=espao entre a borda e o contedo da clula, em pixels.
cellspacing= espao entre as clulas, em pixels
height=altura da tabela
rows=um objeto do tipo coleo de linhas - HtmlTableRowCollection
width=largura da tabela
>
<tr><td></td></tr>
<tr><td></td></tr>
</table>
Observe que, alm de definir uma coleo de linhas, no parmetro rows, tambm podemos acrescentar linhas e clulas
utilizando as tags tradicionais: <tr> </tr> para adicionar linhas e <td> </td> para adicionar clulas dentro de uma linha
(colunas da tabela).
Quando utilizamos um server control HtmlTable para criar uma tabela, podemos imaginar a tabela como sendo formada
por uma coleo de linhas. Podemos adicionar ou remover itens desta coleo, atravs do cdigo de programao.
Tambm podemos imaginar cada linha, como uma coleo de clulas. Podemos adicionar ou remover itens desta
coleo, utilizando cdigo de programao. No final deste item veremos um exemplo prtico de adio de linhas e
clulas utilizando cdigo de programao.
O Controle HtmlTableRow
Temos a seguinte sintaxe para este controle:
<tr
runat=server
id=identificao_no_cdigo
align=alinhamento para o contedo da linha
bgcolor=cor de segundo plano
bordercolor=cor da borda
height=altura da linha
cells=um objeto do tipo HtmlTableCellCollection
valign=alinhamento vertical do contedo da linha
>
<td>Contedo da clula</td>
<td> Contedo da clula </td>
<td> Contedo da clula </td>
</tr>
255 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O Controle HtmlTableCell
Temos a seguinte sintaxe para este controle:
<td ou th
runat=server
id=identificao_no_cdigo
align=alinhamento para o contedo da linha
bgcolor=cor de segundo plano
bordercolor=cor da borda
height=altura da clula
nowrap=true | false
rowspan ou colspan=nmero de linhas ou clulas para mesclar
valign=alinhamento vertical do contedo da linha
width=largura da clula
>
Contedo da clula.
</td or /th>
nowrap: Pode ter o seu valor definido como true; neste caso ocorre o retorno automtico do texto ao alcanar
o final da clula, caso o contedo da clula no caiba no tamanho definido para a clula. Se o valor for
definido em false, no ocorrer o retorno automtico.
colspan ou rowspan: Esta propriedade utilizada para mesclar clulas. Por exemplo, se temos uma tabela com
duas colunas, porm em uma das linhas queremos mesclar as duas colunas, utilizamos o seguinte cdigo:
<tr>
<td width=100% colspan=2">Contedo da Clula</td>
</tr>
Um Exemplo Prtico
Vamos apresentar um exemplo, no qual demonstramos a capacidade de adicionar linhas e clulas, dinamicamente, a
uma tabela, utilizando cdigo de programao. Ao carregar a pgina, exibida uma tabela de uma nica clula. Vamos
criar um formulrio onde so apresentados dois campos para o usurio. No primeiro, o usurio digita o nmero de
linhas para a tabela. No segundo campo, o usurio digita o nmero de colunas. Ao clicar no boto Enviar, utilizaremos
o evento Load da pgina, para criar uma tabela com o nmero de linhas e colunas especificadas pelo usurio.
www.juliobattisti.com.br 256
CAPTULO 7: HTML SERVER CONTROLS
int row = 0;
257 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</head>
<body>
<h3><font face=Verdana>HtmlTable Example</font></h3>
<form runat=server>
<font face=Verdana size=-1">
<p>
<table id=Table1"
CellPadding=5
CellSpacing=0
Border=1"
BorderColor=black
runat=server />
<p>
Nmero de linhas :
<input id=Linhas type=text size=10 value=1" runat=server>
<BR>
Nmero de colunas :
<input id=Colunas type=text size=10 value=1" runat=server>
<BR>
www.juliobattisti.com.br 258
CAPTULO 7: HTML SERVER CONTROLS
</form>
</body>
</html>
Digite o cdigo da Listagem 7.6 e salve o mesmo em um arquivo chamado chap7ex7aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex7aspx
Ao carregarmos esta pgina no Internet Explorer, obtemos uma tabela com uma linha e uma coluna e um formulrio
com dois campos para digitao. O valor padro destes campos definido como 1, conforme indicado na Figura 7.9.
Digite 3 para o nmero de linhas e 3 para o nmero de colunas. D um clique no boto Gerar a tabela dinamicamente.
Uma tabela com trs linhas e trs colunas por linha ser automaticamente gerada, conforme indicado na Figura 7.10.
259 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Na seo de apresentao da pgina, criamos um formulrio com dois campos para digitao do nmero de
linhas e colunas da tabela a ser gerada dinamicamente. Tambm colocamos um boto do tipo Submit.
Na seo de cdigo interessante observar que no utilizamos o evento Click do boto Enviar do formulrio.
Poderamos ter utilizado este evento, como j fizemos em exemplos anteriores. No exemplo da pgina
chap7ex7.aspx optamos por utilizar o evento Load do objeto Page. Lembrando do que foi apresentado no incio
do captulo, toda pgina APS.NET, ao ser carregada, compilada e um objeto do
tipo Page gerado. Este objeto baseado na classe Page do namespace
System.Web.UI. Sendo um objeto, temos aceso a seus mtodos, propriedades e IMPORTANTE: Uma
demais membros. A seguir temos o cdigo para a declarao do evento Load da tabela dinmica
pgina: formada por uma coleo
void Page_Load(Object sender, EventArgs e) de linhas, onde cada linha
Iniciamos o procedimento declarando trs variveis do tipo inteiro: formada por uma
coleo de clulas. Com
int row = 0; esta idia em mente
int numrows = Convert.ToInt32(Linhas.Value); que, atravs do cdigo do
int numcells = Convert.ToInt32(Colunas.Value); evento Load, vamos criar
uma tabela com o
A varivel row utilizada para definir se estamos em uma linha mpar (1, 3, etc.) ou em
nmero de linhas e
uma linha par (2, 4, etc). Para as linhas pares definiremos uma cor de fundo diferente,
colunas digitado pelo
para dar um efeito especial na apresentao da tabela.
usurio.
www.juliobattisti.com.br 260
CAPTULO 7: HTML SERVER CONTROLS
A varivel numrows contm o nmero de linhas digitado pelo usurio. Observe que temos que converter o valor
digitado pelo usurio para um tipo Int32. Esta operao necessria porque os valores digitados em um campo de um
formulrio so considerados valores de texto. A varivel numcells contm o nmero de colunas digitado pelo usurio.
Tambm convertemos este nmero para Int32.
Em seguida iniciamos dois laos for. O lao for externo varia de 0 at o nmero de linhas especificado pelo usurio.
O lao for interno varia, para cada valor do lao externo, de 0 at o nmero de colunas especificado pelo usurio,
conforme indicado pelo trecho de cdigo a seguir:
if (row%2 == 1)
r.BgColor=Gainsboro;
row++;
261 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
No incio do lao, declaramos e inicializamos uma varivel r, do tipo HtmlTableRow. Estamos criando um objeto do
tipo HtmlTableRow. Isto feito com o seguinte cdigo:
Em seguida um teste para definir se estamos em uma linha par ou mpar. O teste divide o nmero da linha por 2 e
retorna o resto da diviso. Se este resto for igual a 1 estamos em uma linha mpar e a cor de segundo plano alterada.
Observe que, para alterar a cor de segundo plano, utilizamos a propriedade BgColor do objeto r, que um objeto do
tipo HtmlTableRow( ). Isto feito pelo seguinte trecho de cdigo:
if (row%2 == 1)
r.BgColor=Gainsboro;
row++;
Gainsboro o nome de uma cor. Ao invs do nome poderamos utilizar os tradicionais cdigos de seis dgitos
hexadecimais. Por exemplo: #000000 para preto, #FFFFFF para branco, #FF0000 para vermelho e assim por diante.
Aps definirmos o nome da cor, incrementamos a varivel inteira row. Observe que com ASP.NET e a biblioteca de
classes do Framework .NET, a programao para Web ficou muito mais parecida com a programao tradicional para
Windows, orientada a eventos.
Na seqncia do cdigo entramos no lao for interno. Neste lao declarada e inicializada uma varivel c, do tipo
HtmlTableCell( ). Para cada passagem do lao interno vamos adicionar uma clula, a coleo de clulas do objeto
HtmlTableRow atual. Na prtica estamos adicionando as colunas para a linha atual. Tambm feita a definio do
contedo para a clula.
r.Cells.Add(c);
Para cada passada do lao interno uma nova clula adicionada linha. Ao final, a linha ter tantas clulas quantas
forem as colunas especificadas pelo usurio.
Uma vez que adicionamos vrias clulas coleo de clulas da linha, o passo final adicionar a linha coleo de
linhas da tabela. Isto feito no seguinte comando:
Table1.Rows.Add(r);
Para cada passada do lao externo uma nova linha adicionada coleo de linhas da tabela. Ao final teremos uma
tabela com tantas linhas quantas especificadas pelo usurio e, em cada linha, tantas clulas quantas o nmero de
colunas especificado pelo usurio. Em resumo: exatamente o resultado proposto pelo exemplo.
www.juliobattisti.com.br 262
CAPTULO 7: HTML SERVER CONTROLS
HTMLSelect Control
utilizado para a criao de controles do tipo caixa de seleo, onde so apresentados diversos itens em uma
lista, onde o usurio pode selecionar um determinado item. A funcionalidade idntica tag <SELECT> </
SELECT) do HTML.
<select
runat=server
id=identificao_no_cdigo
OnServerChange=onserverchangehandler
DataSource=fonte de dados
DataTextField=descrio do campo ao qual vinculada a caixa de seleo
DataValueField=valor do campo ao qual vinculada a caixa de seleo
Multiple
Items=coleo de elementos do tipo options
SelectedIndex=ndice do elemento atualmente selecionado
Size=nmero de itens visveis ao mesmo tempo. Por padro 1"
Value=Valor do item atualmente selecionado
>
<option>Texto para a opo 1</option>
<option>Texto para a opo 2</option>
...
<option>Texto para a opo n</option>
</select>
Eu no me canso de repetir: Sendo este um controle de servidor, o mesmo criado como um objeto no momento da
compilao da pgina ASP.NET. Sendo um objeto, temos acesso a suas propriedades e mtodos.
Utilizando a maneira tradicional, onde cada elemento definido atravs de um conjunto de tags <option>
Texto </option>, com uma tag para cada elemento da lista.
Utilizando a coleo Items, qual podemos adicionar dinamicamente, atravs de programao, elementos do
tipo options. Esta coleo uma instncia da classe ListItemCollection, a qual pertence ao namespace
System.Web.UI.WebControls. Esta classe possui mtodos para adicionar e remover elementos, utilizando
programao.
263 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Uma lista com alguns nomes de cores. Ao lado desta lista temos um boto Aplicar. Ao clicar neste boto, a cor
selecionada na lista ser aplicada como cor de segundo plano de um controle do tipo texto existente no formulrio.
Um campo onde o usurio pode adicionar uma cor lista de cores. Ao lado deste campo temos um boto. Ao
clicar neste boto, a cor digitada no campo ser adicionada lista de cores. Para isso utilizaremos o evento
Click deste boto.
Um campo onde exibimos um determinado texto e onde aplicada a cor de segundo plano selecionada na lista
de cores.
</script>
</head>
<body>
<form runat=server>
Selecione uma cor:<br>
www.juliobattisti.com.br 264
CAPTULO 7: HTML SERVER CONTROLS
<p>
</form>
</body>
</html>
Digite o cdigo da Listagem 7.7 e salve o mesmo em um arquivo chamado chap7ex8aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex8.aspx
Na lista de cores selecione SkyBlue e d um clique no boto Aplicar. Observe que a cor de segundo plano do texto, no
final do formulrio, alterada, conforme indicado na Figura 7.11.
Agora vamos adicionar uma cor lista. No campo para digitao de texto digite Red e d um clique no boto
AdicionaALista. Abra a lista e observe que a cor Red (vermelho) j faz parte das opes da Lista, conforme indicado
na Figura 7.12.
265 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br 266
CAPTULO 7: HTML SERVER CONTROLS
Quando o usurio seleciona uma cor na lista de cores e clica no boto Aplicar, disparado o evento Click do
boto. Em resposta a este evento executado o procedimento Aplicar_Click. Este procedimento utiliza a
propriedade Style do controle Span1 para definir a cor de segundo plano como sendo a cor selecionada na lista
de cores. O procedimento Aplicar_Click est indicado no trecho de cdigo a seguir:
void Aplicar_Click(object Source, EventArgs e)
{
Span1.Style[background-color] = ColorSelect.Value;
}
<a
runat=server
id=identificao_no_cdigo
href=enereo absoluto ou relativo
name=nome quando adicionado lista de favoritos do navegador
OnServerClick=nome do procedimento a ser executado em resposta a um click no
link
target=abre na mesma janela, em uma nova janela, em um frame da janela atual,
etc
title=ttulo a ser exibido na janela de ttulo do navegador
>
Texto do link.
</a>
267 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Exemplo: Vamos criar um formulrio com dois links. Um link aponta para a pgina chap7ex8.aspx e outro para a
pgina chap7ex7.aspx.
</script>
<body>
<l
<H1>Selecione um dos links abaixo !!! </H1>
<TABLE>
<TR>
<TD>
<a href=chap7ex7.aspx runat=server id=link1">
Exemplo 7 do Captulo 7.
</a>
</TD>
</TR>
<TR>
<TD>
<a href=chap7ex8.aspx runat=server id=link2">
Exemplo 8 do Captulo 7.
</a>
</TD>
</TR>
</TABLE>
</body>
</html>
www.juliobattisti.com.br 268
CAPTULO 7: HTML SERVER CONTROLS
Digite o cdigo da Listagem 7.8 e salve o mesmo em um arquivo chamado chap7ex9aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex9.aspx
HtmlInputButton Control
utilizado para a criao de um boto de comando em um formulrio. O boto de comando normalmente utilizado
para enviar os dados do formulrio para processamento. J tivemos diversos exemplos de utilizao deste controle.
Para v-lo em funcionamento, inclusive com cdigo para responder ao evento Click do boto, consulte os seguintes
exemplos deste captulo:
chap7ex3.aspx
chap7ex4.aspx
chap7ex5.aspx
chap7ex8.aspx
<input
type=button | submit | reset
269 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
runat=server
id=identificao_no_cdigo
OnServerClick=nome do procedimento a ser executado em resposta ao evento Click
>
HtmlButton Control
utilizado para a criao de botes de comandos mais sofisticados dos que os criados pelo controle HtmlInputButton.
Com este controle temos acesso a uma srie de mtodos e eventos, os quais permitem a criao de alguns efeitos
interessantes. Alm do texto podemos associar uma determinada figura com o boto de comando.
<button
runat=server
id=identificao_co_cdigo
OnServerClick=procedimento a ser executado ao clicarmos no boto
>
texto ou image
</button>
Este elemento bastante rico em funcionalidade. Podemos aplicar uma srie de efeitos interessantes ao mesmo.
Vamos criar um formulrio, baseado em um exemplo da documentao do Framework .NET, onde temos dois controles
HtmlButton. Vamos utilizar o evento Click de cada controle para informar quando um dos controles foi clicado.
Tambm vamos utilizar a propriedade Style para definir algumas caractersticas visuais de cada controle. Em um dos
controles alm do texto, adicionaremos uma pequena imagem. A imagem est em um arquivo chamado seta.gif, o qual
deve estar gravado na pasta Chap7. Para o segundo boto vamos aplicar um efeito onmouseover, ou seja, quando o
usurio estiver com o mouse sobre alguma parte do boto, faremos com que a cor de segundo plano do boto seja
modificada. Quando o mouse sair da rea do boto, volta a cor de segundo plano original.
www.juliobattisti.com.br 270
CAPTULO 7: HTML SERVER CONTROLS
<body>
<h3><font face=Verdana>Exemplo do controle HtmlButton!</font></h3>
<form runat=server>
<font face=Verdana size=-1">
<p>
<button id=Button1"
OnServerClick=Button1_OnClick
style=font: 8pt verdana;
background-color:lightgreen;
border-color:black;
height=30;
width:110"
runat=server>
<img src=seta.gif> Clique em mim!
</button>
<button id=Button2
OnServerClick=Button2_OnClick
style=font: 8pt verdana;
background-color:lightgreen;
border-color:black;
height=30;
width:110"
onmouseover=this.style.backgroundColor=yellow
onmouseout=this.style.backgroundColor=lightgreen
runat=server>
271 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Clique em mim!
</button>
<p>
<p>
<b><span id=Span1 runat=server /></b>
</font>
</form>
</body>
</html>
Digite o cdigo da Listagem 7.9 e salve o mesmo em um arquivo chamado chap7ex10aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex10.aspx
Clique no primeiro boto. Observe que o texto Voc clicou no boto 1 exibido. Agora passe o mouse sobre o
segundo boto. Observe que a cor de fundo trocou para amarelo. Afaste o mouse do segundo boto. Observe que a cor
de fundo voltou ao normal. Agora clique no segundo boto. O texto Voc clicou no boto 2 exibido, conforme
indicado na Figura 7.14.
www.juliobattisti.com.br 272
CAPTULO 7: HTML SERVER CONTROLS
Mais uma vez utilizamos o evento Click de cada boto para enviar uma mensagem informando qual boto foi
clicado.
A aparncia dos botes foi definida atravs da sua propriedade style. Por exemplo, para o primeiro boto
fizemos as seguintes definies:
style=font: 8pt verdana;
background-color:lightgreen;
border-color:black;
height=30;
width:110"
Observe que atravs da propriedade style podemos definir uma srie de elementos visuais para o boto. Neste exemplo
estamos definindo as seguintes propriedades:
HtmlImage Control
IMPORTANTE: Algumas
utilizado para Inserir figuras em uma pgina ASP.NET. A sua funcionalidade idntica
destas definies fazem
tag <img> da linguagem HTML, com a diferena de que, em sendo um controle de
parte do HTML 4.0 e
servidor, temos acesso a uma srie de mtodos e eventos do controle.
somente funcionaro
Sintaxe para o controle HtmlImage: corretamente com o
Internet Explorer 4.0 ou
<img superior.
id=identificao_no_cdigo
runat=server
alt=texto exibido quando o usurio aponta o mouse para a imagem
align= top | middle | bottom | left | right
border=largura da borda
273 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
height=altura da imagem
src=localizao da imagem
width=largura da imagem
>
Exemplo: Vamos criar um formulrio onde exibida uma imagem. Tambm exibimos uma lista de seleo com nomes
de outras imagens. Esta lista criada utilizando o controle HtmlSelect explicado anteriormente. O usurio seleciona
um nome de imagem na lista e clica no boto Aplicar. O evento Click do boto faz com que a imagem associada
opo selecionada na lista seja exibida.
</script>
</head>
<body>
<h3><font face=Verdana>Exemplo do controle HtmlImage!!!</font></h3>
<form runat=server>
www.juliobattisti.com.br 274
CAPTULO 7: HTML SERVER CONTROLS
<option Value=Cereal5.gif>Strike</option>
<option Value=Cereal7.gif>Fruity Pops</option>
</select>
<p>
<p>
</body>
</html>
Digite o cdigo da Listagem 7.10 e salve o mesmo em um arquivo chamado chap7ex11aspx, na pasta chap7, dentro da
pasta wwwroot, conforme descrito anteriormente. Para acessar esta pgina utilize o seguinte endereo: http://localhost/
chap7/chap7ex11.aspx
Ser exibida a figura para o cereal Healthy Grains, conforme indicado na Figura 7.15.
Selecione uma outra opo na lista; por exemplo, selecione U.F.O.S e d um clique no boto Aplicar. A figura
correspondente ser exibida.
275 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Tambm interessante observarmos o cdigo que retornado, como resultado do processamento da pgina.
Por exemplo, quando voc seleciona U.F.O.S e clica em aplicar, a figura associada a opo U.F.O.S exibida.
Agora vamos dar uma olhada no cdigo HTML que foi enviado pelo servidor, como resultado do processamento
da pgina.
Para visualizar o cdigo HTML correspondente, utilize o seguinte comando no Internet Explorer: Exibir -> Cdigo-
fonte. Selecionando este comando ser exibido o cdigo a seguir:
<html>
<head>
</head>
<body>
<h3><font face=Verdana>Exemplo do controle HtmlImage!!!</font></h3>
<form name=ctrl0" method=post action=chap7ex11.aspx id=ctrl0">
www.juliobattisti.com.br 276
CAPTULO 7: HTML SERVER CONTROLS
Este um campo oculto (type=hidden), o qual utilizado para manter o estado dos controles do formulrio entre
uma chamada e outra da pgina. Para maiores informaes sobre a manuteno de estado consulte os tpicos iniciais
deste captulo.
Concluso
Quando uma pgina .aspx acessada, o servidor compila a pgina em um objeto derivado da classe Page. Cada
elemento da pgina compilado como um objeto. Desta forma temos acesso a mtodos e propriedades dos diversos
elementos.
Iniciamos o captulo estudando a classe page. Apresentamos as principais propriedades, eventos e mtodos desta
classe. Tambm falamos sobre o processamento de uma pgina .aspx. Falamos sobre os conceitos de PostBack e
round-trip.
Em seguida passamos definio do que so Html Server controls e quais as vantagens em utiliz-los em substituio
s tags HTML tradicionais.
Uma vez entendidos os conceitos tericos necessrios, passamos ao estudo dos principais HTML Server Controls.
Estudamos e apresentamos exemplos dos seguintes controles:
277 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
HTMLForm control.
HTMLInputText control.
HTMLInputCheckBox control.
HtmlTextArea control.
HTMLInputRadioButton control.
HtmlTable control.
HtmlTableRow control.
HtmlTableCell control.
HTMLSelect control.
HTMLAnchor control.
HtmlInputButton control.
HtmlButton control.
HtmlImage control.
No prximo captulo trataremos de controles que j vm com uma certa inteligncia embutida. Veremos os Valida-
tion Server Controls.
www.juliobattisti.com.br 278
CAPTULO 8: VALIDATION SERVER CONTROLS
Introduo CAPTULO
Para explicarmos mais esta novidade do ASP.NET: Validation Server Controls,
vamos novamente fazer uma analogia com as verses anteriores do ASP. O assunto
8
em pauta validao da entrada de dados em formulrio.
Vamos imaginar que voc cria um formulrio onde o internauta deva preencher
os seguintes dados:
Nome
Endereo
Validation Server Controls
e-mail
Fone
Profisso
Data de Nascimento
Valor do crdito pretendido
Renda mensal
Empresa onde trabalha
Endereo do site da empresa
Explicar a lgica que est por trs deste processo de validao j no uma tarefa
simples. Implementar toda esta validao bastante trabalhoso e exige muita
codificao. Para facilitar a vida do desenvolvedor, o ASP.NET apresenta uma srie
de controles que j vm com funcionalidades, no prprio controle, as quais facilitam
a validao dos dados digitados pelo usurio. Estes controles so conhecidos como:
Validation Controls ou Server Validation Controls, uma vez que so controles de
servidor, a exemplo dos HTML Server Controls que vimos no Captulo 7.
279 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Neste captulo vamos entender exatamente o que so os Server Validation Controls. Tambm aprenderemos a utilizar
os diversos controles disponveis. Iremos estudar os seguintes controles:
RequiredFieldValidator Control
CompareValidator Control
RangeValidator Control
CustomValidator Control
RegularExpressionValidator Control
Veremos diversos exemplos de utilizao destes controles.
No Captulo 7 ns vimos que, para cada tag HTML utilizada para a criao de formulrios, existe um HTML Server
Control correspondente. A vantagem dos HTML Server Controls que os mesmos so compilados como objetos em
uma pgina ASP.NET. Sendo objeto temos acesso aos mtodos e propriedades do controle. J os controles de validao
no possuem correspondentes no HTML. So na verdade controles completamente novos e no uma melhoria em
relao a controles j existentes.
Os controles de validao possuem as mesmas caractersticas que os chamados Web Server Controls (que sero
estudados no Captulo 9). Estes controles iniciam com a palavra asp, conforme exemplo a seguir, onde temos uma
pequena amostra da sintaxe do controle RequiredFieldValidator:
<asp:RequiredFieldValidator
Atributo1
Atributo2
...
Atributon>
</asp:RequiredFieldValidator>
Outra diferena quanto localizao das classes bases, ou seja, das classes das quais
NOTA: Estudaremos o so derivados os controles. Os HTMLServer controls so derivados de classes do
controle namespace System.Web.UI.HtmlControls; j os Web Server Controls, dos quais fazem
RequiredFieldValidator parte os controles de validao, so derivados de classes contidas no namespace
em detalhes ainda neste System.Web.UI.WebControls.
captulo.
www.juliobattisti.com.br 280
CAPTULO 8: VALIDATION SERVER CONTROLS
281 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
.NET Framework SDK -> .NET Framework Reference -> .NET Framework Class Library ->
System.Web.UI.WebControls -> BaseValidator Class.
ControlToValidate: Define ou retorna o nome do controle que ser associado ao controle de validao.
EnableClientScript: Habilita/desabilita a gerao automtica de cdigo de validao no cliente, quando o
navegador suporta tal funcionalidade. Esta propriedade do tipo Boleana, podendo assumir os valores True ou
False. Pode ser utilizada para retornar ou definir o valor desta propriedade.
Enabled: Propriedade do tipo Boleana (True ou False) que pode ser utilizada para definir ou retornar um valor
que indica se a validao est habilitada (True) ou desabilitada (False), para o controle.
ErrorMessage: utilizada para definir o texto da mensagem de erro associada ao controle de validao.
Tambm pode ser utilizada para obter o texto da mensagem de erro associada.
ForeColor: Utilizada para definir ou retornar a cor da mensagem de erro que ser exibida quando a
validao falhar.
ID: Define um identificador associado ao controle, identificador este que utilizado no cdigo para acessar as
propriedades e mtodos do controle.
IsValid: Propriedade do tipo Boleana (True ou False), que indica se a validao ocorreu com sucesso ou no.
Por exemplo, se o controle de validao do tipo que exige uma entrada obrigatria (RequiredFieldValidator)
e o usurio no digita nada no campo associado ao controle de validao, o teste de validao ir falhar e esta
propriedade conter o valor False, indicando que o controle no passou no teste de validao.
www.juliobattisti.com.br 282
CAPTULO 8: VALIDATION SERVER CONTROLS
Validate: responsvel por fazer a validao do controle associado com o controle de validao e atualizar a
propriedade IsValid para True se a validao ocorrer com sucesso ou para False, caso contrrio.
RegisterValidatorCommonScript: Pode ser utilizado para registrar cdigo na pgina, para que ocorra a
validao no cliente.
if (Page.IsValid)
{
lblOutput.Text = Parabns, voc acertou!!!;
}
else
{
283 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
}
</script>
</head>
<body>
<form runat=server>
<h3>Exemplo de validao.</h3>
<asp:RequiredFieldValidator id=Require1"
ControlToValidate=TextBox1"
Type=Integer
ErrorMessage=Voc no digitou nenhum nmero!!
Text=*
runat=server/>
<asp:TextBox id=TextBox1"
runat=server/>
<asp:CompareValidator id=Compare1"
ControlToValidate=TextBox1"
ValueToCompare=0"
EnableClientScript=False
Type=Integer
ErrorMessage=Nmero Incorreto!!
Text=*
runat=server/>
<br>
www.juliobattisti.com.br 284
CAPTULO 8: VALIDATION SERVER CONTROLS
<br>
<asp:Button id=Button1"
Text=Enviar
OnClick=Button_Click
runat=server/>
<br>
<br>
<asp:Label id=lblOutput
Font-Name=verdana
Font-Size=10pt
runat=server/>
<br>
<br>
<asp:ValidationSummary
id=Summary1"
runat=server/>
</form>
</body>
</html>
Digite o cdigo da Listagem 8.1 e salve o mesmo em um arquivo chamado chap8ex1.aspx, na pasta chap8, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
D um clique no boto Enviar, sem digitar nenhum valor no campo para digitao. Voc obter o resultado indicado
na Figura 8.1.
Agora digite um nmero entre 1 e 10 e clique no boto Enviar. Se voc acertar o nmero gerado pelo cdigo do
evento Button_Click, ser exibida a mensagem: Parabns, voc acertou!!!; caso contrrio ser exibida a mensagem
indicada na Figura 8.2.
285 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Prometi que no iria comentar o cdigo deste primeiro exemplo, mas apenas um comentrio rpido, em relao
gerao de nmeros aleatrios. Para gerar um nmero aleatoriamente, entre 1 e 10, declaramos e inicializamos uma
varivel (talvez seria melhor dizer um objeto) do tipo Random:
www.juliobattisti.com.br 286
CAPTULO 8: VALIDATION SERVER CONTROLS
A varivel rand_number baseada na classe Random, do namespace System. Em seguida utilizamos o mtodo Next
da classe Random, para gerar um nmero aleatrio entre 1 e 10.
O Controle RequiredFieldValidator
Este controle utilizado para garantir que um determinado campo seja preenchido, ou seja, no podemos deixar o
campo em branco. Conforme descrito anteriormente, os controles de validao so utilizados em conjunto com outros
controles do formulrio. Por exemplo, se tivermos um campo Nome, em um formulrio, podemos associar um controle
RequiredFieldValidator com o campo Nome, para garantir que o usurio seja obrigado a preencher o campo Nome.
<asp:RequiredFieldValidator
id=identificao no cdigo
runat=server
ControlToValidate=nome do controle associado
ErrorMessage=Mensagem de erro.
ForeColor=Red
BackColor=Grey
>
</asp:RequiredFieldValidator>
<asp:RequiredFieldValidator
id=identificao no cdigo
runat=server
ControlToValidate=nome do controle associado
ErrorMessage= Mensagem de erro.
ForeColor=Red
BackColor=Grey
/>
Observe que, ao invs de fechar a tag desta maneira: </asp:RequiredFieldValidator>, simplesmente utilizamos um />.
As duas sintaxes so vlidas.
287 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
id: um nome que identifica o controle. Este nome utilizado no cdigo para acessar as propriedades e
mtodos do controle.
runat=server: identifica como sendo um controle de servidor. Todos os controles asp: so controles de servidor.
ControlToValidate: Neste atributo definimos o nome do controle que ser validado pelo controle de validao.
Por exemplo, se o controle de validao est associado com um campo Nome do formulrio, nesta propriedade
devemos informar a identificao do controle Nome. A identificao o valor definido na propriedade id do
controle Nome. Esta frase foi repetitiva e enfadonha, de propsito, para que voc no esquea esta associao.
ErrorMessage: Podemos definir uma mensagem de erro que ser exibida, caso a validao do campo falhe.
Por exemplo, o usurio no preencheu um campo de preenchimento obrigatrio.
ForeColor: Utilizado para definir a cor do texto da mensagem de erro.
BackColor: Utilizado para definir a cor de segundo plano do texto da mensagem de erro.
Vamos a um exemplo simples. Vamos criar um formulrio onde temos dois campos:
e-mail
nome
O campo e-mail de preenchimento obrigatrio, j o campo nome de preenchimento opcional. Para garantir que o
campo e-mail seja preenchido vamos associar um controle de validao do tipo RequiredFieldValidator com o campo
e-mail. Se o campo email no for preenchido vamos emitir a seguinte mensagem:
</script>
</head>
<body>
www.juliobattisti.com.br 288
CAPTULO 8: VALIDATION SERVER CONTROLS
<form runat=server>
<asp:RequiredFieldValidator id=Requer_email
ControlToValidate=email
Type=String
ErrorMessage=O email de preenchimento obrigatrio,
por favor fornea o seu email e clique
no boto Enviar
Text=O e-mail obrigatrio!!
ForeColor=Red
runat=server/>
<table>
<tr>
<td><h3>Digite o e-mail:</h3> </td>
<td><input id=email type=text size=40 runat=server></td>
</tr>
<tr>
<td><h3>Digite o nome:</h3> </td>
<td><input id=nome type=text size=40 runat=server></td>
</tr>
<tr>
<td><h3>Cadastrar -></h3></td>
<td><input type=submit value=Enviar
OnServerClick=Enviar_Click runat=server>
</td>
</tr>
</table>
<asp:ValidationSummary
289 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
id=Summary1"
runat=server/>
</form>
</body>
</html>
Digite o cdigo da Listagem 8.2 e salve o mesmo em um arquivo chamado chap8ex2.aspx, na pasta chap8, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
No campo e-mail digite: jose@abc.com.br. No campo Nome digite: Jos da Silva. D um clique no boto Enviar. Voc
obter o resultado indicado na Figura 8.3.
Deixe o campo e-mail em branco. No campo Nome digite: Jos da Silva. D um clique no boto Enviar. Voc obter
o resultado indicado na Figura 8.4.
Observe que neste caso o campo de validao detectou que o campo e-mail no foi preenchido e avisou.
www.juliobattisti.com.br 290
CAPTULO 8: VALIDATION SERVER CONTROLS
Na seo de cdigo no fizemos absolutamente nada. Somente colocamos o evento Enviar_Click e no corpo
do procedimento alguns comentrios. Por exemplo, no corpo deste procedimento poderamos detectar se a
validao ocorreu com sucesso para todos os controles e, em caso afirmativo, enviar as informaes digitadas
pelo usurio para um banco de dados. Por enquanto ainda no sabemos fazer a conexo com banco de dados.
Aprenderemos a conectar com banco de dados a partir do Captulo 10.
Na seo de apresentao criamos um formulrio com dois controles (HtmlServerControls) do tipo texto
(type=text). Um para o usurio digitar o e-mail e outro para digitar o nome. Queremos que o campo e-mail seja
de preenchimento obrigatrio. Para isso utilizamos um controle de validao do tipo RequiredFieldValidator.
A insero do controle de validao feita com o trecho de cdigo a seguir:
<asp:RequiredFieldValidator id=Requer_email
ControlToValidate=email
Type=String
ErrorMessage=O email de preenchimento obrigatrio,
por favor fornea o seu email e clique
no boto Enviar
Text=O e-mail obrigatrio!!
ForeColor=Red
runat=server/>
291 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
ControlToValidate=email
Com a definio deste atributo estamos informando que o campo a ser validado, ou seja, o campo que de preenchimento
obrigatrio o campo e-mail do formulrio. Neste atributo (ControlToValidate) informamos o ID do campo a ser validado.
O texto do atributo ErrorMessage vai ser exibido em um controle do tipo ValidationSumary. Por isso que inclumos
um controle deste tipo, no final do formulrio; caso contrrio o texto definido no atributo ErrorMessage no seria
exibido. No trecho de cdigo a seguir temos a definio do controle ValidationSumary:
<asp:ValidationSummary
id=Summary1"
runat=server/>
O atributo Text define o texto que ser exibido no local onde o controle de validao est definido, caso a validao
falhe. Aqui podemos fazer um teste interessante, para comprovar que realmente gerado cdigo para validao no
Cliente, quando o navegador o Internet Explorer, conforme descrito no incio do captulo. Para provar isto vamos
fazer o seguinte teste:
Clique no campo e-mail e apague o que estiver neste campo. Pressione a tecla <TAB> para ir para o campo Nome.
Observe que o texto O e-mail obrigatrio!! (conforme definido no atributo Text do controle de validao) aparece
acima do campo e-mail, sem que tenhamos clicado no boto Enviar, conforme indicado na Figura 8.5.
www.juliobattisti.com.br 292
CAPTULO 8: VALIDATION SERVER CONTROLS
Se voc clicar no boto Enviar, estando o campo e-mail em branco tambm ser exibida a mensagem de erro O email
de preenchimento obrigatrio, por favor fornea o seu e-mail e clique no boto Enviar. Este texto est definido no
atributo ErrorMessge do controle de validao Requer_email e exibido no controle Summary1, que um controle do
tipo ValidationSummary, especificamente projetado para exibir mensagens de erro quando algum campo no validado.
Com este exemplo j podemos ter uma boa idia do funcionamento dos controles de validao. Se voc voltar para o
exemplo da Listagem 8.1, j ter condies de entender grande parte do exemplo. Agora vamos continuar estudando
os demais tipos de controle de validao disponveis com o ASP.NET.
O Controle CompareValidator
Este controle utilizado para comparar o valor digitado em um campo associado com o controle CompareValidator,
com um valor constante, com um valor de outro campo (atravs da utilizao da propriedade value deste outro campo)
ou com o valor de um campo de uma tabela em um banco de dados. Se o valor digitado ou selecionado para o campo
no for igual ao valor de comparao, o controle no passar no teste de validao.
<asp:CompareValidator
id=identificao no cdigo
runat=server
ControlToValidate=nome do controle associado
ValueToCompare=um valor constante
Type=Tipo do valor a ser comparado: string, Int32, Double, etc.
Operator=Operador de comparao: maior do que, menor do que, etc.
ErrorMessage=Mensagem de erro.
ForeColor=Cor da fonte.
BackColor=Cor de segundo plano
>
</asp:CompareValidator>
<asp:CompareValidator
id=identificao no cdigo
runat=server
ControlToValidate=nome do controle associado
ValueToCompare=um valor constante
Type=Tipo do valor a ser comparado: string, Int32, Double, etc.
Operator=Operador de comparao: maior do que, menor do que, etc.
293 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
ErrorMessage=Mensagem de erro.
ForeColor=Cor da fonte.
BackColor=Cor de segundo plano
/>
Observe que, ao invs de fechar a tag desta maneira: </asp:CompareValidator>, simplesmente utilizamos um />. As
duas sintaxes so vlidas.
id: um nome que identifica o controle. Este nome utilizado no cdigo para acessar as propriedades e
mtodos do controle.
runat=server: identifica como sendo um controle de servidor. Todos os controles asp: so controles de
servidor.
ControlToValidate: Neste atributo definimos o nome do controle que ser validado pelo controle de validao.
Por exemplo, se o controle de validao est associado com um campo Nome do formulrio, nesta propriedade
devemos informar a identificao do controle Nome. A identificao o valor definido na propriedade id do
controle Nome. Esta frase foi repetitiva e enfadonha, novamente, de propsito, para que voc no esquea esta
associao.
ValueToCompare: Define o valor de comparao. Pode ser uma constante, o valor contido em um outro campo
ou em um banco de dados.
Type: Define o tipo de dados do valor de comparao.
Operator: Define o operador de comparao.
ErrorMessage: Podemos definir uma mensagem de erro que ser exibida, caso a validao do campo falhe.
Por exemplo, o usurio no preencheu um campo de preenchimento obrigatrio.
ForeColor: Utilizado para definir a cor do texto da mensagem de erro.
BackColor: Utilizado para definir a cor de segundo plano do texto da mensagem de erro.
Vamos a um exemplo simples. Vamos criar um formulrio onde temos um campo para digitao, onde deve ser
digitado um valor menor do que 100. Vamos utilizar um controle CompareValidator para verificar se o nmero digitado
atende o critrio de ser menor do que 100.
www.juliobattisti.com.br 294
CAPTULO 8: VALIDATION SERVER CONTROLS
</head>
<body>
<form runat=server>
<BR>
<B>
<asp:CompareValidator
id=valida_valor
runat=server
ControlToValidate=valor
ValueToCompare=100"
Type=Double
Operator=LessThan
ErrorMessage=Digite um valor menor do que 100.
ForeColor=Blue
BackColor=Cyan
>
</asp:CompareValidator>
</B>
<BR>
<BR>
</form>
</body>
</html>
295 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o cdigo da Listagem 8.3 e salve o mesmo em um arquivo chamado chap8ex3.aspx, na pasta chap8, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
No campo valor digite 50. D um clique no boto Enviar. Observe que nenhuma mensagem de erro emitida.
Agora digite 120 no campo valor. D um clique no boto Enviar. Voc obter uma mensagem de erro, conforme
indicado na Figura 8.6.
Observe que neste caso o campo de validao detectou que o campo valor possui um valor maior do que 100 e a
mensagem de erro foi exibida.
ValueToCompare=100" : Esta propriedade define um valor constante para comparao com o valor digitado.
Operator=LessThan: Nesta propriedade definimos o operador de comparao. No exemplo definimos menor
do que (LessThan). Na Tabela 8.1 temos a definio dos operadores permitidos para esta propriedade.
Valor Descrio
Equal Igual a.
GreaterThan Maior do que.
GreaterThanEqual Maior ou igual a.
www.juliobattisti.com.br 296
CAPTULO 8: VALIDATION SERVER CONTROLS
Valor Descrio
LessThan Menor do que.
LessThanEqual Menor ou igual a.
NotEqual Diferente.
<asp:CompareValidator
id=valida_valor NOTA: Estes valores
runat=server
esto definidos em uma
estrutura do tipo
ControlToValidate=valor
Enumeration, chamada
ControlToCompare=ValorDeReferncia
ValidationCompareOperator.
Type=Double Esta estrutura faz parte
Operator=LessThan do namespace
ErrorMessage=Digite um valor menor do que 100. System.Web.UI.WebControls.
ForeColor=Blue
BackColor=Cyan
>
</asp:CompareValidator>
Com esta modificao, o valor digitado no campo valor ser comparado com o valor do controle ValorDeReferncia,
devendo ser menor do que este valor, conforme definio da propriedade Operator=LessThan.
O Controle RangeValidator
No item anterior estudamos o controle CompareValidator, o qual permite fazer validaes com base em um determinado
valor e um operador de comparao. Para comparaes que envolvem uma faixa de valores (com limites inferior e
superior), precisamos utilizar o controle RangeValidator. Por exemplo, com o controle RangeValidator podemos verificar
se os valores digitados no campo Salrio esto entre 1000 e 5000.
<asp:RangeValidator
id=identificao no cdigo
runat=server
297 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:RangeValidator
id=identificao no cdigo
runat=server
ControlToValidate=nome do controle associado
MinimumValue=limite inferior da faixa
MaximumValue=limite superior da faixa
Type=Tipo do valor a ser comparado: string, Int32, Double, etc.
ErrorMessage=Mensagem de erro.
ForeColor=Cor da fonte.
BackColor=Cor de segundo plano
/>
Observe que, ao invs de fechar a tag desta maneira: </asp:RangeValidator>, simplesmente utilizamos um />. As duas
sintaxes so vlidas.
www.juliobattisti.com.br 298
CAPTULO 8: VALIDATION SERVER CONTROLS
</head>
<body>
<form runat=server>
<BR>
<B>
<asp:RangeValidator
id=valida_valor
runat=server
ControlToValidate=valor
MinimumValue=20"
MaximumValue=50"
Type=Double
ErrorMessage=Digite um valor entre 20 e 50!!
ForeColor=Blue
BackColor=Cyan
>
</asp:RangeValidator>
</B>
<BR>
<BR>
299 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</form>
</body>
</html>
Digite o cdigo da Listagem 8.4 e salve o mesmo em um arquivo chamado chap8ex4.aspx, na pasta chap8, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
No campo valor digite 35, que um valor dentro da faixa definida no controle RangeValidator: entre 20 e 50. D um
clique no boto Enviar. Observe que nenhuma mensagem de erro emitida.
Agora digite 15 no campo valor. D um clique no boto Enviar. Voc obter uma mensagem de erro, conforme
indicado na Figura 8.7.
Observe que neste caso o campo de validao detectou que o campo valor possui um valor fora da faixa (entre 20 e 50)
e a mensagem de erro foi exibida.
O Controle CustomValidator
Este controle permite que criemos nossas prprias regras de validao. Por exemplo, podemos precisar de um controle
de validao para verificar se o nmero digitado em um controle divisvel por 5. Outro exemplo poderia ser a criao
de um controle para fazer a validao do dgito verificador de um campo CPF ou CNPJ. Para validaes complexas,
www.juliobattisti.com.br 300
CAPTULO 8: VALIDATION SERVER CONTROLS
deste tipo, no temos controles prontos, precisamos criar um controle personalizado, utilizando como base o controle
CustomValidator e definindo as funes de validao correspondentes.
<asp:CustomValidator
id=identificao no cdigo
runat=server
ControlToValidate=controle a ser validado
ClientValidationFunction=Nome da funo que far a validao para validao no
Cliente.
OnServerValidate=Nome do procedimento na seo de cdigo da pgina para
validao no servidor
ErrorMessage=Mensagem de erro
ForeColor=Cor do texto da mensagem de erro.
BackColor=Cor de segundo plano da mensagem de erro.
>
</asp:CustomValidator>
A validao pode ser definida para acontecer no cliente, sem que a pgina tenha sido enviada para processamento ou
no servidor, quando a pgina enviada para processamento.
Outro detalhe importante que podemos utilizar mais do que um controle de validao associado com o mesmo
campo. Vamos imaginar um campo quantidade em um formulrio de compra. Podemos utilizar um controle
RequiredFieldValidator para fazer com que o usurio seja obrigado a digitar um valor neste campo e um controle
CustomValidator para garantir que o valor digitado no seja maior do que o valor em estoque. A funo de validao
do controle CustomValidator pode buscar no banco de dados de estoque a quantidade de itens disponveis e no
aceitar que o usurio digite um valor maior do que o disponvel em estoque.
A seguir apresentamos um exemplo da documentao do Framework .NET, onde foi utilizado um controle
CustomValidator para fazer com que seja digitado um nmero par em um campo do formulrio. Observe que, embora
seja uma funo simples de validao, no temos um controle especfico para esta funo. Por isso precisamos criar
uma funo de validao. No exemplo apresentado, temos a validao no servidor. O nome do procedimento que far
301 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
OnServerValidate=ServerValidation
onde ServerValidation o nome do procedimento, na seo de cdigo da pgina, que far a validao para determinar
se o nmero par ou mpar.
O procedimento ServerValidation recebe, como primeiro parmetro, uma referncia para o controle de validao e
como segundo parmetro um objeto que contm o valor do campo a ser validado, valor este que acessvel atravs da
propriedade Value deste segundo argumento. Na listagem do exemplo, antes da funo de validao, coloquei vrios
comentrios que explicam detalhadamente a utilizao dos parmetros da funo de validao.
www.juliobattisti.com.br 302
CAPTULO 8: VALIDATION SERVER CONTROLS
</head>
<body>
<form runat=server>
<asp:TextBox id=Text1"
runat=server />
303 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:CustomValidator id=CustomValidator1"
ControlToValidate=Text1"
OnServerValidate=ServerValidation
Display=Static
ErrorMessage=No um nmero par!
ForeColor=green
Font-Name=verdana
Font-Size=10pt
runat=server/>
<p>
<asp:Button id=Button1"
Text=Validar
OnClick=ValidateBtn_OnClick
runat=server/>
</form>
</body>
</html>
Digite o cdigo da Listagem 8.5 e salve o mesmo em um arquivo chamado chap8ex5.aspx, na pasta chap8, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
No campo de digitao digite 2. D um clique no boto Enviar. Observe que nenhuma mensagem de erro emitida,
uma vez que dois um nmero par.
Agora digite 5 no campo de digitao. D um clique no boto Enviar. Voc obter uma mensagem de erro, conforme
indicado na Figura 8.8.
Na funo de validao ServerValidation, utilizamos a estrutura Try Catch para fazer o tratamento de excees.
Dentro da funo ServerValidation, utilizamos o seguinte comando para determinar se o nmero par:
Neste caso, se o resto da diviso por 2 for zero, significa que o nmero par e a propriedade IsValid definida como
True, significando que o valor digitado par. Se o resto da diviso por dois no for igual a zero, a propriedade IsValid
definida como False, significando que o nmero digitado mpar. Lembre que o operador % retorna o resto da
diviso entre dois nmeros inteiros.
www.juliobattisti.com.br 304
CAPTULO 8: VALIDATION SERVER CONTROLS
Tambm utilizamos dois controles do tipo Web Server Controls, para o campo de digitao
e para o boto Validar. No Captulo 8 aprenderemos a utilizar os Web Server Controls. NOTA: Para maiores
informaes sobre o
Utilizamos o evento Click do boto Validar, para determinar se a pgina foi validada ou tratamento de excees e
no. Apenas para lembrar, a propriedade IsValid do objeto Page somente True quando sobre os operadores do
todos os controles da pgina passarem no teste de validao; basta que um nico controle C#, consulte os Captulos
no seja validado, para que a propriedade Page.IsValid se torne False. 3, 4 e 5.
O Controle RegularExpressionValidator
Este controle utilizado para garantirmos que a entrada digitada est em um determinado formato. Por exemplo,
podemos utilizar este controle para fazer com que o usurio digite o CPF no seguinte formato: 111.111.111-11. Ou
que digite o CEP no seguinte formato: 11111-111.
<asp:RegularExpressionValidator
id=identificao_no_cdigo
runat=server
ControlToValidate=Controle a ser validado
ValidationExpression=Uma expresso do tipo Regular Expression.
ErrorMessage=Mensagem de erro.
ForeColor=Cor da fonte da mensagem de erro.
305 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
A maior dificuldade de utilizarmos este controle a definio correta do atributo ValidationExpression. Para voc ter
uma idia da complexidade da criao de expresses regulares existe um livro somente sobre este assunto: Mastering
Regular Expressions: Powerful Techniques for Perl and Other Tools. Editora: (OReilly Nutshell). Pginas: 368
Para uma lista de artigos sobre expresses regulares, consulte o seguinte endereo: http://www.4guysfromrolla.com/
webtech/RegularExpressions.shtml
Vamos apresentar um exemplo, onde vamos utilizar o controle RegularExpressionValidator para verificar o formato
do CPF digitado pelo usurio. O CPF tem o seguinte formato padro:
nnn.nnn.nnn-nn
</script>
</head>
<body>
<form runat=server>
www.juliobattisti.com.br 306
CAPTULO 8: VALIDATION SERVER CONTROLS
<BR>
<BR>
<B>
<asp:RegularExpressionValidator
id=valida_valor
runat=server
ControlToValidate=cpf
ValidationExpression=[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}
ErrorMessage=Digite um CPF no formato 111.111.111-11"
ForeColor=Blue
BackColor=Cyan
/>
</B>
<BR>
<BR>
<input type=submit value=Enviar OnServerClick=Enviar_Click runat=server>
</form>
</body>
</html>
Digite o cdigo da Listagem 8.6 e salve o mesmo em um arquivo chamado chap8ex6.aspx, na pasta chap8, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
No campo de digitao digite 111.111.111-11, ou seja, um CPF no formato correto. D um clique no boto Enviar.
Observe que nenhuma mensagem de erro emitida, uma vez que o CPF est no formato definido pelo controle
RegularExpressionValidator.
Agora digite 11111111111 no campo de digitao, ou seja, sem os pontos e o trao. D um clique no boto Enviar.
Voc obter uma mensagem de erro, conforme indicado na Figura 8.9.
A def inio do formato aceito para o campo CPF feita atravs de uma expresso regular, no atributo
ValidationExpression, conforme indicado a seguir:
ValidationExpression=[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}
307 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O [0-9] indica que o caractere digitado deve ser um valor entre 0 e 9. O {3} entre chaves indica que os trs primeiros
caracteres devem estar entre 0 e 9. Todo caractere que deve ser digitado diretamente deve ser precedido de uma barra
invertida. o caso do ponto que deve ser digitado aps os trs primeiros nmeros. Utilizando este mesmo raciocnio,
definimos o restante da expresso.
Apenas para exemplificar, coloco como ficaria uma expresso para o CEP:
ValidationExpression=[0-9]{5}\-[0-9]{3}
Concluso
Neste captulo aprendemos a utilizar os controles de validao do ASP.NET. Aprendemos a utilizar os seguintes controles:
RequiredFieldValidator Control
CompareValidator Control
RangeValidator Control
CustomValidator Control
RegularExpressionValidator Control
Tambm apresentamos diversos exemplos para ilustrar o funcionamento destes controles.
No prximo captulo vamos aprender a utilizar uma srie de Web Server Controls.
www.juliobattisti.com.br 308
CAPTULO 9: WEB FORM CONTROLS
Introduo CAPTULO
No Captulo 7 estudamos os HTML Server Controls, os quais so, basicamente,
os controles HTML para a criao de formulrios, porm processados no servidor.
9
Ao ser processado no servidor, cada controle compilado como um objeto
incorporado pgina ASP.NET. Por ser um objeto temos acesso, via cdigo de
programao, a uma srie de propriedades e mtodos de cada controle. Com este
novo modelo, o Framework .NET traz para o desenvolvimento Web um modelo
baseado em eventos, muito parecido com o modelo de desenvolvimento baseado
em eventos de aplicaes Windows tradicionais.
Web Form Controls
Em seguida, no Captulo 8 tratamos dos controles de validao Validation Server
Controls. Estes controles tambm so processados no servidor, porm no existem
controles HTML correspondentes. Os controles de validao fazem parte de um
conjunto de controles maior, conhecido como Web Server Controls. Salientamos
que os Web Server Controls so definidos pela tag <asp: ...
TextBox
Label
CheckBox
RadioButton
Button
309 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
ListBox
Table, TableCell e TableRow
Panel
Image
HyperLink
LinkButton
ImageButton
NOTA: Para acompanhar
Estes controles nos do acesso a um grande nmero de propriedades e eventos, o que os exemplos deste
permite um controle bastante preciso sobre o layout e a funcionalidade de uma pgina captulo importante que
ASP.NET, o que justifica a existncia de mais um conjunto de controles, alm do conjunto voc tenhas estudado os
dos HTML Server Controls. medida que formos estudando os diversos controles, Captulos 3, 4 e 5, os
iremos apresentar exemplos de utilizao dos mesmos. quais tratam dos aspectos
bsicos da Linguagem C#.
Propriedade Descrio
AccessKey utilizada para definir ou retornar uma combinao de teclas (tecla de atalho) utilizada
para colocar o foco no controle.
BackColor utilizada para definir ou retornar a cor de segundo plano, do controle.
BorderColor utilizada para definir ou retornar a cor das bordas do controle.
BorderStyle utilizada para definir ou retornar o estilo das bordas do controle.
BorderWidth utilizada para definir ou retornar a largura das bordas do controle.
ControlStyle utilizada para definir ou retornar o estilo (aspectos visuais) do controle, como por
exemplo: com ou sem preenchimento, com sombra, etc.
www.juliobattisti.com.br 310
CAPTULO 9: WEB FORM CONTROLS
Propriedade Descrio
Enabled Propriedade do tipo Boleana (True ou False), utilizada para definir
ou retornar um valor que indica se o controle est habilitado:
True = habilitado e False=desabilitado.
EnableViewState Propriedade do tipo Boleana (True ou False), utilizada para definir
ou retornar um valor que indica se o controle de estado est
habilitado (True) ou desabilitado (False).
Font Retorna informaes sobre a fonte utilizada para o controle.
ForeColor utilizada para definir ou retornar informaes sobre a cor do texto
do controle.
Height utilizada para definir ou retornar a altura do controle.
Style Faz referncia a uma coleo de propriedades do tipo CSS
Cascading Style Sheets, associadas com o controle.
TabIndex utilizada para definir ou retornar informaes sobre o ndice de
tabulao do controle. O ndice de tabulao define a ordem de
deslocamento do cursor, dentro de um formulrio, quando
pressionamos a tecla TAB. Por exemplo, se estamos em um campo
com ndice de tabulao 2 e pressionamos a tecla TAB, o cursor ir
para o controle com ndice de tabulao 3.
ToolTip utilizada para definir ou retornar um pequeno texto que ser
exibido quando o usurio apontar o mouse para o controle.
Visible Propriedade boleana, utilizada para retornar ou definir um valor
que indica se o controle deve ser exibido (True) ou no (False).
Width utilizada para definir ou retornar a largura do controle.
Estas propriedades esto disponveis para todos os controles derivados da classe WebControl; em outras palavras, os
controles que tm a classe WebControl como base iro herdar estas propriedades.
Propriedade Descrio
CopyBaseAttributes Copia o valor das propriedades AccessKey, Enabled, TabIndex e Attributes para o controle
atual, a partir de um controle especificado como parmetro para o mtodo. semelhante
ao que faz a ferramenta pincel nos aplicativos do Microsoft Office, quando copia uma
srie de caractersticas de formatao de um pargrafo para outro.
311 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Propriedade Descrio
DataBind Faz a associao de uma fonte de dados com o controle e com todos os seus controles
filhos.
Equals Determina se duas instncias de um controle so iguais.
FindControl Procura um determinado controle no Conteiner atual. Normalmente o Conteiner atual a
pgina ASP.NET onde est o controle.
HasControls Retorna um valor Boleano indicando se o controle possui controles filhos (True) ou no
(False).
ToString Retorna uma representao do controle, no formato String.
Evento Descrio
DataBinding Ocorre quando o controle ligado (associado) a uma fonte de dados.
Disposed Ocorre quando o controle descarregado da memria, o qual o ltimo estgio no ciclo
de vida do controle quando a pgina ASP.NET carregada.
Init Ocorre quando o controle inicializado, o que o primeiro estgio no seu ciclo de vida.
Load Ocorre quando o objeto, que representa uma instncia do controle, carregado no objeto
Page, que representa a pgina sendo carregada. Lembre que toda pgina ASP.NET ao ser
carregada compilada em um objeto que uma instncia da classe Page.
Por padro, a propriedade TextMode definida como SingleLine, o que significa que o controle tem uma nica linha.
Para definir este controle com mltiplas linhas, devemos definir a propriedade TextMode para MultiLine. Tambm
podemos definir esta propriedade com o valor Password, para criar um texto para digitao de senhas, onde so
exibidos apenas asteriscos enquanto o usurio digita a senha.
www.juliobattisti.com.br 312
CAPTULO 9: WEB FORM CONTROLS
A largura da caixa de texto definida pela propriedade Columns. Se a caixa de texto for de mltiplas linhas, a sua
altura def inida pela propriedade Rows. Este controle derivado da classe TextBox, do namespace
System.Web.UI.WebControls.
<asp:TextBox id=value
AutoPostBack=True|False
Columns=Nmero de colunas
MaxLength=Tamanho mximo do texto a ser digitado
Rows=Nmero de linhas.
Text=Texto para a caixa de digitao.
TextMode=Single | Multiline | Password
Wrap=True|False
OnTextChanged=OnTextChangedMethod
runat=server
/>
A propriedade AutoPostBack do tipo Boleana, podendo assumir os valores True ou False. Se o valor desta propriedade
estiver definido em True, um PostBack ser gerado para o servidor, toda vez que o valor do controle for alterado. Por
padro, o valor desta propriedade definido como False. Se for definida para True, toda vez que o valor do controle
for alterado, o controle reenvia para o servidor (postback) o seu valor e o valor de todos os controles do formulrio.
Algo parecido com disparar um evento Aps alterar, para um campo de um formulrio criado com o Microsoft
Access ou com o VB.
A propriedade Wrap define se deve ser feita uma quebra automtica de linha, cada vez que o texto atinge o limite da
caixa de texto.
OnTextChanged um mtodo que dispara o evento TextChanged, para o qual podemos definir um procedimento que
ser executado em resposta ao evento.
Vamos a um exemplo simples. Vamos criar um formulrio onde temos trs campos:
Nome
Senha
Comentrios
O usurio preenche os dados e clica no boto Enviar. Vamos criar um procedimento para o evento Click do boto
Enviar. Este procedimento ir exibir, em um controle HtmlTextArea, os valores digitados pelo usurio, com exceo
da senha.
313 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</script>
<body>
<table>
<tr>
<td><h3>Nome:</h3> </td>
<td>
<asp:TextBox runat=server
id=Nome
Text=
Font_Face=Arial
Font_Size=3"
BackColor=Cyan
ForeColor=Blue
BorderColor=Red
TextMode=SingleLine
Columns=40"
/>
</td>
</tr>
<tr>
www.juliobattisti.com.br 314
CAPTULO 9: WEB FORM CONTROLS
<td><h3>Senha:</h3> </td>
<td>
<asp:TextBox runat=server
id=Senha
Text=
Font_Face=Arial
Font_Size=3"
BackColor=Cyan
ForeColor=Blue
BorderColor=Green
TextMode=Password
Columns=40"
/>
</td>
</tr>
<tr>
<td><h3>Comentrios:</h3> </td>
<td>
<asp:TextBox runat=server
id=Comentrios
Text=
Font_Face=Arial
Font_Size=2"
BackColor=Silver
ForeColor=Blue
BorderColor=Green
TextMode=MultiLine
Rows=10"
Columns=30"
/>
</td>
</tr>
<tr>
<td><h3>Voc digitou:</h3></td>
315 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<tr>
<td><B>Clique no boto></B></td>
<td>
<input type=submit value=Enviar OnServerClick=Enviar_Click
runat=server>
</td>
</tr>
</table>
</form>
</body>
</html>
Digite o cdigo da Listagem 9.1 e salve o mesmo em um arquivo chamado chap9ex1.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Controles avanados e com melhor interface visual, com acesso a uma variedade de mtodos, propriedades e eventos.
Observe que o controle que exibe os valores digitados pelo usurio no consegue exibir todo o contedo digitado; por
isso uma barra de rolagem vertical disponibilizada.
No evento Click do boto Enviar, definimos a propriedade Value do controle Exibe como sendo a concatenao dos
valores digitados nos campos Nome e Comentrios. Para concatenar strings, apenas para lembrar, utilizamos o operador
+. O \n define uma quebra de linha. Tambm importante salientar que, para obter o valor digitado nos controles,
utilizamos a propriedade Text. Nos controles do tipo HtmlServer, utilizvamos a propriedade Value, ao invs da
www.juliobattisti.com.br 316
CAPTULO 9: WEB FORM CONTROLS
Figura 9.1: Utilizando o controle TextBox com as opes SingleLine, Password e MultiLine.
propriedade Text. Alis estamos fazendo isto neste exemplo, pois o controle que exibe os valores digitados pelo
usurio um controle do tipo HtmlServer. Para definir o que o controle ir exibir, estamos definindo a sua propriedade
Value, conforme indicado no trecho de cdigo a seguir:
317 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Para definir o texto a ser exibido em um controle Label, utilizamos a propriedade Text do controle.
A seguir um exemplo que adiciona um controle do tipo Label, com o texto inicial Este o texto original do controle.
Ao clicarmos no boto Enviar, o evento Click deste boto altera o texto do Label para Este o texto modificado.
</script>
<body>
www.juliobattisti.com.br 318
CAPTULO 9: WEB FORM CONTROLS
<b>
<asp:Label
id=Rotulo1"
Text=Este o texto original do controle
BackColor=Black
ForeColor=White
runat=server
/>
</b>
<BR>
<BR>
<table>
<tr>
<td><B>Clique no boto></B></td>
<td>
<input type=submit value=Enviar OnServerClick=Enviar_Click
runat=server>
</td>
</tr>
</table>
</form>
</body>
</html>
Digite o cdigo da Listagem 9.2 e salve o mesmo em um arquivo chamado chap9ex2.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Ao carregar a pgina ser exibido o texto Este o texto original do controle. Observe que o texto est com cor
de fundo preta e cor de fonte branco, conforme definimos nas propriedades do controle Label. D um clique no
boto Enviar. O texto do controle do tipo Label alterado para Este o texto modificado, conforme indicado
na Figura 9.2.
319 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br 320
CAPTULO 9: WEB FORM CONTROLS
Vamos apresentar um exemplo de utilizao do controle CheckBox. O nosso exemplo constitudo de um formulrio
no qual temos trs controles do tipo CheckBox, onde o usurio pode selecionar um ou mais controles. Ao clicar no
boto Enviar, o evento Click deste boto informa, em um controle do tipo Label, quais as opes selecionadas.
if (Negcios.Checked==true)
{
Aux= Aux +Negcios ;
}
if (Direito.Checked==true)
{
Aux= Aux +Direito ;
}
if (Economia.Checked==true)
{
Aux= Aux +Economia ;
}
Exibe.Text = Aux;
321 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</script>
<body>
<tr>
<td><B>Opo 1:</B> </td>
<td>
<asp:CheckBox
id=Negcios runat=server
Text=Negcios
AutoPostBack=True
/>
</td>
</tr>
<tr>
<td><B>Opo 2:</B> </td>
<td>
<asp:CheckBox
id=Direito
runat=server
Text=Direito
AutoPostBack=True
/>
</td>
</tr>
www.juliobattisti.com.br 322
CAPTULO 9: WEB FORM CONTROLS
<tr>
<td><B>Opo 3:</B> </td>
<td>
<asp:CheckBox
id=Economia
runat=server
Text=Economia
AutoPostBack=True
/>
</td>
</tr>
<tr>
<td><B>Clique no boto ></B></td>
<td>
<input type=submit value=Enviar
OnServerClick=Enviar_Click
runat=server>
</td>
</tr>
<tr>
<td><B>Dados do cliente:</B> </td>
<td>
<b>
<asp:Label
id=Exibe
Text=
BackColor=Black
ForeColor=White
runat=server
/>
</b>
</td>
</tr>
</table>
</form>
</body>
</html>
323 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o cdigo da Listagem 9.3 e salve o mesmo em um arquivo chamado chap9ex3.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Ao carregar a pgina ser exibido um formulrio com trs controles do tipo CheckBox, o boto Enviar e um controle
do tipo Label. Selecione as opes Negcios e Economia. D um clique no boto Enviar. As opes selecionadas sero
informadas em um controle do tipo Label, conforme indicado na Figura 9.3.
Neste exemplo estamos utilizando a propriedade Checked para verificar se o controle foi ou no selecionado. No final
do procedimento Enviar_Click, definimos o texto do controle do tipo Label, como sendo igual ao contedo da varivel
Aux. Observe que para fazer esta definio utilizamos a propriedade Text, conforme
indicado no comando a seguir:
NOTA: Para criar
Exibe.Text = Aux; mltiplos controles do tipo
RadioButton, de uma s
vez, ligados a uma fonte
RadioButton Web Server Control de dados, devemos
utilizar o controle
Este controle utilizado para a criao de controles do tipo Boto de rdio. Estes
RadioButtonList.
controles so criados em grupos, sendo que somente um dos controles do grupo pode
Aprenderemos a utilizar
ser selecionado. Para criar um grupo de controles do tipo RadioButton, devemos definir
este controle nos
o mesmo valor para a propriedade GroupName, de todos os controles que fazem parte
Captulos 10 e 11.
do grupo.
www.juliobattisti.com.br 324
CAPTULO 9: WEB FORM CONTROLS
O Controle RadioButton Web Server Control derivado da classe base RadioButton, do namespace
System.Web.UI.WebControls.
<asp:RadioButton
id=Identificao_no_cdigo
AutoPostBack=True|False
Checked=True|False
GroupName=Nome do Grupo.
Text=Rtulo de texto que identifica o controle
TextAlign=Right|Left
OnCheckedChanged=Mtodo que ser executado em resposta ao evento
OnCheckedChanged
runat=server
/>
Considere o trecho de cdigo a seguir:
<asp:RadioButton
id=Carto
Text=Carto de Crdito:
Checked=True
GroupName=GrupoPagamento
runat=server />
<asp:RadioButton
id=Transferncia
Text=Transferncia Eletrnica:
GroupName=GrupoPagamento
runat=server/>
<asp:RadioButton id=Boleto
Text=Boleto Bancrio
GroupName=GrupoPagamento
runat=server/>
Neste trecho criamos um grupo chamado GrupoPagamento, o qual possui trs controles do tipo RadioButton:
Carto
Transferncia
Boleto
Ao carregarmos a pgina, o controle Carto j vem selecionado, pois definimos a sua propriedade Checked=True.
Este trecho de cdigo gera a sada indicada na Figura 9.4.
325 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Para verificar qual opo foi selecionada, podemos utilizar a propriedade Checked de cada controle, conforme indicado
no seguinte trecho de cdigo:
if (Carto.Checked)
{
Label1.Text = Voc selecionou: + Carto.Text;
}
else if (Transferncia.Checked)
{
Label1.Text = Voc selecionou: + Transferncia.Text;
}
else if (Boleto.Checked)
{
Label1.Text = Voc selecionou: + Boleto.Text;
}
Neste exemplo estamos definindo o texto a ser exibido em um controle do tipo Label (Label1), com base na opo
selecionada. A propriedade Text do controle RadioButton (Carto.Text, Transferncia.Text e Boleto.Text) retorna o
valor definido na propriedade Text do controle. Por exemplo, para o controle Carto, Carto.Text=Carto de Crdito:.
www.juliobattisti.com.br 326
CAPTULO 9: WEB FORM CONTROLS
Um boto do tipo Command possui um nome de comando associado com o boto, nome este que definido na
propriedade CommandName do controle. Isso permite que sejam criados mltiplos controles do tipo Button, em um
formulrio (Web Form) de uma pgina ASP.NET. Atravs de cdigo podemos determinar qual o boto que foi clicado
e, para cada boto, podemos definir o cdigo que ser executado em resposta ao evento Click do boto.
No trecho de cdigo a seguir, temos o exemplo da criao de um controle Button, do tipo Submit, em uma
pgina .aspx:
<asp:Button
id=Enviar
Text=Enviar
OnClick=Enviar_Click
runat=server
/>
No trecho de cdigo a seguir, temos o exemplo da criao de um controle Button, do tipo Command, em uma
pgina .aspx:
<asp:Button
id=SortAscendingButton
Text=Sort Ascending
CommandName=Sort
CommandArgument=Ascending
OnClick=CommandBtn_Click
runat=server
/>
327 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Podemos alterar as aparncias de qualquer controle, utilizando a sua propriedade Style. Atravs desta propriedade,
podemos controlar os diversos aspectos visuais de um controle. A seguir temos um exemplo de utilizao desta
propriedade:
<asp:Button
id=Enviar
Text=Enviar
style=color:White;
background-color:Black;
border-color:Red;
border-width:6px;
border-styke:Double;
OnClick=Enviar_Click
runat=server
/>
Observe que os aspectos visuais so definidos aos pares: aspecto:valor;. Por exemplo, a definio da cor das bordas do
boto feita da seguinte maneira:
border-color:Red;
www.juliobattisti.com.br 328
CAPTULO 9: WEB FORM CONTROLS
</asp:ListBox>
Vamos apresentar um exemplo de utilizao do controle ListBox. O nosso exemplo constitudo de um formulrio no
qual colocamos um controle ListBox, com seis elementos. O controle permite selees mltiplas e seu tamanho
definido em 4 linhas. Ao clicar no boto Enviar, o evento Click deste boto informa qual foi o primeiro elemento a ser
selecionado.
329 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<form runat=server>
<h3><font face=Verdana>Exemplo do controle ListBox!!</font></h3>
<asp:ListBox id=ListBox1"
Rows=4"
SelectionMode=Multiple
Width=100px
runat=server
style=color:White;
background-color:Black;
>
<asp:ListItem>Item 1</asp:ListItem>
<asp:ListItem>Item 2</asp:ListItem>
<asp:ListItem>Item 3</asp:ListItem>
<asp:ListItem>Item 4</asp:ListItem>
<asp:ListItem>Item 5</asp:ListItem>
<asp:ListItem>Item 6</asp:ListItem>
</asp:ListBox>
<asp:button id=Enviar
Text=Enviar
OnClick=Enviar_Click
runat=server />
<p>
<asp:Label id=Label1"
Font-Name=Verdana
Font-Size=10pt
www.juliobattisti.com.br 330
CAPTULO 9: WEB FORM CONTROLS
runat=server/>
</form>
</body>
</html>
Digite o cdigo da Listagem 9.4 e salve o mesmo em um arquivo chamado chap9ex4.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
http://localhost/chap9/chap9ex4.aspx
Para selecionar mltiplas opes na lista de opes, mantenha a tecla Ctrl pressionada e v clicando nas opes a
serem selecionadas. Selecione as opes 1, 2 e 3 e d um clique no boto Enviar, conforme indicado na Figura 9.6.
No evento Click, do boto Enviar, utilizamos o seguinte cdigo, para informar o primeiro item selecionado:
331 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:TableCell>
Texto da Clula.
</asp:TableCell>
</asp:TableRow>
</asp:Table>
Para criar uma nova linha da tabela, utilizamos o controle TableRow. Uma tabela formada por uma coleo de linhas,
onde cada linha definida por uma coleo de clulas Cells Colection. Podemos definir o conjunto de linhas da
tabela estaticamente, atravs da utilizao de uma srie de controles TableRow, ou dinamicamente, atravs de cdigo
de programao.
<asp:TableRow
id=Identificao_co_cdigo
HorizontalAlign=Center|Justify|Left|NotSet|Right
VerticalAlign=Bottom|Middle|NotSet|Top
runat=server
>
<asp:TableCell>
Texto da clula.
</asp:TableCell>
</asp:TableRow>.
www.juliobattisti.com.br 332
CAPTULO 9: WEB FORM CONTROLS
A propriedade Wrap define se deve haver o retorno automtico de texto dentro da clula (Wrap=True) ou no
(Wrap=False).
<script runat=server>
void Page_Load(Object sender, EventArgs e)
{
// Declaro duas variveis.
333 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
int numrows = 3;
int numcells = 2;
</head>
<body>
<form runat=server>
www.juliobattisti.com.br 334
CAPTULO 9: WEB FORM CONTROLS
<asp:Table
id=Table1"
GridLines=Both
HorizontalAlign=Center
style=color:White;
background-color:Black;
border-color:Red;
border-width:6px;
border-style:Double;
Font-Name=Verdana
Font-Size=8pt
CellPadding=15"
CellSpacing=0"
runat=server
/>
</form>
</body>
</html>
Digite o cdigo da Listagem 9.5 e salve o mesmo em um arquivo chamado chap9ex5.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
No evento load utilizamos dois laos for. O lao externo adiciona uma nova linha tabela, a cada passada do lao; j
o lao interno adiciona uma nova clula a cada passada do lao. Para definir o contedo da clula, utilizamos o
seguinte comando:
Esta tcnica diferente da utilizada com os HtmlServer Controls para a criao de tabelas, quando utilizamos a
propriedade InnerHtml do controle HtmlTableCell. No podemos utilizar esta tcnica com o controle TableCell, pois
ele no possui uma propriedade InnerHtml.
Para resolver este problema, utilizamos um controle do tipo LiteralControl. Quando esta pgina compilada, o controle
LiteralControl retorna exatamente o que foi passado como parmetro. No nosso exemplo, ao carregar a pgina, tudo o
335 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
que foi passado como parmetro para o controle executado e o resultado da execuo inserido no local do controle.
Vamos acompanhar o que acontece para a primeira passada do lao externo e a primeira passada do lao interno, em
outras palavras:
j=0
i=0
quando a pgina processada, o parmetro passado para o controle LiteralControl fica da seguinte maneira:
linha 0, coluna 0
linha 0, coluna 0
Embora parea um pouco complicado, primeira vista, este exemplo demonstra o poder e a flexibilidade que temos
disposio com o uso dos Web Server Controls e da biblioteca de classes do Framework .NET. Qualquer elemento da
pgina tratado como um objeto. Atravs de programao temos um controle total sobre os mtodos, propriedades e
eventos destes objetos.
www.juliobattisti.com.br 336
CAPTULO 9: WEB FORM CONTROLS
Para finalizar, gostaria de lembrar que mais uma vez utilizamos a propriedade style, para definir alguns aspectos
visuais do controle Table, conforme indicado no fragmento a seguir:
<asp:Table id=Table1"
GridLines=Both
HorizontalAlign=Center
style=color:White;
background-color:Black;
border-color:Red;
border-width:6px;
border-style:Double;
Font-Name=Verdana
Font-Size=8pt
CellPadding=15"
CellSpacing=0"
runat=server
/>
337 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Vamos analisar um exemplo retirado da documentao do Framework .NET. Neste exemplo apresentado um formulrio
com os seguintes controles:
Um controle Panel, com uma linha de texto de contedo esttico. Durante o processamento da pgina, mais
especificamente, durante o evento Load da pgina, vamos adicionar controles a este Panel, utilizando
programao.
Dois controles do tipo DrowpDownList (Caixa de Combinao). Em um controle, o usurio seleciona o nmero
de rtulos a serem inseridos no Panel (de 0 a 4 rtulos). Em outro controle o usurio seleciona o nmero de
Caixas de texto a serem inseridas no Panel.
Um controle do tipo CheckBox que estiver marcado faz com que o Panel seja ocultado, o que tambm oculta
todos os controles adicionados ao Panel.
<html>
<head>
<script runat=server>
void Page_Load(Object sender, EventArgs e) {
if (Check1.Checked)
{
Panel1.Visible=false;
}
else
{
Panel1.Visible=true;
}
// Adiciona controles do tipo Label ao controle Panel.
www.juliobattisti.com.br 338
CAPTULO 9: WEB FORM CONTROLS
<form runat=server>
339 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
>
Panel1: Contedo esttico, definido no prprio controle
<p>
</asp:Panel>
<p>Adicionar quantos rtulos?:
<br>
Adicionar quantas caixas de texto?:
<p>
<asp:CheckBox id=Check1" Text=Ocultar o Painel runat=server/>
<p>
<asp:Button Text=Atualiar o Painel runat=server/>
</font>
</form>
</body>
</html>
Digite o cdigo da Listagem 9.6 e salve o mesmo em um arquivo chamado chap9ex6.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
www.juliobattisti.com.br 340
CAPTULO 9: WEB FORM CONTROLS
carregado o formulrio com o controle Panel, dois controles Caixa de Combinao e um controle do tipo CheckBox,
alm do boto enviar, evidentemente. Voc vai obter o resultado indicado na Figura 9.8.
Agora marque a opo Ocultar Painel e d um clique no boto Enviar. Observe que o controle Panel foi ocultado e
tambm todos os controles a ele adicionados.
341 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
No incio do procedimento Load, testamos se o controle Check1 foi selecionado. Em caso afirmativo, tornamos
a propriedade Visible do controle Panel1 igual a False. Isso faz com que o controle Panel e todos os seus
controles sejam ocultados.
Para adicionar o nmero de rtulos e o nmero de caixas de texto selecionados pelo usurio, utilizamos o
evento Load da pgina.
O cdigo para adicionar rtulos o seguinte:
www.juliobattisti.com.br 342
CAPTULO 9: WEB FORM CONTROLS
Em primeiro lugar declaramos e inicializamos uma varivel numlabels, do tipo int. Atribumos o valor selecionado na
lista DropDown1 para a varivel numlabels. Observe a utilizao do mtodo Parse, da estrutura Int32. Este mtodo
utilizado para converter a String retornada pelo controle DropDown1, em um nmero Int32, equivalente.
Em seguida iniciamos um lao for. A cada passada do lao um controle l, do tipo Label, criado. Depois definimos as
suas propriedades Rtulo e ID. Em seguida utilizamos o mtodo Add, da coleo Controls, do controle Panel, para
adicionar o rtulo recm-criado Panel1.Controls.Add(l). Para finalizar, utilizamos LiteralControl para enviar uma
tag <br>, para fazer uma quebra de linha. Sem esta tag <br>, os rtulos seriam colocados um ao lado do outro e no
um em cada linha.
As mesmas observaes so vlidas para a adio dos controles do tipo Caixa de texto.
Este exemplo salienta os recursos que temos disposio, quando utilizamos os Web Server Controls. Ob-
serve que temos acesso a uma infinidade de mtodos e propriedades, todas bem definidas e documentadas na
documentao do Framework .NET, no item .NET Framework Class Library.
IMPORTANTE: O
A sintaxe para este controle a seguinte:
Controle Image Web
<asp:Image Server Control derivado
id=Identificao_no_cdigo da classe base Image, do
namespace
runat=server
System.Web.UI.WebControls.
ImageUrl=Endereo onde est a figura a ser incorporada na
pgina. Para uma referncia
AlternateText=Texto
completa a todas as
propriedades e mtodos
ImageAlign=NotSet|AbsBottom|AbsMiddle|BaseLine|Bottom|Left|Middle|Right|TextTop|Top
deste controle, consulte a
/>
documentao do Frame-
Na Listagem 9.7 temos um pequeno exemplo de utilizao do controle Image. work .NET.
343 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:Image
id=image1"
runat=server
AlternateText=SQL Server 2000 Curso Completo
ImageAlign=left
ImageUrl=livrosql2000.jpg
/>
</form>
</body>
</html>
Digite o cdigo da Listagem 9.7 e salve o mesmo em um arquivo chamado chap9ex7.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Observe que, embora no tenhamos nenhum cdigo na seo de cdigo (na verdade nem temos seo de cdigo neste
exemplo), mesmo assim utilizamos a extenso .aspx e a pgina foi processada normalmente.
www.juliobattisti.com.br 344
CAPTULO 9: WEB FORM CONTROLS
345 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:HyperLink
id=Identificao_no_cdigo.
NavigateUrl=Endereo de destino do link.
ImageUrl=Imagem de destino do link, se for o caso.
Target=Onde o destino ser aberto, especialmente til, quando utilizamos
frames.
runat=server
Texto do Link.
</asp:HyperLink>
</body>
</html>
www.juliobattisti.com.br 346
CAPTULO 9: WEB FORM CONTROLS
Digite o cdigo da Listagem 9.8 e salve o mesmo em um arquivo chamado chap9ex8.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Neste caso, a figura o link. Ao clicar na figura ser aberta uma nova janela (conforme definido na propriedade
target=_new), onde ser carregada a pgina definida na propriedade NavigateUrl=http://http://www.axcel.com.br/
descricao.cfm?id_livro=202.
347 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Um LinkButton do tipo Enviar no tem um nome de comando (definido pela propriedade CommandName) associado
com o boto. Este boto simplesmente envia a pgina para processamento no servidor. Por padro um controle Button
do tipo Enviar. Podemos definir um procedimento que executa em resposta ao evento Click do boto, como j
fizemos em diversos exemplos deste livro.
Um LinkButton do tipo Command possui um nome de comando associado com o boto, nome este que definido na
propriedade CommandName do controle. Isso permite que sejam criados mltiplos controles do tipo LinkButton, em um
formulrio (Web Form) de uma pgina ASP.NET. Atravs de cdigo podemos determinar qual o boto que foi clicado
e, para cada boto, podemos definir o cdigo que ser executado em resposta ao evento Click do respectivo boto.
<asp:LinkButton
NOTA:O Controle
id=Identificao_no_cdigo
LinkButton Web Server
Text=Texto do LinkButton Control derivado da
Command= Nome de comando. Define o controle como sendo do classe base LinkButton,
tipo Command
do namespace
CommandArgument=CommandArgument System.Web.UI.WebControls.
OnClick=Mtodo que executa em resposta ao evento Click do Para uma referncia
controle.
completa a todas as
runat=server/>
propriedades e mtodos
ou deste controle, consulte a
documentao do Frame-
<asp:LinkButton
work .NET.
id=Identificao_no_cdigo
Command= Nome de comando. Define o controle como sendo do
tipo Command
CommandArgument=CommandArgument
OnClick=Mtodo que executa em resposta ao evento Click do controle.
runat=server
>
Texto do LinkButton
</asp:LinkButton>
www.juliobattisti.com.br 348
CAPTULO 9: WEB FORM CONTROLS
</script>
</head>
<body>
<form runat=server>
<asp:LinkButton
id=LinkButton1"
Text=Clique, por favor!
Font-Name=Verdana
Font-Size=14pt
OnClick=LinkButton1_Click
runat=server
/>
<BR>
<BR>
<asp:Label
id=Label1"
runat=server
/>
</form>
</body>
</html>
Digite o cdigo da Listagem 9.9 e salve o mesmo em um arquivo chamado chap9ex9.aspx, na pasta chap9, dentro da
pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Na pgina que carregada, d um clique no link Clique, por favor!. Voc obter o resultado indicado na Figura 9.12.
349 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Observe que podemos definir um mtodo em resposta ao evento Click do controle LinkButton, conforme descrevemos
antes: Aparncia de Link e funcionalidade de boto.
Utilizamos o evento OnClick para determinar as coordenadas onde o usurio clicou na imagem. Com isso, dependendo
do valor das coordenadas onde o usurio clicou, podemos tomar diferentes aes, como, por exemplo, carregar diferentes
endereos. Com isso estamos criando, na prtica, uma imagem mapeada, onde diferentes regies da imagem esto
vinculadas a diferentes endereos.
Podemos utilizar o evento OnCommand para fazer com que a imagem tenho o mesmo
comportamento de um boto de comando. Podemos associar um nome de comando com NOTA: O Controle
o boto, nome este que definido na propriedade CommandName do controle. Isso ImageButton Web Server
permite que sejam criados mltiplos controles do tipo LinkButton, em um formulrio Control derivado da
(Web Form) de uma pgina ASP.NET. Atravs de cdigo podemos determinar qual o classe base ImageButton,
boto que foi clicado e, para cada boto, podemos definir o cdigo que ser executado do namespace
em resposta ao evento Click do respectivo boto. System.Web.UI.WebControls.
Para uma referncia
A sintaxe para este controle a seguinte: completa a todas as
propriedades e mtodos
<asp:ImageButton
deste controle, consulte a
id=Identificao_no_cdigo
documentao do Frame-
ImageUrl=Endereo do arquivo de imagem. work .NET.
www.juliobattisti.com.br 350
CAPTULO 9: WEB FORM CONTROLS
Command=Command
CommandArgument=CommandArgument
OnClick=Mtodo que ser executado em resposta ao evento Click do controle.
runat=server
/>
<script runat=server>
{
Label1.Text=Voc clicou nas seguintes coordenadas: +
( + e.X.ToString() + , +
e.Y.ToString() + );
}
</script>
</head>
<body>
<form runat=server>
<br>
<br>
<asp:ImageButton
id=imagebutton1"
AlternateText=Axcel Books.
351 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
ImageAlign=left
ImageUrl=livrosql2000.jpg
OnClick=ImageButton_Click
runat=server
/>
<br>
<br>
<asp:Label
id=Label1"
runat=server
/>
</form>
</body>
</html>
Digite o cdigo da Listagem 9.10 e salve o mesmo em um arquivo chamado chap9ex10.aspx, na pasta chap9, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Na pgina que carregada, d um clique em qualquer ponto da imagem; sero informadas as coordenadas do ponto
onde voc clicou, conforme indicado na Figura 9.13.
Com estes dois campos podemos acessar as coordenadas do ponto onde o usurio clicou.
e.X.ToString( )
e.Y.ToString( )
www.juliobattisti.com.br 352
CAPTULO 9: WEB FORM CONTROLS
TextBox
Label
CheckBox
RadioButton
Button
ListBox
Table, TableCell e TableRow
Panel
Image
HyperLink
353 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
LinkButton
ImageButton
A principal questo que pode surgir a seguinte: Por que precisamos de mais um conjunto de controles, se j temos
os HtmlServer Controls e os Validation Server Controls (que na verdade fazem parte dos Web Server Controls)?
O principal motivo, conforme foi ressaltado durante o captulo, que os Web Form Controls fornecem um conjunto
mais rico e variado de propriedades, mtodos e eventos do que os HtmlServer Controls. Esta variedade de mtodos,
propriedades e eventos permite a criao de pginas ASP.NET mais sofisticadas e nas quais temos um controle apurado
sobre os elementos da pgina, controle esse exercido atravs de cdigo de programao.
Agora j conhecemos os elementos bsicos do Framework .NET (Captulos 1 e 2), os elementos bsicos da
linguagem C# (Captulos 3, 4 e 5) e os elementos bsicos para a criao de pginas ASP.NET (Captulos 7, 8 e 9).
A partir do prximo captulo vamos estudar a conexo de pginas ASP.NET com diversas fontes de dados,
atravs da utilizao de ADO.NET.
www.juliobattisti.com.br 354
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Introduo CAPTULO
Voc lembra do tempo em que para construir um site era s criar um monte
de pginas HTML? Eu lembro. Se eu tenho saudades? Sinceramente, no.
10
Embora fosse muito mais simples e fcil, o que se pode fazer apenas com HTML
muito pouco.
Com o ASP 3.0 temos a tecnologia ADO/OLE-DB (Activex Data Objects/ OLE
Database) para acesso a fontes de dados. Com ASP.NET temos um novo conjunto
de classes para acesso a dados, conjunto este conhecido como ADO.NET.
355 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
ADO.NET. Esta convivncia entre as tecnologias, facilita a migrao das pginas criadas com ASP 3.0 para ASP.NET,
uma vez que as pginas ASP 3.0 continuaro funcionando, mesmo aps a instalao do Framework .NET.
Como acessar bancos de dados a partir de pginas ASP.NET o assunto deste captulo. Vamos apresentar os namespaces
onde esto as classes para acesso a dados. Iremos estudar as principais classes destes namespaces. Tambm aprenderemos
a acessar bancos de dados do Microsoft SQL Server e do Microsoft Access. Veremos como apresentar os dados
obtidos, utilizando os novos controles do ASP.NET.
Veremos diversos exemplos de utilizao das classes estudadas. Sempre que for pertinente, faremos a comparao
entre a maneira como uma determinada operao realizada com ASP 3.0 e a maneira como passamos a realizar a
mesma operao com ASP.NET. O contedo visto neste captulo a base para os assuntos apresentados nos Captulos
11 e 12.
A informao certa: A informao deve estar correta, isto , deve ser confivel. A informao utilizada para
a tomada de decises, nos mais variados nveis de uma empresa. Se a informao estiver incorreta, as decises
sero equivocadas e no iro gerar os resultados esperados. Pior do que no ter a informao ter informao
incorreta, no confivel.
Para a pessoa certa: Independente do nvel hierrquico, quer seja o operrio da fbrica ou o presidente da
empresa, todos precisam de informao para trabalhar e alcanar os resultados desejados. A informao correta
precisa estar disposio para as pessoas que dela necessitam.
Na quantidade certa: Informao demais tambm um problema e pode atrapalhar ao invs de ajudar. E hoje
as informaes vm das mais diversas fontes. Internet, e-mail, relatrios, banco de dados da empresa, arquivos
do Office, jornais, revistas, livros, manuais tcnicos. Precisamos garimpar as informaes que realmente so
necessrias ao nosso trabalho.
No momento certo: Este um aspecto fundamental. Lembro-me da poca em que somente tnhamos o Mainframe
e um bando de terminais espalhados pela empresa. Voc solicitava um novo relatrio para a turma do CPD.
Duas semanas depois vinha o relatrio. Hoje, evidentemente, esta situao inaceitvel. Precisamos da
informao instantnea, sempre disposio.
Quando as empresas comearam a descentralizar seus ambientes computacionais, passando do modelo Mainframe/
Terminal para um modelo Cliente/Servidor com redes locais, novas possibilidades, e tambm problemas, comearam
a surgir. Bancos de dados departamentais no integrados, diferentes formatos de dados, aplicaes Cliente/Servidor
rodando em cada estao de trabalho, etc., isso fez com que a informao ficasse distribuda por toda a empresa e no
mais centralizada no Mainframe.
www.juliobattisti.com.br 356
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Um ambiente descentralizado mais flexvel, mas em contrapartida mais difcil de se gerenciar e de manter o
controle. medida que o volume de informaes comeou a crescer, ficou difcil ter acesso aos dados de diferentes
departamentos de uma maneira consistente e rpida. Na Figura 10.1 temos uma pequena ilustrao deste ambiente:
Alm de mltiplas fontes de dados, temos diferentes formatos de dados. Evidentemente que a estrutura de um arquivo
de mensagens de correio muito diferente da estrutura de uma planilha do Excel, por exemplo.
Para que possamos criar aplicaes que acessam dados de diversas fontes, precisamos de tecnologias capazes de
acessar dados de fontes to diversas como o Mainframe e um documento do Microsoft Word ou uma planilha do
Microsoft Excel. O Framework .NET fornece, principalmente atravs do namespace System.Data, uma srie de classes
para conexo e manipulao de dados dos mais variados formatos. Este conjunto de classes tambm conhecido
como ADO.NET.
Neste captulo vamos estudar as classes que do acesso a fontes de dados estruturadas, que seguem o modelo de dados
relacionais. Podemos citar como exemplos de bancos de dados relacionais o Microsoft Access, o SQL Server 2000, o
ORACLE, o DB2 da IBM, etc.
NOTA: Para maiores detalhes sobre o modelo de dados relacionais, consulte o Anexo II.
357 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Com ADO.NET temos um modelo de dados desconectado. O protocolo HTTP conhecido como Connection Less.
Ao solicitar uma pgina, estabelecida uma conexo com o servidor Web; os arquivos e imagens necessrios so
solicitados e enviados para o navegador do cliente e a conexo fechada. Por isso o termo Connection Less, pois no
mantida uma conexo permanente entre o servidor Web e o navegador do cliente. Esta natureza desconectada da
Web causa alguns inconvenientes quando desenvolvemos aplicaes de banco de dados.
ADO.NET resolve este problema, fornecendo uma srie de objetos que permitem que os dados, uma vez carregados
para o navegador do cliente, sejam manipulados, mesmo sem existir uma conexo permanente com o banco de dados.
Uma vez feitas as alteraes, incluses ou excluses necessrias, podemos, facilmente, sincronizar os dados que esto
no cliente com o banco de dados no servidor. Veremos nos Captulos 10 e 11 exemplos de mtodos para sincronizao
dos dados.
O principal objeto do modelo ADO, para trabalhar com dados, o objeto RecordSet. Para exibir os dados de um objeto
RecordSet, precisamos escrever uma boa quantia de cdigo. Com ADO.NET, o principal objeto, que funciona como
um Conteiner para dados, o DataSet, o qual pode conter uma ou mais tabelas (o objeto RecordSet somente pode
conter uma tabela) e tambm os relacionamentos entre as tabelas e informaes sobre chaves primrias e chaves
estrangeiras.
Com o modelo desconectado do ADO.NET, no utilizamos cursores, nem no lado cliente, nem no lado servidor. As
classes de acesso a dados fornecem os mecanismos necessrios para a manipulao dos dados. O formato adotado
para armazenar os dados no cliente o XML, um padro amplamente aceito pela indstria. Com ADO, ao utilizar
tecnologias como RDS para trabalhar com dados desconectados, temos um formato proprietrio para os dados, formato
este que somente aceito pelo Internet Explorer.
Neste captulo vamos aprender a utilizar alguns objetos bsicos para o acesso a dados
relacionais, mais especificamente, a dados do SQL Server e do Microsoft Access. Veremos NOTA: Para maiores
como estabelecer uma conexo com o banco de dados, acessar dados de uma ou mais informaes sobre Tabelas,
tabelas e exibir estes dados em uma pgina ASP.NET. Atributos, Chaves Primrias,
Chaves Estrangeiras e
Para exibio dos resultados obtidos, estaremos utilizando o Web Server Control Relacionamentos entre
DataGrid. Estudaremos este controle em detalhes. Veremos que o controle DataGrid tabelas, consulte o Anexo II.
facilita, enormemente, a tarefa de exibir dados em uma pgina ASP.NET. No nosso
exemplo mais simples, veremos que, o que no ASP 3.0 exige vrias linhas de cdigo, no
ASP.NET, com o controle DataGrid, pode ser feito em uma nica linha de cdigo.
www.juliobattisti.com.br 358
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Categorias
IMPORTANTE: Os nomes
Clientes de empresas, produtos,
Detalhes do pedido pessoas, personagens e/
Fornecedores ou dados apresentados
Funcionrios
neste banco de dados so
fictcios e no
Pedidos
representam de forma
Produtos
alguma qualquer
Transportadoras indivduo, produto,
empresa ou evento, salvo
Na Figura 10.2 temos o diagrama Entidades x Relacionamentos para este banco de
meno contrria.
dados:
359 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
1. O SQL Server ainda no est instalado: Neste caso criada uma instncia chamada NETSDK. Para estabelecermos
uma conexo, conforme veremos nos exemplos deste captulo, fornecemos o nome da instncia NETSDK,
como valor para o parmetro server.
2. O SQL Server j est instalado: Neste caso criada uma nova instncia chamada SERVIDOR\NETSDK, onde
SERVIDOR o nome do computador que voc est utilizando. Para estabelecermos uma conexo, conforme
veremos nos exemplos deste captulo, fornecemos o nome completo da instncia SERVIDOR\NETSDK, como
valor para o parmetro server. O computador que estou utilizando para os exemplos encaixa-se neste segundo
caso. Nos exemplos deste captulo vou utilizar SERVIDOR\NETSDK, como valor para o parmetro Servidor,
nos objetos onde este parmetro for necessrio. Se voc estiver utilizando um computador com um nome diferente,
substitua SERVIDOR pelo nome do computador que voc est utilizando.
IMPORTANTE: Os nomes de empresas, produtos, pessoas, personagens e/ou dados apresentados neste banco de dados so
fictcios e no representam de forma alguma qualquer indivduo, produto, empresa ou evento, salvo meno contrria.
www.juliobattisti.com.br 360
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
O Banco de dados pubs utilizado por uma rede de livrarias, para o controle de vendas e pesquisa dos ttulos existentes
no catlogo da livraria.
Na Figura 10.4 temos o diagrama Entidades x Relacionamentos para este Banco de dados.
361 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Neste captulo vamos estudar diversas classes dos namespaces da lista anterior. Veremos como estabelecer uma conexo
com um banco de dados, como retornar dados a partir desta conexo e como exibir estes dados em uma pgina
ASP.NET.
No ASP 3.0, utilizando ADO, o objeto que utilizamos para retornar dados o RecordSet. No ADO.NET no temos o
objeto RecordSet. De incio voc que j estava acostumado com o objeto RecordSet pode estranhar um pouco, mas
conforme veremos nos exemplos deste captulo, os objetos do ADO.NET alm de mais poderosos so tambm mais
fceis de utilizar. A principal facilidade notada no momento de exibir os resultados obtidos, quando podemos utilizar
alguns Web Server Controls bastante poderosos, mais especificamente o controle DataGrid.
Temos duas maneiras diferentes para importar (ou fazer referncia, como preferirem) um namespace, em uma
pgina ASP.NET.
www.juliobattisti.com.br 362
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
1. Utilizando a diretiva @Import, no incio da pgina. No fragmento de cdigo a seguir, estamos importando os
namespaces System.Data, System.Data.SqlClient e System.OleDb:
<%@Import Namespace=System.Data %>
<%@Import Namespace=System.Data.SqlClient %>
<%@Import Namespace=System.Data..OleDb%>
2. Utilizando o comando using do C#. No fragmento de cdigo a seguir, estamos importando os namespaces
System.Data e System.Data.SqlClient:
using System.Data;
using System.Data.SqlClient;
Uma vez feitas as devidas importaes (ou referncias), estamos aptos a utilizar as classes dos namespaces referenciados.
No namespace System.Data existe uma classe chamada DataSet. Quando declaramos e inicializamos uma varivel,
como sendo do tipo DataSet, estamos criando um objeto baseado na classe DataSet. No trecho de cdigo a seguir,
temos um exemplo onde criamos um objeto chamado MeusDados, o qual baseado na classe DataSet:
Estabelecendo Conexes
Uma coisa no mudou no ADO.NET, em relao ao ADO: o primeiro passo estabelecer uma conexo com o banco
de dados. Embora com ADO.NET tenhamos um modelo desconectado, conforme descrito anteriormente, o primeiro
passo fazer uma conexo com o banco de dados. Uma vez estabelecida a conexo, obtemos os dados desejados e
podemos trabalhar com estes dados diretamente no navegador, desconectados do banco de dados. Uma vez feitas as
alteraes necessrias, sincronizamos os dados com o banco de dados.
Para estabelecer uma conexo com um banco de dados do SQL Server, devemos utilizar, preferencialmente, a classe
SqlConnection, do namespace System.Data.SqlClient.
Para acessar um banco de dados utilizando o OLE-DB Provider correspondente, utilizamos a classe OleDbConnection
do namespace System.Data.OleDb. Como existe um OLE-DB Provider para o SQL Server, tambm poderamos
utilizar a classe OleDbConnection para fazer uma conexo com o SQL Server, porm a classe SqlConnection bem
mais eficiente, em termos de desempenho, pois foi especificamente projetada para trabalhar com o SQL Server 2000,
assim como foram todas as classes do namespace System.Data.SqlClient.
363 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O parmetro passado uma string que contm as informaes necessrias para estabelecer a conexo com o banco de
dados. Mais adiante veremos um exemplo de utilizao e criao de uma conexo.
Na Tabela 10.1 temos uma descrio das principais propriedades da classe SqlConnection:
Propriedade Descrio
ConnectionString utilizada para definir ou retornar uma string de texto onde so informados os diversos
parmetros para estabelecer a conexo, como por exemplo o nome do servidor, a
instncia, o nome do banco de dados, o nome de login e senha.
ConnectionTimeOut Define por quanto tempo feita a tentativa de estabelecer a conexo. Aps o tempo
definido nesta propriedade, a tentativa cancelada e um erro gerado.
Database utilizada para definir ou retornar o nome do banco de dados que ser utilizado quando
a conexo for estabelecida.
DataSource Retorna o nome da instncia do SQL Server com a qual foi estabelecida uma conexo.
ServerVersion Retorna uma string informando a verso do servidor SQL Server com o qual a conexo foi
estabelecida.
State Retorna o estado atual da conexo.
Vamos apresentar um pequeno exemplo, onde criamos uma conexo com o Banco de dados pubs da instncia
SERVIDOR\NETSDK (conforme descrito anteriormente). Uma vez estabelecida a conexo, vamos exibir as
propriedades desta conexo em um Web Server Control do tipo TextArea. Vamos utilizar o evento Page_Load, da
pgina ASP.NET, para estabelecer a conexo com o Banco de dados pubs.
www.juliobattisti.com.br 364
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
<html>
<script language=C# runat=server>
{
// Crio uma conexo com o banco de dados pubs localizado no servidor local.
// Vamos acessar a instncia SERVIDOR\NETSDK.
String auxPropriedades;
auxPropriedades = Propriedades da conexo:;
ExibePropriedades.Font.Bold=true;
ExibePropriedades.Text=auxPropriedades;
</script>
<body>
365 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:TextBox
runat=server
id=ExibePropriedades
Text=
Rows=10"
Cols=70"
Font_Face=Arial Font_Size=3"
BackColor=lightblue
TextMode=MultiLine
/>
</body>
</html>
Digite o cdigo da Listagem 10.1 e salve o mesmo em um arquivo chamado chap10ex1.aspx, na pasta chap10, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Ao carregar a pgina voc ir obter uma pgina semelhante pgina indicada na Figura 10.5.
www.juliobattisti.com.br 366
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Observe que a primeira coisa que fizemos foi referenciar os namespaces System.Data e System.Data.SqlClient:
<%@ Import Namespace=System.Data %>
<%@ Import Namespace=System.Data.SqlClient %>
Se no fizssemos essa referncia, obteramos um erro de compilao, ao carregar a pgina, conforme indicado na
Figura 10.6.
Observe o texto em destaque, onde dito que no foi possvel encontrar SqlConnection. Isto acontece porque esta
classe faz parte do namespace System.Data.SqlClient, o qual no foi referenciado na pgina ASP.NET.
Observe que este um comando nico, que foi dividido em duas linhas por falta de espao. Declaramos a varivel
MinhaConexo como sendo do tipo SqlConnection, ao mesmo tempo que inicializamos esta varivel, passando como
parmetro uma string de conexo. Na string passada como parmetro so definidas as seguintes informaes:
367 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
importante salientar que o objeto do tipo SqlConnection foi criado, porm ainda no foi estabelecida a conexo,
conforme pode ser confirmado pelo valor da propriedade State=Closed, na Figura 10.5.
No restante do evento Load, montamos uma string (auxPropriedades), onde vamos concatenando o nome e o
valor das propriedades do objeto MinhaConexo. Observe que anexamos dois caracteres de nova linha \n\n.
Isso feito para ir para uma nova linha a cada propriedade (um \n) e para deixar uma linha em branco entre a
exibio de cada propriedade (mais um \n).
Aps termos montado a string auxPropriedades, definimos a fonte do controle ExibePropriedades para negrito e
atribumos o valor da varivel auxPropriedades, propriedade Text do controle ExibePropriedades, conforme indicado
no fragmento a seguir:
ExibePropriedades.Font.Bold=true;
ExibePropriedades.Text=auxPropriedades;
O controle ExibePropriedades um Web Server Control do tipo TextBox com mltiplas linhas. Para maiores
informaes sobre este controle, consulte o Captulo 9.
Na Tabela 10.2 temos uma descrio dos principais mtodos da classe SqlConnection:
Mtodo Descrio
Open Abre a conexo de acordo com as definies da propriedade ConnectionString.
Close Fecha a conexo com o banco de dados.
ChangeDatabase Altera o banco de dados associado com a conexo.
O principal evento do objeto SqlConnection o evento StateChange. Este evento ocorre quando o estado da conexo
alterado de Open para Closed ou vice-versa.
No exemplo da Listagem 10.1, podemos adicionar o seguinte comando, logo aps a criao da conexo MinhaConexo:
MinhaConexo.Open();
Este comando abre a conexo MinhaConexo. Aps inserirmos este comando na Listagem 10.1 e recarregarmos a
pgina, obteremos o resultado indicado na Figura 10.7.
www.juliobattisti.com.br 368
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Primeiro definimos uma string chamada DefineConexo. Esta string contm as informaes necessrias para estabelecer
a conexo com um banco de dados do Microsoft Access. importante salientar a utilizao das duas barras invertidas
(\\), ao invs de uma nica barra. Como a barra invertida utilizada para caracteres de escape, no C#, como por
exemplo: \n para quebra de linha, quando queremos representar uma barra e no um caractere de escape, precisamos
colocar duas barras. Se voc colocar somente uma barra, ir obter o erro indicado na Figura 10.8, quando tentar
carregar a pgina:
369 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Figura 10.8: Erro por usarmos um nica barra (\) ao invs de duas barras (\\).
Observe a mensagem em destaque, na Figura 10.8, informando que temos um caractere de escape, invlido. Em
seguida criamos um objeto do tipo OleDbConnection, chamado MinhaConexo e passamos a string DefineConexo
como parmetro para o mtodo construtor do objeto MinhaConexo.
Na Tabela 10.3 temos os componentes que podem fazer parte da string de conexo (ConnectionString), para o OLE-
DB Provider do Microsoft Access.
Tabela 10.3 Definindo a propriedade ConnectionString para uma fonte do Microsoft Access.
Propriedade Descrio
Provider Deve ser especificado o OLE DB Provider para o Microsoft Access. Para esta propriedade
utilizamos o seguinte valor: Microsoft.Jet.OLEDB.4.0.
Data Source Informamos o caminho para o arquivo .mdb. Por exemplo, C:\\Arquivos de
programas\\NorthWind.mdb.
User ID Especifica o nome do usurio com a qual a conexo ser estabelecida. Caso esta
propriedade no seja informada, a mesma ser definida como admin, o qual o
usurio padro para o Microsoft Access.
www.juliobattisti.com.br 370
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Propriedade Descrio
Password Informa a senha para o usurio que far a conexo. Caso esta propriedade no seja
informada, a mesma ser definida como , ou seja, senha em branco.
Na Tabela 10.4 temos uma descrio das principais propriedades da classe OleDbConnection:
Propriedade Descrio
ConnectionString utilizada para definir ou retornar uma string de texto onde so informados os diversos
parmetros para estabelecer a conexo, como por exemplo o nome do servidor, a
instncia, o nome do banco de dados, o nome de login e senha.
ConnectionTimeOut Define por quanto tempo feita a tentativa de estabelecer a conexo. Aps o tempo
definido nesta propriedade, a tentativa cancelada e um erro gerado.
Database utilizada para definir ou retornar o nome do banco de dados que ser utilizado quando
a conexo for estabelecida. Utilizada, normalmente, para conexo com o SQL Server ou
ORACLE.
State Retorna o estado atual da conexo.
Vamos apresentar um pequeno exemplo, onde criamos uma conexo com o banco de dados C:\Meus
documentos\NorthWind.mdb. Uma vez estabelecida a conexo, vamos exibir as propriedades desta conexo em um
Web Server Control do tipo TextArea. Vamos utilizar o evento Page_Load, da pgina ASP.NET, para estabelecer a
conexo com o Banco de dados pubs.
<html>
371 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MinhaConexo.Open();
String auxPropriedades;
auxPropriedades = Propriedades da conexo:;
ExibePropriedades.Font.Bold=true;
ExibePropriedades.Text=auxPropriedades;
</script>
<body>
<h3><font face=Verdana>Classe OleDbConnection!!!</font></h3>
www.juliobattisti.com.br 372
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
<asp:TextBox
runat=server
id=ExibePropriedades
Text=
Rows=10"
Cols=70"
Font_Face=Arial
Font_Size=3"
BackColor=lightblue
TextMode=MultiLine
/>
</body>
</html>
Digite o cdigo da Listagem 10.2 e salve o mesmo em um arquivo chamado chap10ex2.aspx, na pasta chap10, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
373 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Na Tabela 10.5 temos uma descrio dos principais mtodos da classe OleDbConnection:
Mtodo Descrio
Open Abre a conexo de acordo com as definies da propriedade ConnectionString.
Close Fecha a conexo com o banco de dados.
ChangeDatabase Altera o banco de dados associado com a conexo. Utilizado para conexes com o SQL
Server ou ORACLE.
O principal evento do objeto OleDbConnection o evento StateChange. Este evento ocorre quando o estado da
conexo alterado de Open para Closed ou vice-versa.
Muito bem, j sabemos estabelecer uma conexo com um banco de dados. E agora? Ainda precisamos aprender como
fazer as seguintes operaes:
Criar uma conexo com uma fonte de dados utilizando SqlConnection ou OleDbConnection.
Definir um comando SQL a ser executado no banco de dados. O comando definido utilizando um objeto do
tipo SqlDataAdapter ou OleDbDataAdapter. O comando SQL define os dados que sero retornados a partir do
banco de dados. Tambm podemos utilizar um objeto SqlCommand ou OleDbCommand. Uma opo criar
um objeto Command e depois a propriedade SelectCommand do objeto DataAdapter como sendo igual ao
objeto Command. Outra opo passar o comando SQL como parmetro do objeto DataAdapter, o que faz
www.juliobattisti.com.br 374
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
com que no seja necessria a criao explcita de um objeto Command. O objeto DataAdapter faz a ligao
de um ou mais objetos do tipo Command com um objeto do tipo DataSet. Por exemplo, podemos ligar vrios
objetos Command com um nico DataSet. Iremos detalhar todos estes aspectos nos exemplos deste captulo.
Utilizamos os dados retornados pelo(s) comando(s) SQL para preencher um objeto do tipo DataSet.
Vamos utilizar um Web Server Control Datagrid, para exibir os dados associados ao objeto do tipo DataSet.
Figura 10.10: Passos para acessar e exibir dados em uma pgina ASP.NET.
importante salientar que esta apenas uma das maneiras de acessarmos dados e exibi-los em uma pgina ASP.NET.
Nos Captulos 11 e 12 veremos outras maneiras de ter acesso a variadas fontes de dados. No restante deste captulo
vamos estudar os objetos indicados no diagrama da Figura 10.10.
375 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
SqlCommand: Este objeto utilizado para definir um comando que ser executado atravs de uma conexo do
tipo SqlConnection.
OleDbCommand: Utilizado para definir um comando que ser executado atravs de uma conexo do tipo OleDbConnection.
Conforme descrevemos no tpico anterior, podemos criar um objeto Command, no qual definimos um comando SQL
a ser executado atravs de uma conexo. As propriedades dos objetos SqlCommand e OleDbCommand so semelhantes.
Na Tabela 10.6 temos uma descrio das principais propriedades das classes SqlCommand/OleDbCommand:
Propriedade Descrio
CommandText Esta propriedade utilizada para definir ou retornar o comando SQL ou o nome de um
Stored Procedure associado com o comando.
CommandTimeOut Define por quanto tempo o Framework .NET tenta executar o comando. Se no tempo
definido por esta propriedade, o comando no for executado com sucesso, o mesmo
suspenso e uma mensagem de erro retornada.
CommandType Pode ser definida como Text, que o valor padro e significa que o valor atribudo
propriedade CommandText um comando SQL. Tambm pode assumir o valor
StoredProcedure; neste caso significa que o valor atribudo propriedade CommandText
o nome de um Stored Procedure.
Connection Esta propriedade utilizada para definir ou retornar a conexo atravs da qual o
comando executado.
Na Tabela 10.7 temos uma descrio dos principais mtodos das classes SqlCommand/OleDbCommand:
Mtodo Descrio
Cancel Cancela a execuo do comando.
CreateParameter Utilizada para a criao e definio de parmetros. Podemos utilizar parmetros quando
estamos executando um Stored Procedure ou uma consulta parametrizada do Microsoft
Access.
ExecuteNonQuery Executa o comando definido na propriedade CommandText, atravs da conexo definida
na propriedade Connection, para consultas que no retornam dados. Exemplo de consultas
que no retornam dados so consultas de atualizao, adio ou excluso. Este mtodo
retorna um valor inteiro, valor este que indica o nmero de registros afetados pela
execuo do comando.
www.juliobattisti.com.br 376
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Vamos apresentar um pequeno exemplo, onde criamos uma conexo com o banco de dados C:\Meus
documentos\NorthWind.mdb. Uma vez estabelecida a conexo vamos criar um objeto OleDbCommand associado
com esta conexo e vamos exibir as propriedades do objeto OleDbCommand em um Web Server Control do tipo
TextArea. Vamos utilizar o evento Page_Load, da pgina ASP.NET, para estabelecer a conexo com o Banco de dados
pubs do SQL Server.
<html>
MinhaConexo.Open();
377 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
String auxPropriedades;
auxPropriedades = Propriedades do objeto OleDbCommand:;
ExibePropriedades.Font.Bold=true;
ExibePropriedades.Text=auxPropriedades;
</script>
<body>
<asp:TextBox
runat=server
id=ExibePropriedades
Text=
Rows=10"
Cols=70"
www.juliobattisti.com.br 378
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Font_Face=Arial
Font_Size=3"
BackColor=lightblue
TextMode=MultiLine
/>
</body>
</html>
Digite o cdigo da Listagem 10.3 e salve o mesmo em um arquivo chamado chap10ex3.aspx, na pasta chap10, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Neste exemplo criamos um objeto do tipo OleDbCommand, conforme indicado no fragmento de cdigo a seguir:
string TextoDoComando = SELECT NmeroDoPedido, CdigoDoCliente,
+ PasDeDestino FROM Pedidos;
379 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Observe que primeiro criamos uma string TextoDoComando, a qual atribumos o comando SQL que ser associado
com o objeto OleDbCommand. Em seguida criamos o objeto MeuComando e passamos como parmetros, para o
mtodo construtor do objeto, primeiro a string TextoDoComando e em seguida o nome da conexo, atravs da qual o
comando deve ser executado.
importante salientar que, neste momento, o comando ainda no foi executado e, portanto, ainda no foram retornados dados.
Em seguida comeamos a concatenar os valores das propriedades do objeto MeuComando em uma string
auxPropriedades. No final, o valor desta string exibido em um controle do tipo TextArea.
Ao invs dos objetos OleDbConnection e OleDbCommand, poderamos utilizar os objetos SqlConnection e
SqlCommand para conectar com o SQL Server, conforme indicado no cdigo a seguir:
SqlConnection MinhaConexo = new
SqlConnection(server=SERVIDOR\\NETSDK;uid=sa;pwd=;database=pubs);
MinhaConexo.Open();
Apenas definir um objeto OleDbCommand ou SqlCommand no faz com que dados sejam retornados atravs da
conexo definida. Quando os dados so retornados, os mesmos so armazenados em um objeto do tipo DataSet. Mas
precisamos de uma maneira de ligar o objeto Command com o objeto DataSet, atravs dos seguintes passos:
O objeto que faz esta ligao o DataAdapter.Vamos estudar este objeto em detalhes. O objeto DataAdapter
(SqlDataAdapter ou OleDbDataAdapter) trabalha em conjunto com o objeto DataSet. Nos exemplos do prximo
tpico veremos a utilizao do objeto DataAdapter e apresentaremos apenas alguns aspectos bsicos do objeto DataSet.
No tpico seguinte iremos detalhar o objeto DataSet. Tambm estaremos utilizando alguns elementos bsicos do
objeto DataGrid, o qual ser explicado em detalhes no final do Captulo.
SqlDataAdapter: Este objeto utilizado para executar um ou mais comandos ou Stored Procedures, em um
banco de dados do SQL Server e associar os resultados obtidos com um objeto do tipo DataSet.
OleDbDataAdapter: Utilizado para executar um ou mais comandos em uma fonte de dados, utilizando o OLE-
DB Provider respectivo, e associar os resultados obtidos com um objeto do tipo DataSet.
Os objetos SqlDataAdapter/OleDbDataAdapter funcionam como uma ponte entre uma fonte de dados e o objeto
DataSet, tanto para acesso quanto para alteraes nos dados. Esta ponte pode ser estabelecida de duas maneiras:
www.juliobattisti.com.br 380
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
1. Atravs da utilizao do mtodo Fill do objeto DataAdapter, para retornar dados de uma fonte de dados e colocar
estes dados em um objeto DataSet.
2. Atravs da utilizao do mtodo Update do objeto DataAdapter, mtodo este que sincroniza os dados da fonte de
dados original, com as modificaes feitas nos dados do objeto DataSet.
Na Tabela 10.8 temos uma descrio das principais propriedades das classes SqlDataAdapter/OleDbDataAdapter:
Propriedade Descrio
DeleteCommand Utilizada para definir ou retornar um comando SQL para excluso de dados, normalmente
um comando DELETE.
InsertCommand Utilizada para definir ou retornar um comando SQL para insero de novos dados,
normalmente um comando INSERT.
SelectCommand Utilizada para definir ou retornar um comando SQL, utilizado para retornar dados,
normalmente um comando SELECT. Tambm podemos atribuir, a esta propriedade, um
objeto Command previamente criado.
UpdateCommand Utilizada para definir ou retornar um comando SQL que atualiza dados. Normalmente um
comando UPDATE.
Na Tabela 10.9 temos uma descrio dos principais mtodos das classes SqlDataAdapter/OleDbDataAdapter:
Mtodo Descrio
Fill Com certeza o mtodo mais utilizado. Este mtodo executa o comando definido na propriedade
SelectCommand. Os dados retornados pela execuo do comando definido na propriedade
SelectCommand so associados com um objeto do tipo DataSet.
FillSchema Este mtodo retorna uma tabela em branco, isto , com zero registro, porm com a mesma
estrutura da tabela original. Na prtica o que este mtodo faz copiar a estrutura de uma tabela.
Update Com ASP.NET trabalhamos com um modelo de dados desconectados, conforme descrito no incio
deste captulo. Uma vez retornados os dados em um objeto do tipo DataSet, a conexo com o
banco de dados fechada. Alteraes podem ser feitas nos dados desconectados, porm estas
alteraes precisam ser enviadas para o banco de dados, quer seja o SQL Server, quer seja um
arquivo .mdb do Microsoft Access. O mtodo Update utilizado para enviar estas alteraes para o
banco de dados. O mtodo executa os comandos InsertCommand, UpdateCommand e
DeleteCommand para cada insero, atualizao ou excluso, feitas nos dados desconectados, de
tal forma que estas alteraes sejam enviadas para a fonte de dados original. Em poucas palavras:
sincroniza os dados do objeto DataSet com o conjunto de dados originais.
381 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Na Tabela 10.10 temos uma descrio dos principais eventos das classes SqlDataAdapter/OleDbDataAdapter:
Evento Descrio
FillError Ocorre quando um erro retornado durante a execuo do mtodo Fill.
RowUpdated Ocorre durante uma atualizao, aps o respectivo comando ter sido executado na fonte
de dados original.
RowUpdating Ocorre durante uma atualizao, antes do respectivo comando ter sido executado na fonte
de dados original.
O Objeto DataSet
Os objetos SqlDataAdapter/OleDbDataAdapter, descritos no tpico anterior, so utilizados para executar um comando
SQL ou um Stored Procedure, em um banco de dados e retornar um ou mais conjuntos de dados. Precisamos de uma
estrutura capaz de receber e manipular os dados retornados; esta estrutura o objeto DataSet. O objeto DataSet
derivado da classe DataSet, do namespace System.Data.
O objeto DataAdapter executa um comando atravs de uma conexo e retorna os dados para um objeto DataSet. A
conexo desfeita, pois o objeto DataSet fornece as funcionalidades necessrias para acessarmos e manipularmos os
dados, estando desconectados do servidor. Acessamos e alteramos os dados conforme necessrio e depois as alteraes
efetuadas so sincronizadas com o servidor.
DataSet , sem dvida, o principal objeto do ADO.NET, assim como o objeto RecordSet o principal objeto do ADO.
Um objeto DataSet formado por uma coleo de objetos do tipo DataTable, os quais pertencem coleo Tables.
Para representar o relacionamento entre dois objetos do tipo DataTable, utilizamos um objeto do tipo DataRelation.
Por exemplo, podemos criar um DataSet que contm duas tabelas: Pedidos e Clientes. A tabela Clientes relaciona-se
com a tabela Pedidos, atravs de um relacionamento do tipo um para vrios, ou seja, um cliente pode fazer vrios
pedidos. Podemos representar este relacionamento utilizando um objeto do tipo
DataRelation.
NOTA: Para maiores
Podemos garantir a integridade dos dados atravs da definio de campos do tipo Chave detalhes sobre o modelo
Primria utilizando o objeto UniqueConstraint; e da definio de Chaves Estrangeiras relacional de dados e
utilizando o objeto ForeignKeyConstraint. relacionamentos entre
tabelas, consulte o Anexo
O objeto DataSet l e grava dados e a estrutura dos dados no formato de documentos
II. Neste anexo tambm
XML, os quais podem ser enviados pela Internet via protocolo HTTP, o que facilita a
so descritos os conceitos
troca de informaes com sistemas de outras empresas, sistemas estes tambm habilitados
de Chave primria, Chave
ao XML.
Estrangeira, normalizao
e integridade de dados.
www.juliobattisti.com.br 382
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Na Tabela 10.11 temos uma descrio das principais propriedades da classe DataSet:
Propriedade Descrio
DataSetName Utilizada para definir ou retornar o nome do DataSet.
EnforceConstraints Pode ser utilizada para definir ou retornar um valor True ou False. Se o valor desta
propriedade for True, as regras de integridade sero observadas em uma operao de
atualizao. Por exemplo, se alterarmos o cdigo do cliente em um pedido da tabela
pedidos para 01010 e no existir o cliente com o cdigo 01010 na tabela Clientes, a
operao no ser realizada. Se o valor da propriedade EnforceConstraints for False, a
operao descrita no nosso exemplo ser realizada sem que nenhuma verificao seja feita.
Relations Retorna uma coleo com todos os relacionamentos existentes entre as tabelas do
DataSet.
Tables Retorna uma coleo com todas as tabelas do DataSet.
Na Tabela 10.12 temos uma descrio dos principais mtodos da classe DataSet:
Mtodo Descrio
AcceptChanges Torna definitivas todas as alteraes feitas nas tabelas ou
relacionamentos do DataSet, desde que o mesmo foi inicializado
ou desde a ltima vez que o mtodo AcceptChanges foi chamado.
Clear Remove todos os dados do DataSet, zerando todas as linhas de
todas as tabelas.
Clone Faz uma cpia idntica do DataSet, inclusive dos seus dados, para
um outro objeto do tipo DataSet.
GetChanges Retorna um objeto do tipo DataSet, contendo todas as alteraes
que foram feitas desde a inicializao do DataSet original, ou
desde a ltima chamada do mtodo AcceptChanges.
HasChanges Retorna um valor do tipo Boleano. True indica que houve
alteraes nos dados do DataSet adies, alteraes ou
excluses. False indica que no houve alteraes.
Neste momento j somos capazes de estabelecer uma conexo com o banco de dados, definir um objeto DataAdapter
para executar um comando atravs da conexo estabelecida e preencher um objeto DataSet com os dados retornados.
A prxima etapa exibir os dados obtidos. A exibio dos dados a nica coisa que o usurio v, ao acessar a
383 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
pgina. Existem maneiras variadas para exibir os dados em uma pgina ASP.NET.
Neste captulo estaremos utilizando o controle DataGrid. Em seguida apresentaremos
IMPORTANTE: Tambm
um exemplo simples de conexo com um banco de dados do Microsoft Access. Neste
utilizaremos um objeto do
exemplo vamos utilizar o controle DataGrid. Mais adiante, neste captulo, iremos
tipo DataView que ser
estudar este controle, em detalhes.
detalhado mais adiante.
Vamos conectar com o banco de dados C:\Meus documentos\NorthWind.mdb. Definiremos um comando SQL que
retorna os seguintes campos da tabela Clientes:
CdigoDoCliente
NomeDaEmpresa
Cidade
Pas
<html>
// Crio uma conexo com o banco de dados pubs localizado no servidor local.
// Vamos acessar a instncia SERVIDOR\NETSDK.
www.juliobattisti.com.br 384
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
MeuComando.Fill(ds);
MinhaGrade.DataSource = source ;
MinhaGrade.DataBind();
}
</script>
<body>
385 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
</body>
</html>
Digite o cdigo da Listagem 10.4 e salve o mesmo em um arquivo chamado chap10ex4.aspx, na pasta chap10, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
A primeira coisa que fizemos foi importar os namespaces necessrios System.Data e System.Data.OleDb:
<%@ Import Namespace=System.Data %>
<%@ Import Namespace=System.Data.OleDb %>
Utilizamos o evento Load da pgina para executar os comandos que estabelecem a conexo com o banco de
dados e retornam dados da tabela Clientes Page_Load.
Para estabelecer uma conexo com o banco de dados NorthWind.mdb, utilizamos um objeto OleDbCommand.
Para maiores detalhes sobre este objeto consulte o tpico respectivo, no incio deste captulo.
Uma vez definida a conexo, utilizamos um objeto OleDbDataAdapter, chamado MeuComando, para abrir a
conexo e executar um comando SQL que retorna alguns campos da tabela Clientes:
OleDbDataAdapter MeuComando = new OleDbDataAdapter(SELECT CdigoDoCliente, +
NomeDaEmpresa,Pas,Cidade FROM Clientes, MinhaConexo);
Conforme descrevemos anteriormente, podemos utilizar uma abordagem diferente: Primeiro criar um objeto
OleDbCommand (1 e 2 a seguir), depois declaramos um objeto DataAdapter e passamos o objeto Command para a
propriedade SelectCommand do objeto OleDbDataAdapter (3 e 4 a seguir):
www.juliobattisti.com.br 386
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
O prximo passo declarar um objeto do tipo DataSet, chamado ds, e utilizar o mtodo Fill, do objeto
OleDbDataAdapter, para preencher o objeto DataSet com os dados retornados a partir do banco de dados NorthWind:
DataSet ds = new DataSet();
MeuDataAdapter.Fill(ds);
Na seqncia criamos um objeto do tipo DataView. A principal funo de um objeto DataView permitir a
ligao de uma fonte de dados com um controle do tipo Web Form Controls, como o caso do controle
DataGrid. Um objeto DataView representa uma viso de uma tabela de um objeto DataSet. A viso representada
pelo objeto DataView pode ser utilizada para pesquisar, ordenar, editar e navegar pelos registros da tabela. Na
criao do objeto DataView, associamos o mesmo com a primeira tabela do objeto DataSet, o que feito
utilizando a coleo Tables do objeto DataSet. Observe que a primeira tabela da coleo possui ndice zero
(ds.Tables[0]), a segunda tabela da coleo possui ndice um (ds.Tables[1]), e assim por diante.
DataView source = new DataView(ds.Tables[0]);
Em seguida definimos a propriedade DataSource do controle DataGrid (MinhaGrade), como sendo igual ao objeto
DataView recm-criado:
MinhaGrade.DataSource = source ;
387 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MinhaGrade.DataBind();
Feito isso, o controle DataGrid, colocado na seo de apresentao da pgina, ir exibir os registros retornados, no
formato de uma tabela. Observe que no precisamos iniciar um lao While para navegar por cada registro do objeto
DataView. Tambm no precisamos utilizar um monte de comandos Response.Write para montar a pgina de sada,
como fazamos no ASP 3.0. Todo este trabalho feito, automaticamente, pelo controle DataGrid.
Este exemplo salienta bem o poder e flexibilidade dos Web Server Controls, como o caso do controle DataGrid.
A ttulo de exemplo, vamos supor que voc deseja exibir apenas os clientes da
NOTA: Ainda neste
Alemanha. Para tal, basta alterar o comando SQL, da seguinte maneira:
captulo estudaremos o
OleDbDataAdapter MeuComando = new
OleDbDataAdapter(SELECT CdigoDoCliente, objeto DataView e o
+ NomeDaEmpresa, Cidade, Pas FROM Clientes where controle DataGrid, em
Pas=Alemanha, MinhaConexo); maiores detalhes.
Voc obter o resultado indicado na Figura 10.13.
O Objeto DataView
Para entender a funo do objeto DataView, vamos fazer uma recaptulao dos objetos que j estudamos neste captulo:
Utilizamos um objeto OleDbConnection ou SqlConnection para estabelecer uma conexo com o banco de dados.
www.juliobattisti.com.br 388
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
O objeto DataAdapter faz a ponte entre um ou mais objetos Command (SqlCommand ou OleDbCommand) e
um objeto DataSet. Ao final deste processo, os dados esto armazenados em um objeto DataSet.
O objeto DataView faz a ponte entre o objeto DataSet e um Web Form ou Web Form Control, onde sero
exibidos os dados. Na Figura 10.14, temos uma viso geral deste processo:
Nesta figura fica bem destacado o papel de ponte entre o objeto DataSet e o controle DataGrid, exercido pelo objeto
DataView. No exemplo da figura, utilizamos o controle DataGrid, mas poderia ser qualquer outro Web Form Control
capaz de acessar dados de um DataView.
Um objeto DataView pode ser configurado para retornar apenas uma parte dos dados de um objeto DataTable. Podemos,
por exemplo, ter dois objetos DataView, ligados com o mesmo objeto DataTable, porm exibindo diferentes dados.
Vamos estudar mais alguns detalhes sobre o objeto DataView.
Na Tabela 10.13 temos uma descrio das principais propriedades da classe DataView:
Propriedade Descrio
AllowDelete Propriedade do tipo Boleana. Se contiver o valor True, podemos excluir registros; se
contiver o valor False, no so permitidas excluses. Esta propriedade pode ser utilizada
para definir ou para retornar um valor True ou False.
AllowEdit Utilizada para definir ou retornar um valor do tipo Boleano. Se o valor da propriedade
for True, so permitidas alteraes nos dados; caso contrrio os dados no podero ser
alterados.
AllowNew Utilizada para definir ou retornar um valor do tipo Boleano. Se o valor da propriedade for
True, poderemos adicionar novos registros, utilizando o mtodo AddNew; caso contrrio
novos registros no podero ser adicionados.
Count Retorna o nmero de registros no DataView.
389 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Propriedade Descrio
RowFilter Utilizada para definir ou retornar uma expresso que determina quais os dados do objeto
DataView que sero exibidos.
RowStateFilter Com ADO.NET mantido um histrico das alteraes feitas nos dados. O objeto DataView
mantm as verses anteriores de registros que foram alterados ou excludos. Podemos
utilizar esta propriedade para retornar ou definir uma expresso que filtra apenas os
registros em um determinado estado, como por exemplo: alterados, excludos, etc.
Sort Utilizada para definir ou retornar informaes sobre a(s) coluna(s) e a ordem de
classificao dos dados.
Table Utilizada para definir ou retornar a tabela a partir da qual o DataView obtm os dados.
Na Tabela 10.14 temos uma descrio dos principais mtodos da classe DataView:
Mtodo Descrio
AddNew Adiciona um novo registro ao DataView.
Delete Exclui um registro do DataView.
Find Localiza um determinado registro, com base no valor da chave primria.
Exemplo 1: Neste exemplo faremos uma conexo com o banco de dados C:\Meus documentos\Northwind.mdb. Vamos
retornar os seguintes campos da tabela Funcionrios:
CdigoDoFuncionrio
Nome
Cargo
DataDeNascimento
Cidade
Os dados sero apresentados na pgina, utilizando um controle DataGrid. Tambm apresentaremos um controle ListBox,
onde o usurio poder selecionar um campo pelo qual os dados sero ordenados em ordem Crescente. Por padro, os
dados so classificados pelo CdigoDoFuncionrio.
www.juliobattisti.com.br 390
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
<html>
391 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MeuComando.Fill(ds);
switch (aux)
{
case Cargo:
source.Sort=Cargo ASC;
break;
case Cidade:
source.Sort=Cidade ASC;
break;
case Nome:
source.Sort=Nome ASC;
break;
default:
// outras opes.
www.juliobattisti.com.br 392
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
break;
}
MinhaGrade.DataSource = source ;
MinhaGrade.DataBind();
}
</script>
<body>
<% Exibe as informaes do DataGrid no corpo da pgina. %>
<h3><font face=Verdana>Funcionrios da empresa North Wind!!!</font></h3>
<BR>
<form runat=server>
<asp:ListBox id=CampoClassificar
Rows=1"
Width=200px
runat=server>
<asp:ListItem>Cargo</asp:ListItem>
<asp:ListItem>Cidade</asp:ListItem>
<asp:ListItem selected=True>Cdigo do Funcionrio</asp:ListItem>
<asp:ListItem>Data de Nascimento</asp:ListItem>
<asp:ListItem>Nome</asp:ListItem>
</asp:ListBox>
393 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<BR>
</form>
</body>
</html>
Digite o cdigo da Listagem 10.5 e salve o mesmo em um arquivo chamado chap10ex5.aspx, na pasta chap10, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Observe que a listagem est classificada em ordem crescente do Cdigo do Funcionrio. Vamos testar o nosso exemplo.
Na lista Classificar Por, selecione Nome e d um clique no boto Classificar. Voc obter uma listagem classificada
pelo nome do funcionrio, conforme indicado na Figura 10.16:
www.juliobattisti.com.br 394
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
O cdigo para conectar com o banco de dados e retornar dados muito semelhante ao cdigo utilizado nos
exemplos anteriores. Para maiores detalhes sobre esta parte do cdigo consulte os exemplos das Listagens
10.1, 10.2, 10.3 e 10.4.
Na seo de apresentao da pgina criamos um formulrio e adicionamos um Web Server Control do tipo
ListBox chamado CampoClassificar. Este controle exibe as opes de classificao. O cdigo que define o
controle ListBox est indicado a seguir:
<asp:ListBox id=CampoClassificar
Rows=1"
Width=200px
runat=server>
<asp:ListItem>Cargo</asp:ListItem>
<asp:ListItem>Cidade</asp:ListItem>
<asp:ListItem selected=True>Cdigo do Funcionrio</asp:ListItem>
<asp:ListItem>Data de Nascimento</asp:ListItem>
<asp:ListItem>Nome</asp:ListItem>
</asp:ListBox>
395 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Observe que, por padro, ao carregarmos a pgina, a opo Cdigo do Funcionrio vem selecionada selected=True.
Para maiores informaes sobre o controle ListBox, consulte o Captulo 9.
Na seo de cdigo precisamos verificar qual a opo selecionada no ListBox e, com base na opo selecionada,
classificar os dados do DataView. Para isso utilizamos a instruo switch/case do C#, conforme indicado a seguir:
string aux = CampoClassificar.SelectedItem.Value;
<l
switch (aux)
{
case Cargo:
source.Sort=Cargo ASC;
break;
case Cidade:
source.Sort=Cidade ASC;
break;
case Nome:
source.Sort=Nome ASC;
break;
default:
// outras opes.
break;
}
Primeiro criamos uma string aux e atribumos a esta string o valor do item selecionado na ListBox CampoClassificar:
www.juliobattisti.com.br 396
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Em seguida, utilizamos a string aux como varivel de comparao para a instruo switch/case. Com base no valor da
string aux, definimos a classificao dos dados do DataView. Para definir a classificao utilizamos a propriedade
Sort do objeto source, objeto este que do tipo DataView, como no exemplo a seguir:
source.Sort=CdigoDoFuncionrio ASC;
A propriedade Sort uma String que contm o nome do campo seguido de um espao e
da palavra ASC para classificao crescente ou DESC para classificao decrescente. IMPORTANTE: Para
maiores informaes
Exemplo 2: Neste exemplo faremos uma conexo com o banco de dados C:\Meus sobre a instruo switch/
documentos\Northwind.mdb. Vamos retornar os seguintes campos da tabela Pedidos: case e sobre as demais
instrues de controle de
NmeroDoPedido fluxo do C#, consulte o
DataDoPedido Captulo 3.
CidadeDeDestino
PasDeDestino
Os dados sero apresentados na pgina, utilizando um controle DataGrid. Tambm apresentaremos dois controles
ListBox. O usurio poder classificar os dados por um ou dois campos. Caso deseje classificar apenas por um campo,
basta selecionar No classificar, na segunda lista. Por padro os dados so classificados apenas pelo NmeroDoPedido.
Tambm apresentaremos dois controles do tipo RadioButton, onde o usurio pode selecionar classificao Crescente
ou Decrescente.
Listagem 10.6 Um exemplo completo com DataView e o mtodo Sort com dois campos.
<%@ Import Namespace=System.Data %>
<%@ Import Namespace=System.Data.OleDb %>
<html>
397 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MeuComando.Fill(ds);
www.juliobattisti.com.br 398
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
if (Crescente.Checked)
{
aux = aux + ASC,;
}
else
{
aux = aux + DESC,;
}
if (Crescente.Checked)
{
aux = aux + ASC;
}
else
{
aux = aux + DESC;
}
source.Sort = aux;
MinhaGrade.DataSource = source ;
MinhaGrade.DataBind();
}
</script>
<body>
399 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<form runat=server>
<BR>
<BR>
<table>
<tr>
<td>
<td>
<td>
<B><font face=Verdana> Em qual ordem?</font></B>
</td>
</tr>
<tr>
<td>
<asp:ListBox id=CampoClassificar1"
Rows=1"
Width=200px
runat=server>
<asp:ListItem>CidadeDeDestino</asp:ListItem>
<asp:ListItem>DataDoPedido</asp:ListItem>
<asp:ListItem selected=True>NmeroDoPedido</asp:ListItem>
<asp:ListItem>PasDeDestino</asp:ListItem>
</asp:ListBox>
www.juliobattisti.com.br 400
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
</td>
<td>
<asp:ListBox id=CampoClassificar2"
Rows=1"
Width=200px
runat=server>
<asp:ListItem>CidadeDeDestino</asp:ListItem>
<asp:ListItem selected=True>DataDoPedido</asp:ListItem>
<asp:ListItem>NmeroDoPedido</asp:ListItem>
<asp:ListItem>PasDeDestino</asp:ListItem>
</asp:ListBox>
</td>
<td>
<asp:RadioButton
id=Crescente
Text=Crescente
Checked=True
GroupName=Ordem
runat=server
/>
<asp:RadioButton
id=Decrescente
Text=Decrescente
GroupName=Ordem
runat=server
/>
</td>
</tr>
401 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</table>
<asp:DataGrid
id=MinhaGrade
runat=server
Width=700"
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
<BR>
</form>
</body>
</html>
Digite o cdigo da Listagem 10.6 e salve o mesmo em um arquivo chamado chap10ex6.aspx, na pasta chap10, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Observe que a listagem est classificada primeiro em ordem crescente do NmeroDoPedido, em seguida em ordem
Crescente da DataDoPedido. Vamos testar o nosso exemplo. Na primeira lista selecione PasDeDestino e na segunda lista
selecione CidadeDeDestino. Para ordem de classificao clique na opo Decrescente. D um clique no boto Classificar.
Voc obter uma listagem classificada pelo nome de Pedidos. Parte do resultado est indicado na Figura 10.18.
www.juliobattisti.com.br 402
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Figura 10.17: Relao de pedidos opo para classificar por dois campos diferentes.
Utilizamos uma tabela para fazer o alinhamento dos controles, no incio da pgina. Para fazer um controle
mais refinado do alinhamento, utilizamos o caracter   non break space. Este um caracter especial do
HTML utilizado para espao em branco.
Figura 10.18: Relao de Pedidos classificada por Pas e dentro do pas por Cidade.
403 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
No formulrio, na seo de apresentao da pgina, adicionamos dois controles do tipo ListBox, onde o
usurio pode selecionar por quais campos deseja classificar a listagem. Tambm acrescentamos um grupo
chamado Ordem, com dois controles do tipo RadioButton, onde o usurio pode selecionar Crescente ou
Decrescente. Com base nos valores selecionados nestes controles, definimos o contedo de uma varivel
string aux. Uma vez definido o contedo da string aux, utilizamos esta para definir o valor da propriedade
Sort do objeto source, o qual um objeto do tipo DataView:
string aux = CampoClassificar1.SelectedItem.Value;
if (Crescente.Checked)
{
aux = aux + ASC,;
}
else
{
aux = aux + DESC,;
}
if (Crescente.Checked)
{
aux = aux + ASC;
}
else
{
aux = aux + DESC;
}
source.Sort = aux;
www.juliobattisti.com.br 404
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Observe que, no segundo if, no acrescentamos a vrgula aps ASC ou DESC. No primeiro if acrescentamos, pois,
quando temos dois ou mais campos para definir a propriedade Sort, precisamos separar estes campos por vrgula. Se
o usurio selecionar PasDeDestino na primeira lista, CidadeDeDestino na segunda lista e Crescente, a varivel aux
ter o seguinte valor:
Este valor passado para a propriedade Sort para que a classificao seja feita de acordo com os critrios selecionados
pelo usurio.
Os demais elementos do exemplo Chap10ex6.aspx j foram vistos e explicados em exemplos anteriores. Para
maiores detalhes sobre os mesmos consulte os exemplos destes e dos demais captulos.
Novamente utilizamos o evento Load da pgina Page_Load, para executar a conexo com o banco de dados,
retornar os dados, definir a string aux e ordenar os dados de acordo com os critrios estabelecidos pelo usurio.
Exerccio: Vou propor um exerccio para o amigo leitor. Caso voc tenha alguma dificuldade para resolv-lo, s
entrar em contato atravs do e-mail: batisti@hotmail.com ou batisti@juliobattisti.com.br.
Na pgina Chap10ex6.aspx podemos definir somente um critrio de classificao para os campos selecionados nas
duas listas, ou seja, somente Crescente ou somente Decrescente. O exerccio que fica para o leitor tornar o nosso
exemplo um pouco mais flexvel, de tal maneira que possamos escolher uma ordem de classificao independente
para cada campo. Explico um pouco melhor: Selecionar classificao Crescente para o campo PasDeDestino e,
dentro de um mesmo pas, classificao Decrescente por CidadeDeDestino.
Fazer paginao com ASP 3.0 no era uma tarefa das mais fceis. Um boa quantia de cdigo era necessria e tudo
tinha que ser implementado manualmente. Com o controle DataGrid, definir paginao est resumido a configurar
duas propriedades:
405 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
AllowPaging: Esta propriedade do tipo Boleana. Se for True, a paginao habilitada; se for False, a paginao
desabilitada. Por padro esta propriedade False. Ao tornarmos AllowPaging True, na ltima linha do DataGrid
so exibidos os smbolos < para voltar pgina anterior e > para ir prxima pgina. Podemos alterar
estes valores utilizando as propriedades PagerStyle-NextPageText para alterar o texto do link que vai para a
prxima pgina e PagerStyle-PrevPageText, para alterar o texto do link que volta para a pgina anterior.
Quando estamos na primeira pgina, o link para a pgina anterior automaticamente desabilitado, pois no existe
pgina anterior primeira. Quando estamos na ltima pgina, o link para a prxima pgina automaticamente
desabilitado, pois no existe pgina aps a ltima.
PageSize: O valor desta propriedade define o nmero de registros que sero exibidos, por vez. Se esta propriedade
no for definida, sero exibidos 10 registros por pgina.
Para definir que sejam exibidos 20 registros por pgina, sendo Prxima pgina >>, o texto do link para a prxima
pgina e << Pgina anterior, o texto para o link para a pgina anterior, definimos as seguintes propriedades/valores
do controle DataGrid:
AllowPaging=True
PageSize=20
PagerStyle-NextPageText=Prxima pgina >>
PagerStyle-PrevPageText=<< Pgina anterior
Inserindo a definio para essas propriedades, a tag que define o controle DataGrid ficaria da seguinte maneira:
<ASP:DataGrid
id=MeuDataGrid
runat=server
Width=600"
BackColor=#bbccff
AllowPaging=True
PageSize=20
PagerStyle-NextPageText=Prxima pgina >>
PagerStyle-PrevPageText=<< Pgina anterior
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
www.juliobattisti.com.br 406
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
MeuComando.Connection = MinhaConexo;
MeuComando.CommandType = CommandType.Text;
407 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MeuDataAdapter.SelectCommand = MeuComando;
MeuComando.CommandText=Select CdigoDoFuncionrio,Nome,Sobrenome,Cargo
From Funcionrios;
MeuDataAdapter.Fill(ds,Funcionrios);
www.juliobattisti.com.br 408
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
</script>
<body>
<ASP:DataGrid
id=GradeFuncionrios
runat=server
Width=450"
BackColor=#bbccff
BorderColor=blue
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
409 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
HeaderStyle-BackColor=#aaaadd
HeaderStyle-Font-Bold=True
MaintainState=false
/>
<BR>
<HR>
<ASP:DataGrid
id=GradeTransportadoras
runat=server
Width=400"
BackColor=#bbddff
BorderColor=blue
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
HeaderStyle-Font-Bold=True
MaintainState=false
/>
<HR>
</body>
</html>
Digite o cdigo da Listagem 10.7 e salve o mesmo em um arquivo chamado chap10ex7.aspx, na pasta chap10, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
www.juliobattisti.com.br 410
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
Vamos descrever os passos utilizados para acessar e exibir dados das tabelas Funcionrios e Pedidos. Alguns
passos j foram explicados em exemplos anteriores, mas iremos repetir a explicao, para fazermos uma
reviso do contedo deste captulo:
3. A partir deste ponto temos algumas mudanas em relao aos exemplos anteriores. Primeiro vamos criar um
objeto OleDbCommand e definir as propriedades Connecion e CommandType do objeto OleDbCommand:
OleDbCommand MeuComando = new OleDbCommand();
411 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
4. Agora criamos um objeto DataAdapter e definimos a sua propriedade SelectCommand. Ao definirmos esta
propriedade informamos qual o objeto OleDbCommand que estar associado ao DataAdapter:
OleDbDataAdapter MeuDataAdapter = new OleDbDataAdapter();
MeuDataAdapter.SelectCommand = MeuComando;
5. Declaramos um objeto ds do tipo DataSet. O objeto DataSet ser o Conteiner para as tabelas Funcionrios e
Transportadores. Recapitulando o que estudamos anteriormente, o objeto DataSet pode conter uma ou mais
tabelas, as quais esto contidas na coleo Tables do objeto.
DataSet ds = new DataSet();
6. Chegamos ao ponto principal do nosso exemplo. Utilizamos a seguinte tcnica: definimos a propriedade
CommandText do objeto MeuComando. Esta propriedade contm a string SQL que acessa dados de uma
determinada tabela:
MeuComando.CommandText=Select CdigoDoFuncionrio,Nome,Sobrenome,Cargo
From Funcionrios;
Em seguida chamamos o mtodo Fill do objeto DataAdapter. Ao chamarmos este mtodo, o comando definido na
propriedade CommandText executado e os dados retornados so passados para o DataSet definido no primeiro
parmetro. O segundo parmetro o nome do conjunto de dados no DataSet. No nosso exemplo utilizamos o
mesmo nome da tabela, no banco de dados NorthWind, porm isso no obrigatrio:
MeuDataAdapter.Fill(ds,Funcionrios);
Repetimos os mesmos passos para retornar dados da tabela Transportadoras e coloc-los no DataSet ds:
MeuComando.CommandText = Select * From Transportadoras;
MeuDataAdapter.Fill(ds,Transportadoras);
Aps a execuo destes comandos, a coleo Tables, do DataSet ds, contm duas tabelas com dados retornados a
partir do Banco de dados NorthWind.mdb.
7. O prximo passo exibir os dados do objeto DataSet na pgina ASP.NET. Isto feito utilizando um objeto do tipo
DataView para cada tabela a ser exibida. Ao criarmos o objeto DataView, j passamos como parmetro a tabela
associada ao objeto. Em seguida definimos a propriedade DataSource do controle DataGrid como sendo igual ao
objeto DataView recm-criado. O passo final chamar o mtodo DataBind do controle DataGrid:
DataView Funcionrios = new DataView(ds.Tables[0]);
GradeFuncionrios.DataSource = Funcionrios ;
GradeFuncionrios.DataBind();
Para cada tabela do DataSet criamos um objeto DataView. Para o DataView Funcionrios, passamos como parmetro:
ds.Tables[0], ou seja, a primeira tabela, da coleo de tabelas do DataSet ds. Para o DataView Transportadoras, passamos
como parmetro ds.Tables[1], ou seja, a segunda tabela, da coleo de tabelas do DataSet ds. Depois s ligar cada
DataView com o respectivo DataGrid.
www.juliobattisti.com.br 412
CAPTULO 10: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 1
8. Na seo de apresentao, utilizamos algumas propriedades do DataGrid para definir a sua aparncia. Por exemplo:
HeaderStyle-BackColor=#aaaadd: Define a cor de segundo plano da primeira linha do DataGrid, a linha
que contm os ttulos das colunas.
HeaderStyle-Font-Bold=True: Define que o texto da primeira linha deve ser exibido com fonte em negrito.
Este exemplo demonstra, mais uma vez, o poder e flexibilidade dos novos objetos para acesso a dados oferecidos pelo
ADO.NET e tambm demonstra o poder dos Web Server Controls, mais especificamente do controle DataGrid.
Concluso
Neste captulo aprendemos a conectar pginas ASP.NET com bancos de dados. Utilizamos classes, basicamente, dos
seguintes namespaces:
System.Data
System.Data.OleDb
System.Data.SqlClient
SqlConnection/OleDbConnection
SqlCommand/OleDbCommand
SqlDataAdapter/OleDbDataAdapter
DataSet
DataView
Nos prximos captulos estudaremos mais sobre estas classes e sobre controles que podem ser conectados com dados.
413 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Introduo CAPTULO
No Captulo 10 aprendemos a conectar pginas ASP.NET com bancos de dados.
Trabalhamos com classes dos namespaces System.Data, System.Data.SqlClient
11
e System.Data.OleDb. Para exibir os dados em um pgina ASP.NET utilizamos,
basicamente, o controle DataGrid.
Existem diversos Web Server Controls que podem exibir dados a partir de um
objeto DataView ou DataReader (ser visto neste captulo). Iniciaremos este
captulo estudando os seguintes Web Server Controls:
CheckBoxList
Acessando Bancos de Dados
DropDownList
com ASP.NET Parte 2
RadioButtonList
Filtrar dados.
Criar as colunas do DataGrid manualmente.
Veremos que com poucas linhas de cdigo somos capazes de realizar operaes
que, com o ASP 3.0, demandam uma boa quantidade de codificao. Uma das
grandes vantagens do ASP.NET a disponibilidade de um conjunto de controles
mais poderoso e flexvel. Para que possamos usufruir destas vantagens importante
que saibamos utilizar estes controles. Com o estudo feito neste captulo, mais o
que foi visto nos Captulos 7, 8, 9 e 10, o leitor ter um amplo entendimento dos
novos controles do ASP.NET. Porm o assunto bastante extenso; so centenas
de mtodos e propriedades. A melhor fonte de informaes para voc aprofundar
seus estudos a documentao do Framework .NET.
www.juliobattisti.com.br 414
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
controle que pode ser associado a uma fonte de dados. Os conceitos vistos nesta parte inicial so a base para que
possamos estudar os Data-bound controls.
415 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</HEAD>
<BODY>
<%
Set conn=Server.CreateObject(ADODB.Connection)
conn.Open
%>
www.juliobattisti.com.br 416
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
<%
Paises.MoveNext
Loop
%>
</SELECT>
<BR>
<BR>
<HR>
</FORM>
</BODY>
</HTML>
Digite o cdigo da Listagem 11.1 e salve o mesmo em um arquivo chamado chap11ex1.asp, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
importante que a extenso seja .asp e no .aspx, pois trata-se de uma pgina com cdigo ASP 3.0 e no ASP.NET.
417 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Alm da conexo, criamos um lao Do While para percorrer todos os registros do RecordSet e construir uma opo da
lista para cada registro. Com ASP 3.0 no temos muitas alternativas. Agora vamos demonstrar como a utilizao de
Data Binding torna as coisas bem mais fceis.
<html>
www.juliobattisti.com.br 418
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
MeuComando.Fill(ds);
419 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
// DropDownList MinhaLista.
MinhaLista.DataSource = source ;
MinhaLista.DataBind();
}
</script>
<body>
<form runat=server>
<asp:DropDownList
id=MinhaLista
runat=server
DataTextField=PasDeDestino
>
</asp:DropDownList>
<BR>
<BR>
</form>
</body>
</html>
Digite o cdigo da Listagem 11.2 e salve o mesmo em um arquivo chamado chap11ex2.aspx, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
www.juliobattisti.com.br 420
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Observe a simplicidade para criar a lista. Na seo de cdigo definimos a propriedade DataSource do controle
MinhaLista, que um controle do tipo DropDownList. Depois chamamos o mtodo DataBind deste controle:
MinhaLista.DataSource = source ;
MinhaLista.DataBind();
Na seo de apresentao basta criar o controle MinhaLista e definir a sua propriedade DataTextField como sendo
igual ao nome do campo a ser exibido na lista:
<asp:DropDownList
id=MinhaLista
runat=server
DataTextField=PasDeDestino
>
</asp:DropDownList>
Rpido, simples, intuitivo e sem a necessidade de criar um lao para percorrer todos os registros do DataView. Este
pequeno exemplo ilustra o quanto pode ser melhorada a produtividade do programador com a utilizao dos controles
avanados do ASP.NET.
Agora que j vimos um exemplo em ao, vamos estudar um pouco mais detalhadamente os conceitos de DataBinding,
para depois estudarmos os demais controles Data-bound controls.
421 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O exemplo do DropDownList, da Listagem 11.2, onde so exibidos diversos valores, conhecido como repeated-
value-binding. Quando a ligao feita com um nico valor, temos o exemplo de um single-value-binding. Vamos
analisar a sintaxe e alguns exemplos para single-value-binding.
Qualquer uma das situaes acima descritas deve retornar um nico valor, o qual ligado a uma propriedade do controle.
Vamos a um exemplo simples. Criaremos uma pgina ASP.NET com dois controles. Um do tipo TextBox e outro do
tipo Label. O Texto contido no controle Label ser definido pelo valor digitado no controle TextBox. O valor padro
inicial do controle TextBox : Valor Inicial. Vamos ao exemplo, depois s explicaes.
www.juliobattisti.com.br 422
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
<asp:TextBox
id=CaixaTexto
Text=Valor Inicial
runat=server
/>
<BR>
<HR>
<B>Rtulo: </B>
<asp:Label
id=RotuloTexto
Text=<%# CaixaTexto.Text %>
runat=server
/>
</form>
</body>
</html>
Digite o cdigo da Listagem 11.3 e salve o mesmo em um arquivo chamado chap11ex3.aspx, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Observe que o rtulo vem preenchido com o valor inicial da caixa de texto: Valor Inicial. Clique na caixa de texto e
digite: Novo Valor e pressione Enter. Observe que o rtulo alterado para refletir o valor digitado na caixa de texto,
conforme indicado na Figura 11.3.
A ligao do valor do rtulo, com a propriedade Text, da caixa de texto feita com o seguinte cdigo:
<asp:Label
id=RotuloTexto
Text=<%# CaixaTexto.Text %>
runat=server
/>
423 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Mais especificamente com a definio da propriedade Text, onde colocamos uma expresso de ligao que aponta
para a propriedade Text do controle CaixaTexto:
Podemos fazer esta ligao para qualquer propriedade, desde que o valor retornado seja compatvel com o tipo esperado
pela propriedade.
Tambm de fundamental importncia observar a chamada do mtodo DataBind do objeto Page, o qual feito no
evento Load da Pgina:
Sem esta chamada, a ligao no seria feita. O mtodo DataBind, da classe Page, faz a ligao para a pgina ASP.NET
e para todos os controles contidos na pgina. No nosso exemplo, o efeito prtico o mesmo que se tivssemos
chamado o mtodo DataBind, do controle RotuloTexto RotuloTexto.DataBind( ).
Ao invs da propriedade de um controle, poderamos fazer a ligao com uma propriedade da pgina. Por exemplo,
se quisermos que o controle RotuloTexto exiba o valor da propriedade EnableViewState da pgina, podemos fazer
a seguinte ligao:
<asp:Label
www.juliobattisti.com.br 424
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
id=RotuloTexto
Text=<%# Page.EnableViewState %>
runat=server
/>
CheckBoxList
DataList
DropDownList
RadioButtonList
Repeater
O controle DataGrid tambm recebe dados de um DataView, conforme j vimos nos exemplos do Captulo 10. No
Final deste captulo estudaremos mais algumas caractersticas do controle DataGrid.
O Controle CheckBoxList
Este controle permite que sejam exibidos diversos checkbox, com base em dados retornados por um objeto DataView,
um objeto DataReader, um objeto DataSet, um ArrayList ou uma coleo. Por exemplo, se fizermos o controle baseado
em um DataView que retorna o nome de 10 produtos, sero criados 10 CheckBox, uma com o nome de cada produto.
Para dar um melhor alinhamento aos checkbox que so construdos dinamicamente, o controle CheckBoxList utiliza
uma tabela. Podemos controlar a aparncia desta tabela, utilizando algumas propriedades do controle CheckBoxList.
<asp:CheckBoxList
id=identificao_no_cdigo
AutoPostBack=True|False
CellPadding=Distncia entre as bordas e o contedo das clulas.
DataSource=<% Fonte dos dados, normalmente definida no cdigo da pgina. %>
DataTextField=Campo ou coluna a partir do qual obtido o texto de cada
CheckBox
DataValueField=Campo ou coluna a partir do qual obtido o valor de cada
CheckBox
RepeatColumns=Define o nmero controles por linha
RepeatDirection=Vertical|Horizontal
RepeatLayout=Flow|Table
425 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
TextAlign=Right|Left
OnSelectedIndexChanged=Evento que executa quando um checkbox alterado
runat=server
>
<asp:ListItem
value=value
selected=True|False>
Items adicionados estaticamente.
</asp:ListItem>
</asp:CheckBoxList>
O controle CheckBoxList possui uma coleo chamada Items. Esta coleo contm os
elementos individuais do controle, os quais podem ser acessados atravs de cdigo de NOTA: Existem diversas
programao. Para determinar quais itens foram selecionados, podemos fazer um loop outras propriedades para
atravs dos elementos da coleo Items. este controle. Para
maiores informaes
O valor padro da propriedade RepeatLayot Table, o que faz com que os diversos consulte a classe
Check Box sejam arranjados na forma de uma tabela. CheckBoxList Class, do
namespace
Exemplo: Vamos utilizar um controle CheckBoxList que exibe todas as cidades do Brasil, System.Web.UI.WebControls.
para as quais j foram enviados Pedidos. Obteremos esta informao a partir da tabela
Pedidos, do banco de dados NorthWind.mdb. Utilizaremos o layout no formato de uma
tabela, para o controle CheckBoxList. Tambm utilizamos algumas propriedades herdadas
da classe CheckBoxList Class.
<html>
www.juliobattisti.com.br 426
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
MeuComando.Fill(ds);
MinhaLista.DataSource = source ;
427 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MinhaLista.DataBind();
MeusCheckBox.DataSource = source;
MeusCheckBox.DataBind();
</script>
<body>
<form runat=server>
<asp:DropDownList
id=MinhaLista
runat=server
DataTextField=CidadeDeDestino
>
</asp:DropDownList>
<BR>
<BR>
<BR>
<BR>
<BR>
<asp:CheckBoxList
id=MeusCheckBox
CellPadding=2"
DataTextField=CidadeDeDestino
DataValueField=CidadeDeDestino
www.juliobattisti.com.br 428
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
RepeatColumns=2"
RepeatDirection=Vertical
RepeatLayout=Table
TextAlign=Right
BackColor=#c0c0c0"
BorderWidth=2"
Font-Bold=True
BorderColor=Blue
runat=server
>
</asp:CheckBoxList>
</form>
</body>
</html>
Digite o cdigo da Listagem 11.4 e salve o mesmo em um arquivo chamado chap11ex4.aspx, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
429 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Voc obtm uma lista com o nome das cidades do Brasil para as quais existem pedidos e um grupo de controles do tipo
CheckBox, com um controle para cada cidade, conforme indicado na Figura 11.4.
Para retornar apenas o nome das cidades do Brasil, para as quais houve pedidos, tivemos que lanar mo de
um comando SQL um pouco sofisticado:
OleDbDataAdapter MeuComando = new OleDbDataAdapter(SELECT CidadeDeDestino
+ FROM Pedidos Group By CidadeDeDestino,PasDeDestino HAVING
PasDeDestino=Brasil
+ Order By CidadeDeDestino, MinhaConexo);
Sem dvidas, o ASP.NET uma evoluo em relao ao ASP 3.0, mas o bom e velho SQL est sempre presente
e necessrio. Precisamos conhecer os comandos bsicos e avanados da linguagem SQL. Um detalhe importante
que existem pequenas diferenas em relao aos comandos SQL para o Microsoft Access e para o SQL Server. No
Anexo III veremos mais detalhes sobre a linguagem SQL e as diferenas entre o SQL para o Microsoft Access e
para o SQL Server.
Na seo de apresentao da pgina utilizamos um controle CheckBoxList, onde fizemos uso de diversas
propriedades deste controle.
DataTextField=CidadeDeDestino: Define o nome do campo do DataView, que fornecer o texto para
cada CheckBox.
DataValueField=CidadeDeDestino: Define o nome do campo do DataView, que fornecer o valor
relacionado com cada CheckBox, quando este for selecionado.
RepeatColumns=2": Estamos utilizando um Layout de Tabela (RepeatLayout=Table). Esta opo de-
fine o nmero de colunas.
Em seguida definimos negrito para a fonte (Font-Bold=True), definimos a cor de segundo plano das clulas como
cinza (BackColor=#c0c0c0"), o tamanho da borda em 2 pixels (BorderWidth=2") e a cor da borda azul
(BorderColor=Blue).
Para determinar as opes que foram selecionados em um controle CheckBoxList, podemos percorrer a coleo Items
do controle e testar se determinado item foi selecionado. Por exemplo, se tivermos um controle chamado
OpcoesDeCartao e quisermos determinar se o primeiro elemento foi selecionado, podemos fazer o seguinte teste:
www.juliobattisti.com.br 430
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
if (OpcoesDeCartao.Items[0].Selected)
{
Comando 1
Comando 2
...
Comando n
}
Exemplo: Vamos criar um exemplo, onde temos um controle CheckBoxList, onde as opes foram criadas de uma
maneira esttica. Cada vez que o usurio clica em uma opo disparado o evento OnSelectedIndexChanged. Criaremos
cdigo para este evento, para atualizar o controle que exibe as opes selecionadas.
</head>
<body>
{
Mensagem.Text=<B>Selected Item(s):</B> + <br> + <br>;
if (MinhasOpcoes.Items[i].Selected)
Mensagem.Text=Mensagem.Text + MinhasOpcoes.Items[i].Text + <br>;
}
}
</script>
431 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<form runat=server>
<asp:CheckBoxList
id=MinhasOpcoes
runat=server
AutoPostBack=True
CellPadding=5"
CellSpacing=5"
RepeatColumns=2"
RepeatDirection=Vertical
RepeatLayout=Flow
TextAlign=Right
OnSelectedIndexChanged=Verifica_Selecionados>
<asp:ListItem>Item 1</asp:ListItem>
<asp:ListItem>Item 2</asp:ListItem>
<asp:ListItem>Item 3</asp:ListItem>
<asp:ListItem>Item 4</asp:ListItem>
<asp:ListItem>Item 5</asp:ListItem>
<asp:ListItem>Item 6</asp:ListItem>
</asp:CheckBoxList>
<br><br>
<asp:label
id=Mensagem
runat=server
/>
</form>
</body>
</html>
Digite o cdigo da Listagem 11.5 e salve o mesmo em um arquivo chamado chap11ex5.aspx, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
www.juliobattisti.com.br 432
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Clique no Item 1 e observe que, automaticamente o Item selecionado informado no controle Label. Selecione o Item
5. Novamente o Item selecionado informado. Marque o Item 4, mesma coisa. Agora desmarque o Item 4, o Label
atualizado, conforme indicado na Figura 11.5.
Na definio do controle, utilizamos o evento OnSelectedIndexChanged. Este evento disparado toda vez que
clicamos em uma das opes do controle CheckBoxList. Em resposta a este evento, criamos o procedimento
Verifica_Selecionados, na seo de cdigo da pgina.
O procedimento Verifica_Selecionados define a propriedade Text do label Mensagem, para exibir quais opes
esto atualmente selecionadas. Utilizamos um lao For que varia de 0 at o nmero de opes do controle.
Para obter o nmero de opes do controle, utilizamos a propriedade Count da coleo Items:
MinhasOpcoes.Items.Count
if (MinhasOpcoes.Items[i].Selected)
concatenamos o valor desta opo propriedade Text do label Mensagem, mais uma tag <BR> para uma quebra de
linha. A tag <BR> faz com que cada opo selecionada seja exibida em uma linha diferente.
No final do lao for, o Label Mensagem exibe as opes selecionadas, uma em cada linha. Este exatamente o
resultado desejado.
433 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O Controle DropDownList
Utilizamos este controle nos exemplos Chap11ex2.aspx e Chap11ex4.aspx. O controle DropDownList utilizado
para a criao de uma lista de opes. A lista pode ser definida de uma maneira esttica, utilizando uma srie de
controles ListItem ou pode ser associada a uma fonte de dados (Data Binding). Ao associarmos o controle DropDownList
a uma fonte de dados, as opes da lista sero criadas, automaticamente, a partir dos dados retornados por um objeto
DataView ou DataReader.
</asp:DropDownList>
Propriedade Descrio
BackColor Utilizada para definir ou retornar a cor de segundo plano do controle.
BorderColor Utilizada para definir ou retornar a cor de borda do controle.
BorderWidth Utilizada para definir ou retornar o tamanho, em pixels, das bordas do controle.
DataSource Define a fonte de dados a partir da qual so gerados os itens do controle.
DataTextField Define o campo da fonte de dados, que define o texto que ser exibido para cada item.
Font Define ou retorna informaes sobre as caractersticas da fonte do controle.
AccessKey Define um atalho de teclado para colocar o foco no controle.
www.juliobattisti.com.br 434
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
O principal mtodo deste controle DataBind( ), o qual faz a ligao do controle com uma fonte de dados. Poderamos
redefinir o controle DropDownList do exemplo Chap11ex2.aspx, da seguinte maneira:
<asp:DropDownList
id=MinhaLista
runat=server
DataTextField=PasDeDestino
BackColor=#c0c0c0"
ForeColor=Blue
Font-Bold=True
Font-Italic=True
>
Com estas alteraes a aparncia do controle fica conforme indicado na Figura 11.6.
O Controle RadioButtonList
Com este controle podemos criar um grupo de Radio Buttons, dinamicamente, a partir de uma fonte de dados. Por
exemplo, podemos gerar um grupo com um Radio Button para cada cidade da Alemanha, para a qual temos pedidos na
tabela Pedidos. Somente um RadioButton do controle pode estar selecionado ao mesmo tempo. O comportamento o
mesmo do controle RadioButton, com a diferena de que o controle RadioButtonList suporta Data Binding para a
gerao dinmica dos seus itens, a partir de uma fonte de dados.
435 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:RadioButtonList
id=identificao_no_cdigo
AutoPostBack=True|False
CellPadding=Distncia entre as bordas e o contedo das clulas.
DataTextField=Campo a partir do qual obtido o texto de cada RadioButton
DataValueField=Campo a partir do qual obtido o valor de cada RadioButton
RepeatColumns=Define o nmero controles por linha
RepeatDirection=Vertical|Horizontal
RepeatLayout=Flow|Table
TextAlign=Right|Left
OnSelectedIndexChanged=Evento que executa quando clicamos em um RadioButton
runat=server>
<asp:ListItem
Text=Texto do item.
Value=Valor do item.
Selected=True|False
/>
</asp:RadioButtonList>
O controle CheckBoxList possui uma coleo chamada Items. Esta coleo contm os
elementos individuais do controle, os quais podem ser acessados atravs de cdigo de NOTA: Existem diversas
programao. Para determinar quais items foram selecionados, podemos fazer um loop outras propriedades para
atravs dos elementos da coleo Items. este controle. Para
maiores informaes
O valor padro da propriedade RepeatLayot Table, o que faz com que os diversos consulte a classe
Check Box sejam arranjados na forma de uma tabela. Utilizamos a propriedade RadioButtonList Class, do
RepeatColumns para definir o nmero de controles por linha da tabela. namespace
System.Web.UI.WebControls.
Exemplo: Vamos utilizar um controle RadioButtonList que exibe todas as cidades da
Alemanha, para as quais j foram enviados Pedidos. Obteremos esta informao a partir
da tabela Pedidos, do banco de dados NorthWind.mdb. Utilizaremos o layout no formato de uma tabela com trs colunas,
para o controle RadioButtonList. Tambm utilizamos algumas propriedades herdadas da classe RadioButtonList Class.
www.juliobattisti.com.br 436
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
<html>
MeuComando.Fill(ds);
437 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MeusBotoes.DataSource = source;
MeusBotoes.DataBind();
</script>
<body>
<form runat=server>
<HR>
<asp:RadioButtonList
id=MeusBotoes
CellPadding=2"
DataTextField=CidadeDeDestino
DataValueField=CidadeDeDestino
RepeatColumns=3"
RepeatDirection=Vertical
RepeatLayout=Table
TextAlign=Right
BackColor=#c0c000"
BorderWidth=2"
Font-Bold=True
BorderColor=Blue
runat=server
>
</asp:RadioButtonList>
www.juliobattisti.com.br 438
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
<HR>
</form>
</body>
</html>
Digite o cdigo da Listagem 11.6 e salve o mesmo em um arquivo chamado chap11ex6.aspx, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Observe que utilizamos algumas propriedades para definir os aspectos visuais do controle:
RepeatColumns=3: Define que os controles sero exibidos em uma tabela com trs colunas, ou seja, trs
controles por linha.
RepeatLayout=Table: Os controles sero organizados no formato de uma tabela.
TextAlign=Right: Alinhamento de texto direita.
BackColor=#c0c000": Cor de segundo plano da tabela, na qual so colocados os controles.
BorderWidth=2": Tamanho da borda externa em pixels.
Font-Bold=True: Exibe a fonte em negrito.
BorderColor=Blue: Define a cor da borda externa.
439 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Ordenar dados.
Filtrar dados.
Nos exemplos que iremos apresentar, vamos utilizar, como fonte de dados para o controle DataGrid, um objeto DataView.
Desta maneira poderemos utilizar as facilidades de ordenao e filtragem do objeto DataView, para definir quais
dados e de que maneira estes dados sero exibidos no DataGrid.
Vamos construir um exemplo onde so exibidos todos os pedidos para o Brasil, a partir da tabela Pedidos do Banco de
dados NorthWind.mdb. Definiremos a propriedade AllowSorting do controle DataGrid para True. O passo final
criar o cdigo que executa quando o usurio clica no ttulo de uma das colunas. Por exemplo, se o usurio clicar na
coluna CidadeDeDestino, devemos ordenar os dados pela CidadeDeDestino.
Na Listagem 11.7 temos o cdigo para o exemplo proposto. NOTA: Para a criao
deste exemplo,
Listagem 11.7 Ordenao com o controle DataGrid.
utilizaremos algumas
<%@ Import Namespace=System.Data %> tcnicas avanadas. Todas
<%@ Import Namespace=System.Data.OleDb %> as tcnicas utilizadas
sero descritas aps o
<html> cdigo do exemplo.
String OrdenaPor;
www.juliobattisti.com.br 440
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
if (Page.IsPostBack)
{
// No faz nada.
}
else
// Define, por padro, a ordenao por NmeroDoPedido.
{
OrdenaPor = NmeroDoPedido;
}
BuscaDados();
void BuscaDados()
{
441 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MeuComando.Fill(ds);
source.Sort=OrdenaPor;
MinhaGrade.DataSource = source;
MinhaGrade.DataBind();
www.juliobattisti.com.br 442
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
OrdenaPor = e.SortExpression.ToString();
BuscaDados();
</script>
<body>
<form runat=server>
<ASP:DataGrid
id=MinhaGrade runat=server
Width=700"
BackColor=#ccccff
BorderColor=black
ShowFooter=false
443 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
AllowSorting=True
OnSortCommand=OrdenaDados
/>
</form>
</body>
</html>
Digite o cdigo da Listagem 11.7 e salve o mesmo em um arquivo chamado chap11ex7aspx, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Voc obtm uma pgina com todos os pedidos para o Brasil. Observe que o ttulo das colunas um link. Clique no
ttulo da coluna CidadeDeDestino. Observe que os dados so classificados, em ordem Crescente, pela coluna
CidadeDeDestino, conforme indicado na Figura 11.8.
Agora d um clique no cabealho da Coluna Frete e observe que os dados so classificados, em ordem crescente do
valor do frete.
A primeira grande diferena que voc deve ter notado em relao aos exemplos anteriores a utilizao de
diversas rotinas:
1. Page_Load
2. Busca_Dados
3. OrdenaDados
Uma pgina ASP.NET uma instncia da classe Page. Ns vimos nos Captulos 3, 4 e 5 que um Classe em C# pode ser
composta de diversos procedimentos. Neste exemplo estamos criando trs procedimentos. No existe a definio
explcita da classe, atravs da palavra Class. Esta a nica diferena em relao aos exemplos dos Captulos 3, 4 e 5.
Tambm criamos uma varivel do tipo String chamada OrdenaPor. Como esta varivel foi declarada fora de qualquer
procedimento, a mesma pode ser acessada em qualquer local da seo de cdigo da pgina, ou seja, a varivel OrdenaPor
tem escopo de pgina:
String OrdenaPor;
www.juliobattisti.com.br 444
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Vamos entender o procedimento Page_Load: Este evento, conforme j descrito anteriormente, executado
toda vez que a pgina for carregada. Quando a pgina for carregada pela primeira vez, a propriedade
Page.IsPostBack igual a False e, neste caso, a varivel OrdenaPor definida como sendo igual a
NmeroDoPedido.
Fora da estrutura if/else, chamado o procedimento BuscaDados( ), ou seja, este procedimento ser chamado sempre
que a pgina for carregada, independente de ser um PostBack ou no.
Vamos entender o procedimento BuscaDados( ): Grande parte do cdigo deste procedimento j de nosso
conhecimento. So comandos para conectar com o banco de dados NorthWind.mdb, executar um comando SQL e
retornar os dados em um objeto DataSet, a partir do qual criamos um objeto DataView. O nico detalhe adicional
que temos neste procedimento a definio da propriedade Sort, do objeto source, que um objeto do tipo DataView:
source.Sort=OrdenaPor;
445 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Neste momento o objeto DataView ordenado pela coluna, cujo nome est contido na String OrdenaPor.
retorna CidadeDeDestino, uma vez que o usurio clicou no link da coluna CidadeDeDestino. Com isso conseguimos
detectar qual o link clicado e, conseqentemente, por qual campo devemos ordenar. Uma vez definido o valor da
String OrdenaPor, chamamos o mtodo BuscaDados( ), o qual retornar os dados e ir orden-los com base no
valor definido na String OrdenaPor.
Em resumo, o procedimento OrdenaDados faz o seguinte: define o valor da String OrdenaPor e chama o procedimento
BuscaDados.
PasDeDestino = Brasil
A expresso a mesma que utilizaramos em um clusula WHERE da linguagem SQL. Podemos utilizar todos os
operadores, funes e critrios vlidos como critrios de filtragem.
www.juliobattisti.com.br 446
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Observe que estamos retornando dados de duas tabelas diferentes: Pedidos e Clientes. Neste caso teremos que utilizar
uma clusula JOIN, no comando SQL. As tabelas Pedidos e Clientes so relacionadas atravs do campo
CdigoDoCliente. Este um relacionamento do tipo Um (tabela Clientes) para vrios (tabela Pedidos), o que significa
que cada Cliente cadastrado uma nica vez, porm pode fazer vrios pedidos. Para maiores informaes sobre
relacionamentos, consulte o Anexo II. Para maiores informaes sobre o SQL consulte o Anexo III.
Alm do controle DataGrid, teremos um campo do tipo TextBox, onde o usurio pode digitar o nome ou parte do nome
de um Cliente. Ao clicar no boto Pesquisar, o DataGrid passar a exibir somente os pedidos para os clientes cujo
nome, atende ao critrio digitado.
Na Listagem 11.8 temos o cdigo para o exemplo proposto. NOTA: Neste exemplo
vamos manter o cdigo que
Listagem 11.8 Filtragem com o controle DataGrid. faz a classificao dos
<%@ Import Namespace=System.Data %> dados quando o usurio
<%@ Import Namespace=System.Data.OleDb %> clica no ttulo de uma das
colunas do DataGrid. Desta
<html>
forma poderemos filtrar e
classificar os dados.
447 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
// faremos a ordenao.
// Esta varivel pode ser acessada em qualquer procedimento da pgina.
String OrdenaPor;
String FiltraDados;
if (Page.IsPostBack)
{
// Define o valor da String FiltraDados que,
// na prtica, a expresso de filtragem dos dados,
// que ser atribuda propriedade RowFilter.
BuscaDados();
www.juliobattisti.com.br 448
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
void BuscaDados()
{
449 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MeuComando.Fill(ds);
source.Sort=OrdenaPor;
source.RowFilter=FiltraDados;
MinhaGrade.DataSource = source;
MinhaGrade.DataBind();
www.juliobattisti.com.br 450
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
OrdenaPor = e.SortExpression.ToString();
BuscaDados();
</script>
<body>
<form runat=server>
<Table>
<TR>
<TD> Critrio > </TD>
<TD>
<asp:TextBox
runat=server
id=DigitaCriterio
Text=
Font_Face=Arial
Font_Size=3"
Font-Bold=True
BackColor=lightblue
451 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Height=20"
/>
</TD>
<TD>
<asp:Button
id=Pesquisar
Text=Pesquisar
runat=server
/>
</TD>
</TR>
</Table>
<ASP:DataGrid
id=MinhaGrade runat=server
Width=700"
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
AllowSorting=True
OnSortCommand=OrdenaDados
/>
</form>
</body>
</html>
Digite o cdigo da Listagem 11.8 e salve o mesmo em um arquivo chamado chap11ex8aspx, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
www.juliobattisti.com.br 452
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Ser exibida uma pgina com todos os pedidos. Observe que o ttulo das colunas um link. Clique no ttulo da coluna
CidadeDeDestino. Observe que os dados so classificados, em ordem Crescente, pela coluna CidadeDeDestino. Clique no
ttulo da coluna NmeroDoPedido para classificar a listagem pelo NmeroDoPedido, conforme indicado na Figura 11.9.
Agora vamos definir um critrio de Filtragem. No campo Critrio digite a palavra Moreno e d um clique no boto
Pesquisar. Sero exibidos apenas os pedidos para os clientes que contm a palavra Moreno em qualquer parte do
campo NomeDaEmpresa, conforme indicado na Figura 11.10. Para voltar a exibir todos os registros, apague o contedo
do campo Critrio e d um clique no boto Pesquisar.
453 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Criamos duas variveis do tipo String; uma para conter o nome do campo pelo qual ordenamos a listagem OrdenaPor
e outra para conter a expresso referente ao critrio de Filtragem FiltraDados:
String OrdenaPor;
String FiltraDados;
O controle DataGrid, na seo de apresentao, idntico ao controle utilizado no exemplo da Listagem 11.7.
Ao montar o comando SQL, utilizamos quatro variveis do tipo String, depois concatenamos as quatro variveis
em uma varivel chamada ComandoSQL. Esta varivel foi passada como parmetro para a criao do objeto
DataAdapter:
String ComandoSQL;
String aux1SQL;
String aux2SQL;
String aux3SQL;
String aux4SQL;
aux1SQL= SELECT Pedidos.NmeroDoPedido, Clientes.NomeDaEmpresa,
Pedidos.CidadeDeDestino;
aux2SQL= , Pedidos.PasDeDestino FROM Clientes;
aux3SQL= INNER JOIN Pedidos ON Clientes.CdigoDoCliente =
Pedidos.CdigoDoCliente;
www.juliobattisti.com.br 454
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Observe que fizemos uso da clusula JOIN, pois estamos retornando dados de duas tabelas: Pedidos e Clientes. O
resultado final para a string ComandoSQL o seguinte:
Observe que estamos utilizando a nomenclatura NomeDoCampo.NomeDaTabela. Esta nomenclatura necessria quando
estamos acessando dados de duas ou mais tabelas. Com esta nomenclatura indicamos de qual tabela determinado campo
deve ser acessado. Esta nomenclatura particularmente til, para situaes em que o mesmo nome de campo existe em
duas ou mais tabelas. Por exemplo, o campo CdigoDoCliente existe tanto na tabela Pedidos quanto na tabela Clientes.
Vamos entender o procedimento BuscaDados( ): Grande parte do cdigo deste procedimento j de nosso
conhecimento. So comandos para conectar com o banco de dados NorthWind.mdb, executar um comando
SQL e retornar os dados em um objeto DataSet, a partir do qual criamos um objeto DataView. O nico detalhe
adicional que temos neste procedimento a definio da propriedade RowFilter, do objeto source, que um
objeto do tipo DataView:
source.RowFilter=FiltraDados;
Neste momento o objeto DataView filtrado de acordo com a expresso de filtragem contida na String FiltraDados.
455 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Podemos ter controle sobre a maneira como as colunas de um DataGrid so geradas. Por exemplo, podemos definir
diferentes aspectos visuais para cada coluna, diferentes tipos, etc. Cada coluna de um DataGrid um controle de um
dos seguintes tipos:
BoundColumn
ButtonColumn
EditCommandColumn
HyperLinkColumn
TemplateColumn
Por padro a propriedade AutoGenerateColumns definida em True, o que faz com que as colunas do DataGrid sejam
geradas, automaticamente, e sejam do tipo BoundColumn. Para cada campo da fonte de dados, quer seja um objeto
DataView ou um objeto DataReader, ser gerada uma coluna do tipo BoundColumn, na ordem em que os campos
aparecem na fonte de dados.
A primeira coluna gerada exibir os dados do campo NmeroDoPedido; a segunda exibir os dados do campo
CidadeDeDestino e assim por diante.
Para controlar, manualmente, quais colunas faro parte do DataGrid e qual o formato
das colunas, devemos definir a propriedade AutoGenerateColumns=False. Uma vez NOTA: A ordem em que
definida esta propriedade como False, podemos adicionar as colunas desejadas. Para os campos aparecem em
controlar a aparncia de cada coluna, definimos uma srie de propriedades para cada uma fonte de dados
coluna. definida pelo comando
SQL. Considere o seguinte
Alm de definir cada coluna manualmente, tambm podemos definir as caractersticas comando: Select
da primeira linha do DataGrid, normalmente a linha de ttulos; dos itens de cada linha; NmeroDoPedido,
dos itens de cada linha quando em modo de edio e da ltima linha do DataGrid. Estes CidadeDeDestino,
elementos so definidos dentro de uma coluna do tipo TemplateColumn. PasDeDestino From
Pedidos.
A seguir temos a sintaxe completa para o controle DataGrid, quando definimos as colunas
do mesmo manualmente:
<asp:DataGrid
id=identificao_no_cdigo
runat=server
www.juliobattisti.com.br 456
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
<AlternatingItemStyle property=value/>
<EditItemStyle property=value/>
<FooterStyle property=value/>
<HeaderStyle property=value/>
<ItemStyle property=value/>
<PagerStyle property=value/>
<SelectedItemStyle property=value/>
<Columns>
<asp:BoundColumn
DataField=DataSourceField
DataFormatString=FormatString
FooterText=FooterText
HeaderImageUrl=url
HeaderText=HeaderText
ReadOnly=True|False
SortField=DataSourceFieldToSortBy
Visible=True|False
FooterStyle-property=value
HeaderStyle-property=value
ItemStyle-property=value/>
<asp:ButtonColumn
ButtonType=LinkButton|PushButton
Command=BubbleText
DataTextField=DataSourceField
DataTextFormatString=FormatString
FooterText=FooterText
HeaderImageUrl=url
HeaderText=HeaderText
ReadOnly=True|False
SortField=DataSourceFieldToSortBy
457 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Text=ButtonCaption
Visible=True|False/>
<asp:EditCommandColumn
ButtonType=LinkButton|PushButton
CancelText=CancelButtonCaption
EditText=EditButtonCaption
FooterText=FooterText
HeaderImageUrl=url
HeaderText=HeaderText
ReadOnly=True|False
SortField=DataSourceFieldToSortBy
UpdateText=UpdateButtonCaption
Visible=True|False/>
<asp:HyperLinkColumn
DataNavigateUrlField=DataSourceField
DataNavigateUrlFormatString=FormatExpression
DataTextField=DataSourceField
DataTextFormatString=FormatExpression
FooterText=FooterText
HeaderImageUrl=url
HeaderText=HeaderText
NavigateUrl=url
ReadOnly=True|False
SortField=DataSourceFieldToSortBy
Target=window
Text=HyperLinkText
Visible=True|False/>
<asp:TemplateColumn
FooterText=FooterText
HeaderImageUrl=url
HeaderText=HeaderText
ReadOnly=True|False
SortField=DataSourceFieldToSortBy
Visible=True|False>
www.juliobattisti.com.br 458
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
<HeaderTemplate>
Header template HTML
</HeaderTemplate >
<ItemTemplate>
ItemTemplate HTML
</ItemTemplate>
<EditItemTemplate>
EditItem template HTML
</EditItemTemplate>
<FooterTemplate>
Footer template HTML
</FooterTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
Uma vez definida a propriedade AutoGenerateColumns para False, podemos definir manualmente as colunas. Isto
feito entre as tags <Columns> </Columns>. Conforme citado anteriormente, temos diferentes tipos de colunas, tipos
estes que esto descritos na Tabela 11.3.
Tipo Descrio
BoundColumn uma coluna associada com um campo da fonte de dados (um objeto DataView ou
DataReader). Podemos controlar os aspectos visuais utilizando as diversas propriedades
da coluna. o tipo de coluna padro, isto , se optarmos pela gerao automtica de
colunas (AutoGenerateColumns=True), ser gerada uma coluna do tipo BoundColumn
para cada campo da fonte de dados.
ButtonColumn Cria uma coluna com botes de comando. Podemos definir o texto dos botes utilizando a
propriedade Text ou podemos fazer o DataBind da coluna com uma fonte de dados, de tal
maneira que o rtulo do boto de comando seja diferente para cada linha do DataGrid.
HyperLinkColumn Cria uma coluna com links que so associados com um campo da fonte de dados. Por
exemplo, uma coluna que exibe o nome dos funcionrios pode ter o nome como um link.
Ao clicarmos no Link ser aberta uma pgina com todas as informaes do funcionrio.
459 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Tipo Descrio
EditCommandColumn Cria uma coluna onde podemos definir os comandos para Edio (Update), incluso (Add)
ou excluso (Remove) de registros.
TemplateColumn Utilizada para definir o layout dos controles que compem o DataGrid, a partir de
modelos para determinados elementos do HTML. Veremos exemplos mais adiante.
As colunas de um DataGrid, adicionadas manualmente, fazem parte da coleo Columns. A ordem em que as colunas
so exibidas no DataGrid, da esquerda para a direita, definida pela ordem em que as colunas esto definidas na
coleo Columns. Podemos alterar esta ordem, utilizando programao.
void BuscaDados()
{
// Crio uma conexo com o banco de dados pubs localizado no servidor local.
// Vamos acessar a instncia SERVIDOR\NETSDK.
www.juliobattisti.com.br 460
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
</script>
<body>
<form runat=server>
<b>Product List</b>
<asp:DataGrid
id=MinhaGrade
BorderColor=black
BorderWidth=1"
CellPadding=3"
AutoGenerateColumns=false
runat=server>
<HeaderStyle
461 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
BackColor=#00aaaa
Font-Bold=True
Font-Name=Courier New
ForeColor=White
>
</HeaderStyle>
<Columns>
<asp:BoundColumn
HeaderText=Cdigo
DataField=au_id
ItemStyle-BackColor=#c0c0c0"
>
</asp:BoundColumn>
<asp:BoundColumn
HeaderText=Nome
DataField=au_fname
ItemStyle-Font-Italic=True
ItemStyle-Font-Name=Courier New
>
</asp:BoundColumn>
<asp:BoundColumn
HeaderText=Telefone
DataField=phone
ItemStyle-BackColor=#c0ffff
ItemStyle-Font-Bold=True
>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
www.juliobattisti.com.br 462
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Digite o cdigo da Listagem 11.9 e salve o mesmo em um arquivo chamado chap11ex9aspx, na pasta chap11, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Ser exibida uma listagem com o cdigo, nome e telefone dos autores, da tabela authors, do Banco de dados pubs,
conforme indicado na Figura 11.11.
Em primeiro lugar observe que aplicamos diversas formataes diferentes s diversas partes do controle
DataGrid.
1. Para a primeira linha dos ttulos das colunas, aplicamos as seguintes formataes: Negrito, fonte Courier New e
cor Branca.
2. Para a primeira coluna aplicamos cor cinza para o segundo plano.
3. Para a segunda coluna aplicamos uma fonte Courier New e Itlico.
4. Para a terceira coluna aplicamos negrito e uma tonalidade de verde para a cor de segundo plano.
463 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
A definio das colunas feita dentro das tags <Columns> </Columns>. Neste exemplo utilizamos apenas colunas do
tipo BoundColumn.
A propriedade DataField define com qual campo do objeto DataView a coluna ligada. Como definimos esta
propriedade com au_id, esta coluna ir exibir o cdigo do autor. Esta propriedade que faz a ligao da coluna com
um campo da fonte de dados.
A propriedade DataField liga a coluna com o campo au_fname da fonte de dados. Esta coluna exibe o primeiro nome
do autor.
A propriedade ItemStyle-Font-Name define o tipo de fonte a ser utilizado. Poderamos ter utilizado Arial, Times New
Roman, etc.
www.juliobattisti.com.br 464
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
<asp:BoundColumn
HeaderText=Telefone
DataField=phone
ItemStyle-BackColor=#c0ffff
ItemStyle-Font-Bold=True
>
</asp:BoundColumn>
Tambm inclumos um elemento HeaderStyle. Este elemento define a formatao para a linha de ttulos das
colunas. Definimos negrito (Font-Bold=True), fonte CourierNew (Font-Name=Courier New) e cor de
fonte branca (ForeColor=White).
Observe que as formataes para o elemento HeaderStyle so diferentes das formataes para o elemento BoundColumn.
Por exemplo, no elemento BoundColumn, utilizamos ItemStyle-Font-PropriedadeDaFonte, para definir uma caracterstica
da fonte. Por exemplo, utilizamos ItemStyle-Font-Bold=True, para definir Negrito. J no elemento HeaderStyle utilizamos
apenas Font-PropriedadeDaFonte. Por exemplo, utilizamos Font-Bold=True, para definir Negrito.
<HeaderStyle
BackColor=#00aaaa
Font-Bold=True
Font-Name=Courier New
ForeColor=White
>
</HeaderStyle>
465 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
como fazer com que a paginao funcione, ou seja, quando o usurio clica no link Prxima Pgina ou no nmero da
prxima pgina, faremos com que seja exibido o prximo conjunto de registros.
Ao tornarmos a propriedade AllowPaging igual a True, ser criada mais uma linha, no final do DataGrid. Nesta linha
podemos exibir um link para a prxima pgina e para a pgina anterior ou a numerao de pgina: 1 2 3 4 5 6 7 8 9 10
...; onde cada nmero um link para a pgina respectiva. Podemos personalizar o que exibido nesta linha que
chamaremos de Barra de Navegao. Por padro os links de navegao so alinhados esquerda, no DataGrid.
Cada vez que o usurio clica em um dos links da Barra de Navegao, disparado o evento PageIndexChanged. Ao
criarmos o DataGrid definimos a propriedade PageIndexChanged com o nome do procedimento que ser executado
em resposta ao evento. Neste procedimento colocaremos o cdigo para navegar para a pgina relacionada ao link
clicado pelo usurio.
Para definir as caractersticas da linha onde so exibidos os links de navegao, ns fazemos uso das propriedades
PagerStyle-Definio, do controle DataGrid. Por exemplo, para alinhar os links de navegao direita, ns definimos
a seguinte propriedade:
PagerStyle-HorizontalAlign=Right
Na Tabela 11.4 temos a definio das principais caractersticas da Barra de Navegao, que podem ser configuradas
com a propriedade PagerStyle.
www.juliobattisti.com.br 466
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Para definir o nmero de linhas por pgina, utilizamos a propriedade PageSize. Por exemplo, o seguinte comando
define que sejam exibidos quinze registros por pgina:
PageSize=15
Exemplo: Vamos criar um exemplo, onde retornamos o nome de todos os clientes da tabela Clientes, do Banco de
dados Northwind.mdb. Dividiremos os registros em pginas de dez registros. Utilizaremos o modo padro, onde
exibido um link Prxima Pgina ->> (com exceo da ltima pgina, quando este link estar desabilitado) e um link
<<- Pgina Anterior (com exceo da primeira pgina, quando este link estar desabilitado). Utilizaremos algumas
propriedades da Tabela 11.4 para personalizar a aparncia da Barra de Navegao.
<html>
void BuscaDados()
{
467 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MeuComando.Fill(ds);
www.juliobattisti.com.br 468
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
// DataGrid - MinhaGrade.
MinhaGrade.DataSource = source;
MinhaGrade.DataBind();
</script>
<body>
<form runat=server>
<HR>
<ASP:DataGrid
id=MinhaGrade
runat=server
CellPadding=3
CellSpacing=0"
Font-Name=CourierNew
Font-Size=10pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
AllowPaging=True
OnPageIndexChanged=TrocaPagina
PageSize=10"
PagerStyle-Position=TopAndBottom
PagerStyle-NextPageText=Prxima Pgina ->>
469 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
/>
<HR>
</form>
</body>
</html>
Digite o cdigo da Listagem 11.10 e salve o mesmo em um arquivo chamado chap11ex10aspx, na pasta chap11,
dentro da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro,
no Captulo 6.
Ser exibida uma listagem com os 10 primeiros clientes. Observe que temos links para a prxima pgina e para a
pgina anterior, no incio e no final do DataGrid, conforme indicado na Figura 11.12.
www.juliobattisti.com.br 470
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
Clique no link Prxima Pgina ->> e observe que so exibidos os prximos dez clientes. Tambm observe que o link
<<- Pgina Anterior foi habilitado, conforme indicado na Figura 11.13.
Na definio do DataGrid utilizamos uma srie de propriedades para a definio dos aspectos visuais da barra
de navegao. Estas propriedades esto descritas na Tabela 11.4. Uma propriedade interessante a propriedade
Mode, que por padro tem o valor NextPrev. Se alterarmos o seu valor para NumericPages, ao invs do link
Prximo e do link Anterior, teremos diversos links, um para cada pgina do DataGrid. Vamos alterar a definio
do DataGrid, para que a mesma fique da seguinte maneira:
<ASP:DataGrid
id=MinhaGrade
runat=server
CellPadding=3
CellSpacing=0"
Font-Name=CourierNew
Font-Size=10pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
471 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
AllowPaging=True
OnPageIndexChanged=TrocaPagina
PageSize=10"
PagerStyle-Position=TopAndBottom
PagerStyle-Mode=NumericPages
PagerStyle-Font-Bold=True
PagerStyle-Font-Size=12pt
PagerStyle-BackColor=#c0c0c0"
/>
Se fizermos estas alteraes e recarregarmos a pgina, obteremos o resultado indicado na Figura 11.14.
No evento Page_Load detectamos se no um PostBack (isto acontece quando a pgina est senda carregada
pela primeira vez); caso no seja um PostBack, definimos a pgina atual como sendo a primeira pgina e
executamos o procedimento BuscaDados:
MinhaGrade.CurrentPageIndex = 0;
BuscaDados();
A definio da pgina atual feita com o uso da propriedade CurrentPageIndex, do DataGrid. A primeira pgina a
pgina zero, a segunda a pgina um e assim por diante.
www.juliobattisti.com.br 472
CAPTULO 11: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 2
O evento OnPageIndexChanged disparado toda vez que o usurio clica em um dos links de navegao. O procedimento
TrocaPagina recebe um argumento do tipo DataGridPageChangedEventArgs. Chamamos este argumento de e. Este
argumento uma instncia da classe DataGridPageChangedEventArgs, do namespace System.Web.UI.WebControls.
Quando clicamos em um dos links de navegao, o ndice da pgina para a qual aponta o link pode ser acessado
atravs da NewPageIndex deste argumento. Atribumos o valor contido nesta propriedade para a propriedade
CurrentPageIndex do DataGrid. O efeito prtico carregar a pgina do DataGrid, cujo ndice o mesmo definido na
propriedade NewPageIndex.
Observe que, simplesmente, com a definio de uma propriedade e um procedimento de duas linhas,
implementamos paginao no ASP.NET, o que com ASP 3.0 demandaria uma boa quantidade de cdigo.
Concluso
Iniciamos o captulo apresentando o conceito de DataBinding e aprendendo a utilizar os seguintes Web Server Controls:
CheckBoxList
DropDownList
RadioButtonList
Em seguida comeamos a estudar mais alguns detalhes sobre o controle DataGrid. Aprendemos as seguintes operaes:
Filtrar dados.
Criar as colunas do DataGrid manualmente.
Fazer paginao.
No Captulo 12 continuaremos trabalhando com o acesso a Banco de dados. Aprenderemos a criar pginas ASP.NET
que permitem a edio, excluso e incluso de registros no Banco de dados. Aprenderemos a utilizar mais algumas
classes dos namespaces System.Data, System.Data.SqlClient e System.Data.OleDb.
Como no poderia deixar de ser, aprenderemos a realizar mais algumas operaes e a utilizar mais algumas opes do
controle DataGrid.
473 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Introduo CAPTULO
Nos captulos 10 e 11 aprendemos a acessar dados do Microsoft Access e do SQL
Server 2000. Utilizamos diversas classes do ADO.NET para fazer o acesso aos
12
dados. Comentamos que com ASP.NET temos um modelo desconectado, ou
seja, retornamos uma ou mais tabelas atravs de um objeto DataSet e encerramos
a conexo com o banco de dados.
Adicionar um registro.
Excluir um registro.
Alterar um registro.
www.juliobattisti.com.br 474
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Nos diversos exemplos deste captulo, utilizaremos os objetos do namespace System.Data.OleDb, para fazer conexo
com um banco de dados do Microsoft Access C:\Meus documentos\ NorthWind.mdb. Voc pode, facilmente, adaptar
os exemplos para utilizar um banco de dados do SQL Server ou do ORACLE.
Para utilizar um banco de dados do SQL Server, basta alterar a string de conexo, de tal maneira que, ao invs de
utilizar o banco de dados NorthWind.mdb, voc passe a utilizar o banco de dados NorthWind que instalado com o
SQL Server 2000. Porm, para obter um melhor desempenho, sugiro que voc utilize, ao invs dos objetos do namespace
System.Data.OleDb, os objetos do namespace System.Data.SqlCliente, os quais so especficos e otimizados para o
acesso a bancos de dados do SQL Server.
Para conexo com o ORACLE voc apenas precisa alterar a string de conexo, para fazer a conexo com um servidor/
banco de dados onde o ORACLE esteja rodando.
importante salientar que o objeto DataSet no mantm nenhuma conexo com o banco de dados, ou seja, o mesmo
est desconectado do banco de dados. Para fazermos alteraes nos dados, e enviar estas alteraes de volta para o
banco de dados, utilizaremos a seguinte abordagem:
475 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Podemos criar um objeto DataTable completamente independente, isto , podemos definir atravs de cdigo as colunas
do objeto e adicionar registros. Outra maneira criar o objeto associado a uma tabela de um objeto DataSet.
Uma das maneiras de criar um objeto DataSet utilizando o prprio construtor da classe DataTable, conforme o
exemplo a seguir:
No exemplo a seguir, criamos um objeto DataTable, utilizando o mtodo Add, da coleo Tables, de um objeto DataSet:
O nmero mximo de linhas que um objeto DataTable pode conter : 16.777.216. O objeto DataTable tambm possui
uma coleo de objetos do tipo Constraint. Podemos utilizar esta coleo para implementar a Integridade dos dados.
Por exemplo, podemos utilizar uma Constraint para definir que a coluna Salrio no pode conter valores maiores do
que R$ 10.000,00 e que a coluna DiasDeFrias deve conter um valor entre 1 e 30.
IMPORTANTE: No momento da criao do objeto DataTable, o construtor da classe DataTable faz distino entre maisculas e
minsculas, para o nome da tabela. Por exemplo, os dois comandos a seguir criam dois objetos DataTable distintos:
DataTable MinhaTabela = new DataTable(Pedidos);
DataTable MinhaOutraTabela = new DataTable(pedidos);
Propriedade Descrio
CaseSensitive Propriedade boleana que indica se, para comparao de Strings, ser feita distino entre
maisculas e minsculas.
Columns Retorna a coleo de colunas da tabela.
Constraints Retorna a coleo de Constraints da tabela.
DataSet Retorna o objeto DataSet a partir do qual foi criado o objeto DataTable.
PrimaryKey Utilizada para retornar ou definir um Array de colunas que atuam como Chave Primria
da tabela.
Rows Retorna a coleo de linhas da tabela.
TableName Utilizada para retornar ou definir o nome associado ao objeto DataTable.
www.juliobattisti.com.br 476
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Mtodo Descrio
AcceptChanges Torna definitivas todas as alteraes que foram feitas, nos dados do DataTable, desde a
ltima chamada do mtodo AcceptChanges. Quando este mtodo chamado, qualquer
objeto DataRow (que representa uma linha da tabela), que ainda estiver em modo de
edio, ter sua edio encerrada. Todas as linhas adicionadas ou modificadas, desde a
ltima chamada do mtodo, tero o seu estado alterado para Unchanged. As linhas
marcadas como Deletadas sero removidas. importante que voc somente chame o
mtodo AcceptChanges, aps ter atualizado a fonte de dados, utilizando um dos mtodos
que aprenderemos nos prximos tpicos.
Clear Remove todas as linhas do DataTable.
Clone Faz uma cpia da estrutura do DataTable, inclusive os relacionamentos e constraints.
Copy Faz uma cpia da estrutura e tambm dos dados do DataTable.
LoadDataRow Localiza e atualiza uma linha especificada. Se no for encontrada nenhuma linha
coincidente, uma nova linha ser criada, com os valores passados para o mtodo.
Passamos um Array de valores, como parmetro para este mtodo.
NewRow Este mtodo utilizado para criar uma nova linha.
RejectChanges Desfaz todas as alteraes que foram feitas desde que a tabela foi inicializada ou desde a
ltima chamada do mtodo AcceptChanges.
Neste tpico aprenderemos a fazer as alteraes no conjunto de dados da tabela representada pelo objeto DataTable.
Porm ainda no faremos a sincronizao de dados com o banco de dados. Iremos comprovar este fato exibindo os
dados do DataTable, aps as alteraes e conferindo que as mesmas no foram enviadas para o banco de dados. Isso
comprova o modelo desconectado do ASP.NET. Nos prximos tpicos aprenderemos a fazer a sincronizao com o
banco de dados.
Exemplo 1: Vamos criar um exemplo onde acessamos os dados da tabela Clientes, do banco de dados NorthWind.mdb.
Retornaremos apenas os clientes para o Brasil. Utilizando cdigo, no evento Page_Load, adicionaremos dois novos
registros ao objeto DataTable. Exibiremos a tabela original em um DataGrid e a tabela com os novos registros em um
477 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
segundo DataGrid. Em seguida abriremos o banco de dados NorthWind.mdb e comprovaremos que as adies no
foram enviadas para o banco de dados.
<html>
String auxSQL1;
String auxSQL2;
String auxSQL3;
String ComandoSQL;
ComandoSQL= auxSQL1+auxSQL2+auxSQL3;
www.juliobattisti.com.br 478
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
MeuComando.Fill(ds,Clientes2");
// Conectamos um controle DataGrid com o DataSet criado anteriormente.
// MinhaGrade o id (nome) de um controle do tipo
// DataGrid que est na seo de apresentao da pgina.
MinhaGrade1.DataSource = source ;
MinhaGrade1.DataBind();
Linha[CdigoDoCliente]=XXYYK;
Linha[NomeDaEmpresa]=ABC Ltda.;
Linha[Endereo]=Rua das letras, 123";
Linha[Telefone]=222-2222";
Linha[Pas]=Brasil;
479 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Clientes2.Rows.Add(Linha);
Linha2[CdigoDoCliente]=WWMMK;
Linha2[NomeDaEmpresa]=LMN Ltda.;
Linha2[Endereo]=Rua dos nmeros, 123";
Linha2[Telefone]=555-5555";
Linha2[Pas]=Brasil;
Clientes2.Rows.Add(Linha2);
MinhaGrade2.DataSource = Clientes2.DefaultView;
MinhaGrade2.DataBind();
</script>
<body>
<% Exibe as informaes do DataGrid no corpo da pgina. %>
<ASP:DataGrid
id=MinhaGrade1"
runat=server
Width=700"
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
www.juliobattisti.com.br 480
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
<HR>
<ASP:DataGrid
id=MinhaGrade2"
runat=server
Width=700"
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
</body>
</html>
Digite o cdigo da Listagem 12.1 e salve o mesmo em um arquivo chamado chap12ex1.aspx, na pasta chap12, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
1. Conectamos com o Banco de dados NortWhind.mdb e retornamos somente os Clientes do Brasil. Em seguida
utilizamos um objeto DataView para ligar os dados retornados com o controle DataGrid1. Esta parte do cdigo j
foi utilizada em outros exemplos, dos captulos anteriores.
481 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
2. Em seguida criamos um objeto DataTable, chamado Clientes2, objeto este ligado primeira tabela do objeto
DataSet, que no nosso caso a tabela Clientes. Na prtica estamos criando uma cpia da tabela Clientes, na tabela
Clietnes2.
DataTable Clientes2 = ds.Tables[0];
3. Na seqncia declaro um objeto do tipo DataRow Linha, defino o valor de cada coluna e utilizo o mtodo Add,
da coleo Rows da tabela Clientes2, para adicionar a linha coleo de linhas da tabela.
// Declaro um objeto do tipo DataRow.
Linha[CdigoDoCliente]=XXYYK;
Linha[NomeDaEmpresa]=ABC Ltda.;
Linha[Endereo]=Rua das letras, 123";
www.juliobattisti.com.br 482
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Linha[Telefone]=222-2222";
Linha[Pas]=Brasil;
Clientes2.Rows.Add(Linha);
Linha2[CdigoDoCliente]=WWMMK;
Linha2[NomeDaEmpresa]=LMN Ltda.;
Linha2[Endereo]=Rua dos nmeros, 123";
Linha2[Telefone]=555-5555";
Linha2[Pas]=Brasil;
Clientes2.Rows.Add(Linha2);
5. Por ltimo fao a ligao entre o objeto DataTable Clientes2 e o controle DataGrid MinhaGrade2:
MnhaGrade2.DataSource = Clientes2.DefaultView;
MinhaGrade2.DataBind();
6. Neste momento, conforme pode ser confirmado pela Figura 12.1, temos duas novas linhas adicionadas ao objeto
Clientes2. Este objeto segue o modelo desconectado, do ADO.NET. Isto significa que as alteraes feitas no
objeto DataTable (no caso adio de duas novas linhas) ainda no foram enviadas para o Banco de dados
NorthWind.mdb. Isto pode ser facilmente comprovado.
Abra o Microsoft Access e abra o Banco de dados NorthWind.mdb. Crie uma consulta baseada na tabela Clientes
e defina como critrio Brasil, para o campo Pas. Sero exibidos apenas os Clientes do Brasil. Observe que os
dois novos clientes (cdigos XXYYK e WWMMK) no foram adicionados tabela Clientes, conforme indicado
na Figura 12.2.
7. Para atualizar o banco de dados, isto , enviar de volta as alteraes feitas no objeto DataTable, temos que utilizar
alguns mtodos do objeto DataAdapter. Aprenderemos a utilizar estes mtodos mais adiante, neste captulo.
Vamos aprender a utilizar mais alguns mtodos do objeto DataTable, antes de aprendermos a sincronizar as alteraes
deste com o banco de dados.
483 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Exemplo 2: Vamos modificar um pouco o exemplo anterior. Ao invs de adicionarmos duas novas linhas, vamos
excluir as duas primeiras linhas do objeto DataTable.
Vamos exibir os dados originais, retornados do Banco de dados NorthWind.mdb e a tabela Clientes2, aps as excluses
dos registros.
Na Listagem 12.2 temos o cdigo para o exemplo proposto. Vou excluir o comentrio da parte bsica da listagem,
parte esta que j explicamos em exemplos anteriores. Somente incluirei comentrios nos pontos da listagem onde
temos novidades.
<html>
String auxSQL1;
www.juliobattisti.com.br 484
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
String auxSQL2;
String auxSQL3;
String ComandoSQL;
ComandoSQL= auxSQL1+auxSQL2+auxSQL3;
MinhaGrade1.DataSource = source ;
MinhaGrade1.DataBind();
Clientes2.Rows[0].Delete();
Clientes2.Rows[1].Delete();
485 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
// *********************************************************
// Vamos descartar as excluses. Para isto chamaremos o mtodo
// RejectChanges(), do objeto DataTable.
// A chamada deste mtodo far com que as linhas marcadas para
// excluso sejam restauradas ao seu estatus padro e, portanto,
// exibidas no DataGrid MinhaGrade2.
Clientes2.RejectChanges();
MinhaGrade2.DataSource = Clientes2.DefaultView;
MinhaGrade2.DataBind();
Clientes2.Rows[0].Delete();
Clientes2.Rows[1].Delete();
Clientes2.AcceptChanges();
MinhaGrade3.DataSource = Clientes2.DefaultView;
MinhaGrade3.DataBind();
</script>
<body>
www.juliobattisti.com.br 486
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
<ASP:DataGrid
id=MinhaGrade1"
runat=server
Width=700"
BackColor=#c0c0c0"
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Bold=True
Font-Size=7pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
<HR>
<ASP:DataGrid
id=MinhaGrade2"
runat=server
Width=700"
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Size=7pt
HeaderStyle-Font-Bold=True
MaintainState=false
/>
<HR>
<ASP:DataGrid
id=MinhaGrade3"
runat=server
487 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Width=700"
BackColor=#c0c0c0"
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Courier New
Font-Size=8pt
Font-Bold=True
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
</body>
</html>
Digite o cdigo da Listagem 12.2 e salve o mesmo em um arquivo chamado chap12ex2.aspx, na pasta chap12, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Para excluir uma linha de um objeto DataTable, utilizamos o mtodo Delete, da coleo de linhas Rows. A
sintaxe para este mtodo a seguinte:
MeuDataTable.Rows[nmero_da_linha].Delete();
Aps a chamada deste mtodo, a linha marcada para excluso. Podemos retornar a linha ao seu estado normal,
chamando o mtodo RejectChanges. A chamada deste mtodo faz com que sejam descartadas todas as alteraes
efetuadas, desde a ltima chamada do mtodo AcceptChanges. No nosso exemplo, exclumos as duas primeiras linhas,
e depois chamamos o mtodo RejectChanges, para cancelar as excluses. Em seguida exibimos os dados do objeto
Clientes2, no controle MinhaGrade2:
www.juliobattisti.com.br 488
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Clientes2.Rows[0].Delete();
Clientes2.Rows[1].Delete();
// Neste momento as linhas foram apenas marcadas para excluso,
// porm continuam no objeto DataTable, conforme pode ser confirmado
// pelos dados exibidos no controle MinhaGrade2.
// Vamos descartar as alteraes. Para isto chamaremos o mtodo
// RejectChanges(), do objeto DataTable.
// A chamada deste mtodo far com que as linhas marcadas para
// excluso sejam restauradas ao seu estatus padro e, portanto,
// exibidas no DataGrid MinhaGrade2.
Clientes2.RejectChanges();
MinhaGrade2.DataSource = Clientes2.DefaultView;
MinhaGrade2.DataBind();
489 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Em seguida marcamos as duas primeiras linhas para excluso, porm agora chamamos o mtodo AcceptChanges,
para confirmar as excluses. Exibimos os resultados no controle DataGrid3:
Clientes2.Rows[0].Delete();
Clientes2.Rows[1].Delete();
Clientes2.AcceptChanges();
MinhaGrade3.DataSource = Clientes2.DefaultView;
MinhaGrade3.DataBind();
Mais uma vez cabe ressaltar que estas excluses no foram enviadas para o banco de dados. Foram feitas no
objeto DataTable que um objeto que segue o modelo desconectado do ADO.NET. Aprenderemos a
sincronizar as alteraes com o banco de dados ainda neste captulo.
Exemplo 3: Vamos aprender a alterar os dados de uma linha do objeto DataSet. Vamos apresentar um exemplo, onde
temos uma Caixa de Combinao com o nome de todos os Clientes do Brasil. O usurio seleciona um nome na lista e
clica no boto Editar. O respectivo registro ser retornado e os valores exibidos em controles do tipo TextBox, para que
o usurio possa alter-los, com exceo do campo CdigoDoCliente. Uma vez feitas as alteraes necessrias, o
usurio clica no boto Salvar. Os novos valores so salvos e a listagem de Clientes novamente exibida para que
possamos confirmar se as alteraes foram feitas.
Na Listagem 12.3 temos o cdigo para o exemplo proposto. Vou excluir o comentrio da parte bsica da listagem,
parte esta que j explicamos em exemplos anteriores. Somente incluirei comentrios nos pontos da listagem onde
temos novidades. O exemplo um pouco longo pois, alm das tcnicas para edio de registros, vamos aprender a
tratar eventos, localizar dados automaticamente, ocultar e exibir controles utilizando cdigo e outras tcnicas teis.
www.juliobattisti.com.br 490
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
<html>
OleDbDataAdapter MeuComando;
String auxSQL1;
String auxSQL2;
String comandoSQL;
DataSet ds = new DataSet();
OleDbConnection MinhaConexo;
String DefineConexo= PROVIDER=MICROSOFT.JET.OLEDB.4.0; +
DATA SOURCE=c:\\meus documentos\\NorthWind.mdb;
String auxSQL1;
String auxSQL2;
String comandoSQL;
comandoSQL = auxSQL1+auxSQL2;
MinhaConexo = new OleDbConnection(DefineConexo);
491 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MeuComando.Fill(ds);
MinhaLista.DataSource = source ;
MinhaLista.DataBind();
}
}
void OcultaControles()
{
txtNovoCdigoDoCliente.Visible =false;
txtNovoNomeDaEmpresa.Visible = false;
txtNovoEndereo.Visible=false;
txtNovoTelefone.Visible=false;
txtNovoPas.Visible=false;
txtMostraAtualizado.Visible=false;
txtMensagem.Visible=false;
}
www.juliobattisti.com.br 492
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
OcultaControles();
String auxSQL1;
String auxSQL2;
String comandoSQL;
comandoSQL = auxSQL1+auxSQL2;
MeuComando.Fill(ds);
493 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
txtCdigoDoCliente.Text = Linha[CdigoDoCliente].ToString();
txtNomeDaEmpresa.Text = Linha[NomeDaEmpresa].ToString();
txtEndereo.Text = Linha[Endereo].ToString();
txtTelefone.Text = Linha[Telefone].ToString();
txtPas.Text = Linha[Pas].ToString();
String auxSQL1;
String auxSQL2;
String comandoSQL;
comandoSQL = auxSQL1+auxSQL2;
MeuComando.Fill(ds);
DataView source = new DataView(ds.Tables[0]);
www.juliobattisti.com.br 494
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Linha.BeginEdit();
Linha[CdigoDoCliente] = txtCdigoDoCliente.Text;
Linha[NomeDaEmpresa] = txtNomeDaEmpresa.Text;
Linha[Endereo] = txtEndereo.Text;
Linha[Telefone] = txtTelefone.Text;
Linha[Pas] = txtPas.Text;
Linha.EndEdit();
txtMostraAtualizado.Visible=true;
txtNovoCdigoDoCliente.Text = Linha[CdigoDoCliente].ToString();
txtNovoCdigoDoCliente.Visible =true;
495 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
txtNovoNomeDaEmpresa.Text = Linha[NomeDaEmpresa].ToString();
txtNovoNomeDaEmpresa.Visible = true;
txtNovoEndereo.Text = Linha[Endereo].ToString();
txtNovoEndereo.Visible=true;
txtNovoTelefone.Text = Linha[Telefone].ToString();
txtNovoTelefone.Visible = true;
txtNovoPas.Text = Linha[Pas].ToString();
txtNovoPas.Visible=true;
txtMensagem.Visible=true;
txtCdigoDoCliente.Text = auxCdigoDoCliente;
txtNomeDaEmpresa.Text = auxNomeDaEmpresa;
txtEndereo.Text = auxEndereo;
txtTelefone.Text = auxTelefone;
txtPas.Text = auxPas;
}
</script>
<body>
<h3><font face=Verdana>
Selecione um cliente na lista,
<BR>
para editar o registro do cliente.
</font>
</h3>
<HR>
www.juliobattisti.com.br 496
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
<form runat=server>
<div align=left>
<table border=0">
<tr>
<td>
<p align=right>
<B>
Selecione um cliente ->>
</B>
</td>
<td>
<asp:DropDownList
id=MinhaLista
runat=server
BackColor=#c0c0c0"
Font-Bold=True
DataTextField = NomeDaEmpresa
DataValueField = CdigoDoCliente
AutoPostBack = True
onSelectedIndexChanged = ClienteSelecionado
>
</asp:DropDownList>
</td>
<td>
<asp:TextBox
runat=server
id=txtMostraAtualizado
Text=REGISTRO ATUALIZADO !!!
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
497 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Font-Bold=True
BackColor=#c0c0c0"
Enabled=False
Visible=False
Height=20"
Width=200"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Cdigo do Cliente:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtCdigoDoCliente
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
Enabled=False
/>
</td>
<td>
<asp:TextBox
runat=server
www.juliobattisti.com.br 498
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
id=txtNovoCdigoDoCliente
Text=
BackColor=#c0c0c0"
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
Enabled=False
Visible=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Nome da Empresa:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtNomeDaEmpresa
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
/>
</td>
<td>
499 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:TextBox
runat=server
id=txtNovoNomeDaEmpresa
Text=
BackColor=#c0c0c0"
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
Visible=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Endereo:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtEndereo
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
/>
</td>
www.juliobattisti.com.br 500
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
<td>
<asp:TextBox
runat=server
id=txtNovoEndereo
Text=
BackColor=#c0c0c0"
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
Visible=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Telefone:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtTelefone
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
/>
501 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</td>
<td>
<asp:TextBox
runat=server
id=txtNovoTelefone
Text=
BackColor=#c0c0c0"
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
Visible=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Pas:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtPas
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
www.juliobattisti.com.br 502
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
/>
</td>
<td>
<asp:TextBox
runat=server
id=txtNovoPas
Text=
BackColor=#c0c0c0"
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Height=20"
Width=200"
Visible=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<b>Clique no boto Atualizar</b>
</td>
<td>
<asp:Button
id=AtualizaDados
Text=Atualizar dados
runat=server
OnCLick=AtualizarRegistro
/>
</td>
<td>
503 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<asp:TextBox
runat=server
id=txtMensagem
Text=Atualizado com sucesso !!!
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
Font-Bold=True
BackColor=#c0c0c0"
Visible=False
Enabled=False
Height=20"
Width=200"
/>
</td>
</table>
</div>
</form>
</body>
</html>
Digite o cdigo da Listagem 12.3 e salve o mesmo em um arquivo chamado chap12ex3.aspx, na pasta chap12, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Ao carregar a pgina voc obtm o resultado indicado na Figura 12.4, onde apresentada uma lista com o nome dos
clientes do Brasil e cinco controles do tipo TextBox, em branco.
Na lista de Clientes selecione Tradio Hipermercados. Observe que, automaticamente, as informaes do registro
referente ao cliente selecionado so exibidas nos controles do formulrio, conforme indicado na Figura 12.5.
Clique no campo Nome da Empresa e altere o valor para: Tradio Hipermercados XYZ.
www.juliobattisti.com.br 504
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
505 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
D um clique no boto Atualizar dados. Na coluna do meio so exibidos os valores originais do registro para o cliente
Tradio Hipermercados e, na coluna da direita, so exibidos os valores j alterados, conforme indicado na Figura 12.6.
Cabe, mais uma vez, ressaltar que os valores foram alterados no objeto DataTable, desconectado do banco de dados.
As alteraes ainda no foram enviadas para o Banco de dados NorthWind.mdb. Para comprovar isto, basta abrir o
Banco de dados NorthWind.mdb e verificar que o registro para o cliente Tradio Hipermercados no foi alterado. No
prximo tpico aprenderemos a sincronizar o objeto DataTable com o banco de dados.
O exemplo um pouco extenso, porm veremos que a sua funcionalidade bastante simples.
Declaramos algumas variveis com escopo de pgina, ou seja, fora de qualquer procedimento. Estas variveis
sero utilizadas em diversos procedimentos da pgina, e por isso foram declaradas com escopo de pgina:
// Declaro variveis que sero globais para a pgina.
OleDbDataAdapter MeuComando;
String auxSQL1;
String auxSQL2;
String comandoSQL;
DataSet ds = new DataSet();
OleDbConnection MinhaConexo;
String DefineConexo= PROVIDER=MICROSOFT.JET.OLEDB.4.0; +
DATA SOURCE=c:\\meus documentos\\NorthWind.mdb;
www.juliobattisti.com.br 506
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
No evento Page_Load da pgina, fazemos a conexo com o Banco de dados NorthWind.mdb, retornamos
dados da tabela Clientes e fazemos a ligao com o controle MinhaLista. O controle MinhaLista exibe uma
listagem com o nome dos clientes do Brasil. O cdigo do evento Page_Load somente executado quando a
pgina carregada pela primeira vez, ou seja, quando no for um PostBack. Observe que, no incio do
procedimento, testamos se ou no um PostBack:
if (!Page.IsPostBack)
O operador ! o operador not. O teste equivalente a dizer: Se no for um PostBack, execute o cdigo dentro do
if . O cdigo para conexo com o banco de dados e ligao com o controle MinhaLista semelhante ao cdigo
utilizado em exemplos anteriores.
No evento Page_Load, tambm fazemos uma chamada ao procedimento OcultaControles. Este procedimento oculta
todos os controles da terceira coluna, os quais somente voltaro a ser exibidos quando o usurio editar um registro:
OcultaControles();
Na definio do controle MinhaLista, definimos diferentes valores para as propriedades DataTextField. A propriedade
DataTextField define qual o campo que fornece os valores que sero exibidos para cada item da lista. No nosso
exemplo, como queramos que fossem exibidos os nomes dos clientes, def inimos a propriedade
DataTextField=NomeDaEmpresa. A propriedade DataValueField define qual o valor associado com cada item da
lista. Em outras palavras, quando o usurio seleciona um cliente na lista, qual o valor que ficar associado com a
propriedade Value da lista. Poderia ser o mesmo campo que define o texto de cada item. Porm, para o nosso exemplo,
queremos que, ao selecionar um cliente, seja definido, como valor do elemento selecionado da lista, o respectivo
CdigoDoCLiente. Por isso definimos a propriedade DataValueField=CdigoDoCliente. Na prtica, quando o usurio
selecionar, por exemplo, o cliente Tradio Hipermercados , o valor associado ser TRADH, que o cdigo do
cliente Tradio Hipermercados. Mais adiante veremos que o cdigo do cliente utilizado para localizar o registro
do cliente. A seguir temos a definio do controle MinhaLista:
<asp:DropDownList
id=MinhaLista
runat=server
BackColor=#c0c0c0"
Font-Bold=True
DataTextField = NomeDaEmpresa
DataValueField = CdigoDoCliente
AutoPostBack = True
onSelectedIndexChanged = ClienteSelecionado
>
</asp:DropDownList>
Para alinhar os diversos controles do formulrio, utilizamos uma tabela de trs colunas. Na primeira coluna
so exibidos os rtulos para cada campo. Na segunda coluna so exibidos os valores originais do registro. Na
terceira coluna so exibidos os valores aps o usurio ter feito alteraes.
507 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
OcultaControles();
Depois executamos uma srie de comandos para conectar com o banco de dados. Estes comandos so idnticos aos
utilizados no evento Page_Load.
Em seguida criamos um objeto DataTable, associado primeira tabela do objeto DataSource ds:
Este comando precisa de mais alguns comentrios. Para definir a chave primria, utilizamos a propriedade PrimaryKey,
do objeto DataTable. Devemos passar um objeto do tipo DataColumn para a propriedade PrimaryKey. O objeto
DataColumn um array de objetos do tipo Column. O Array contm a referncia a uma ou mais colunas, que formam
a chave primria. No nosso exemplo, definimos apenas a coluna CdigoDoCliente, como sendo a chave primria.
Agora hora de criar um objeto do tipo Linha, o qual contm os valores para o cliente selecionado. Para localizar o
registro do cliente que foi selecionado na lista de clientes, utilizamos o mtodo Find, da coleo Rows, da tabela Clientes:
Como parmetro para o mtodo Find, ns passamos o valor selecionado na lista MinhaLista. O mtodo Find recebe
um valor e pesquisa na coluna Chave Primria da tabela. Caso encontre o valor passado como parmetro, o registro
correspondente ser retornado. Observe que definimos o campo CdigoDoCliente como Chave Primria da tabela
Clientes e a propriedade DataValueField, da lista de clientes como sendo CdigoDoCliente. Agora ficou mais claro o
porqu desta definio. Ao selecionarmos um cliente na lista, associado o valor do CdigoDoCliente, com o item
selecionado. Este valor utilizado para localizar o registro do cliente.
Uma vez localizado o registro do cliente, vamos definir o contedo dos controles do tipo TextBox, da segunda coluna,
como sendo igual aos valores dos campos do registro do cliente:
txtCdigoDoCliente.Text = Linha[CdigoDoCliente].ToString();
txtNomeDaEmpresa.Text = Linha[NomeDaEmpresa].ToString();
txtEndereo.Text = Linha[Endereo].ToString();
txtTelefone.Text = Linha[Telefone].ToString();
txtPas.Text = Linha[Pas].ToString();
www.juliobattisti.com.br 508
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
O procedimento AtualizaRegistro faz a conexo com o banco de dados e localiza o registro do cliente que est sendo
editado. Neste caso so retornados os valores originais do registro, sem as alteraes feitas pelo usurio. Esta parte do
procedimento idntica utilizada no procedimento ClienteSelecionado.
Uma vez localizado o registro, com os valores originais, utilizamos uma srie de variveis auxiliares, para armazenar
os valores originais para o registro do cliente:
Estas variveis sero utilizadas para exibir os valores originais, na segunda coluna.
Finalmente chegamos ao momento de fazer a edio no registro do cliente selecionado. Para editar um registro,
chamamos o mtodo BeginEdit da linha, atribumos os novos valores a cada campo da linha e chamamos o
mtodo EndEdit( );
Em seguida tornamos os controles da terceira coluna visveis e exibimos, nestes controles, o registro j alterado:
509 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
txtNovoCdigoDoCliente.Text = Linha[CdigoDoCliente].ToString();
txtNovoCdigoDoCliente.Visible =true;
txtNovoNomeDaEmpresa.Text = Linha[NomeDaEmpresa].ToString();
txtNovoNomeDaEmpresa.Visible = true;
txtNovoEndereo.Text = Linha[Endereo].ToString();
txtNovoEndereo.Visible=true;
txtNovoTelefone.Text = Linha[Telefone].ToString();
txtNovoTelefone.Visible = true;
txtNovoPas.Text = Linha[Pas].ToString();
txtNovoPas.Visible=true;
txtMensagem.Visible=true;
Para finalizar, exibimos, na segunda coluna, os valores originais do registro. Para isso fazemos uso das variveis
auxiliares criadas anteriormente, variveis estas que contm os valores originais do registro, isto , antes da edio:
www.juliobattisti.com.br 510
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
5. Edita o registro.
6. Exibe os novos valores na terceira coluna.
7. Exibe os valores originais na segunda coluna.
O exemplo longo mas salienta uma srie de tcnicas teis que podem ser, facilmente, adaptadas para as
aplicaes que o leitor venha a desenvolver com ASP.NET.
Agora hora de aprendermos a sincronizar as alteraes feitas em um objeto DataTable, com o banco de dados, de tal
forma que estas alteraes sejam enviadas de volta ao banco de dados.
Estas propriedades podem ser definidas manualmente ou atravs da utilizao de um objeto OleDbCommandBuilder/
SqlCommandBuilder. O objeto CommandBuilder possui um mtodo GetDeleteCommand para gerar, automaticamente,
o comando para enviar as excluses para o banco de dados; possui um mtodo GetInsertCommand para gerar,
automaticamente, o comando para inserir as novas linhas no banco de dados; e um mtodo GetUpdateCommand para
gerar, automaticamente, o comando para enviar as alteraes para o banco de dados.
4. Uma vez definidos os comandos necessrios, chamamos o mtodo Update do objeto DataAdapter. Este mtodo
executa, no banco de dados, os comandos definidos nas propriedades InsertCommand, DeleteCommand e
UpdateCommand. Caso tenhamos definido apenas uma destas propriedades, somente os respectivos comandos
sero executados. Por exemplo, se construmos um formulrio para cadastrar clientes, apenas precisaremos definir
a propriedade InsertCommand.
Vamos lembrar do exemplo Chap12ex1.aspx. Neste exemplo inserimos duas linhas no objeto DataTable e
comprovamos que estas adies no foram enviadas para o Banco de dados NorthWind.mdb. Se quisermos atualizar
511 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
o Banco de dados NorthWind.mdb, basta incluir as seguintes linhas de cdigo, no final do procedimento Page_Load,
do referido exemplo:
MeuDataAdapter.InsertCommand= CriaComando.GetInsertCommand();
MeuDataAdapter.Update(ds,Clientes2");
Ao inserir estes comandos, no final do procedimento Page_Load e recarregar a pgina, dois novos registros sero
inseridos no banco de dados. Voc pode abrir o Microsoft Access, carregar o Banco de dados NorthWind.mdb e
conferir. Os registros realmente foram inseridos.
www.juliobattisti.com.br 512
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Endereo
Telefone
Pas
Na Listagem 12.4 temos o cdigo para o exemplo proposto. Vou excluir o comentrio da parte bsica da listagem,
parte esta que j explicamos em exemplos anteriores. Somente incluirei comentrios nos pontos da listagem em que
temos novidades.
<html>
OleDbDataAdapter MeuDataAdapter;
513 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
String auxSQL1;
String auxSQL2;
String comandoSQL;
DataSet ds = new DataSet();
OleDbConnection MinhaConexo;
String DefineConexo= PROVIDER=MICROSOFT.JET.OLEDB.4.0; +
DATA SOURCE=c:\\meus documentos\\NorthWind.mdb;
String comandoSQL;
comandoSQL = Select * From Clientes;
MeuDataAdapter.Fill(ds,Clientes);
www.juliobattisti.com.br 514
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Linha[CdigoDoCliente] = txtCdigoDoCliente.Text;
Linha[NomeDaEmpresa] = txtNomeDaEmpresa.Text;
Linha[NomeDoContato] = txtNomeDoContato.Text;
Linha[CargoDoContato] = txtCargoDoContato.Text;
Linha[Endereo] = txtEndereo.Text;
Linha[Cidade] = txtCidade.Text;
Linha[Regio] = txtRegio.Text;
Linha[CEP] = txtCEP.Text;
Linha[Pas] = txtPas.Text;
Linha[Telefone] = txtTelefone.Text;
Linha[Fax] = txtFax.Text;
Clientes.Rows.Add(Linha);
MeuDataAdapter.InsertCommand= CriaComando.GetInsertCommand();
MeuDataAdapter.Update(ds,Clientes);
515 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
txtCdigoDoCliente.Text =;
txtNomeDaEmpresa.Text =;
txtNomeDoContato.Text =;
txtCargoDoContato.Text =;
txtEndereo.Text =;
txtCidade.Text =;
txtRegio.Text =;
txtCEP.Text =;
txtPas.Text =;
txtTelefone.Text =;
txtFax.Text =;
</script>
<body>
<asp:Label
id=Label1"
runat=server
/>
<HR>
<asp:Label
id=Label2"
runat=server
/>
<h3><font face=Verdana>
CADASTRO DE CLIENTES
<BR>
Empresa North Traders Ltda.
</font>
</h3>
www.juliobattisti.com.br 516
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
<HR>
<form runat=server>
<asp:RequiredFieldValidator
id=Requer_CdigoDoCliente
ControlToValidate=txtCdigoDoCliente
Type=String
ErrorMessage=O Cdigo do Cliente campo Obrigatrio <BR>
Text=O Cdigo do Cliente campo Obrigatrio.
ForeColor=Red
runat=server
/>
<asp:RequiredFieldValidator
id=Requer_NomeDaEmpresa
ControlToValidate=txtNomeDaEmpresa
Type=String
ErrorMessage=O Nome da Empresa campo Obrigatrio.
Text=O Nome da Empresa campo Obrigatrio.
ForeColor=Red
runat=server
/>
<asp:RequiredFieldValidator
id=Requer_Endereo
ControlToValidate=txtEndereo
Type=String
ErrorMessage=O Endereo campo Obrigatrio.
Text=O Endereo campo Obrigatrio.
ForeColor=Red
runat=server
/>
<asp:RequiredFieldValidator
id=Requer_Telefone
ControlToValidate=txtTelefone
517 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Type=String
ErrorMessage=O Telefone campo Obrigatrio.
Text=O Telefone campo Obrigatrio.
ForeColor=Red
runat=server
/>
<asp:RequiredFieldValidator
id=Requer_Pas
ControlToValidate=txtPas
Type=String
ErrorMessage=O Pas campo Obrigatrio.
Text=O Pas campo Obrigatrio.
ForeColor=Red
runat=server
/>
<div align=left>
<table border=0">
<tr>
<td>
<p align=right>
<B>Cdigo do Cliente: (*)</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtCdigoDoCliente
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
MaxLength=5"
Height=20"
Width=300"
/>
www.juliobattisti.com.br 518
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Nome da Empresa: (*)</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtNomeDaEmpresa
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
MaxLength=40"
Height=20"
Width=250"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Nome do Contato:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtNomeDoContato
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
MaxLength=30"
519 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Height=20"
Width=250"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Cargo do Contato:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtCargoDoContato
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
MaxLength=30"
Height=20"
Width=250"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Endereo:(*)</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtEndereo
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
www.juliobattisti.com.br 520
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
MaxLength=60"
Height=20"
Width=200"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Cidade:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtCidade
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
MaxLength=15"
Height=20"
width=250"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Regio:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtRegio
Text=
TextMode=SingleLine
Font_Face=Arial
521 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Font_Size=3"
MaxLength=15"
Height=20"
Width=250"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>CEP:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtCEP
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
MaxLength=10"
Height=20"
Width=250"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>FAX:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtFax
Text=
TextMode=SingleLine
www.juliobattisti.com.br 522
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Font_Face=Arial
Font_Size=3"
MaxLength=24"
Height=20"
Width=250"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Telefone:(*)</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtTelefone
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
MaxLength=24"
Height=20"
Width=200"
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Pas:(*)</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtPas
523 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Text=
TextMode=SingleLine
Font_Face=Arial
Font_Size=3"
MaxLength=15"
Height=20"
Width=200"
/>
</td>
<td>
</tr>
<tr>
<td>
<p align=right>
<b>Clique no boto Cadastrar.</b>
</td>
<td>
<asp:Button
id=CadastraCliente
Text=Cadastrar Cliente
runat=server
OnCLick=InserirCliente
/>
</td>
</tr>
<tr>
<td> <B><p align=right> *** </B> </td>
<td> <B> Campos de preenchimento obrigatrio </B> </td>
</tr>
</table>
</div>
</form>
</body>
</html>
www.juliobattisti.com.br 524
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Digite o cdigo da Listagem 12.4 e salve o mesmo em um arquivo chamado chap12ex4.aspx, na pasta chap12, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
http://localhost/chap12/chap12ex4.aspx
Ao carregar a pgina voc obtm o resultado indicado na Figura 12.8, onde apresentado um formulrio para que
voc digite as informaes do cliente a ser Cadastrado.
Digite informaes para um cliente fictcio, porm deixe o campo Telefone, que um campo obrigatrio, em branco.
Clique no boto Cadastrar Clientes. O cadastro do cliente no feito e voc informado de que o campo Telefone
obrigatrio, conforme indicado na Figura 12.9.
525 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite um valor para o telefone e d um clique no boto Cadastrar Cliente. Agora sim, o cliente cadastrado e o
formulrio reapresentado, para que voc possa cadastrar outro cliente, conforme indicado na Figura 12.10.
Para alinhar os controles, na seo de apresentao, utilizamos uma tabela com duas colunas. Na primeira
coluna colocamos um texto descritivo do campo e, na segunda coluna, um controle TextBox para que o usurio
digite informaes.
Utilizamos controles de validao do tipo RequiredFieldValidator, para garantir que os seguintes campos
sejam preenchidos:
CdigoDoCliente
NomeDaEmpresa
Endereo
Telefone
Pas
www.juliobattisti.com.br 526
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
NOTA: Na prtica, todos os campos da tabela Clientes so configurados para no aceitar valores nulos. Se voc, por exemplo,
no digitar um valor para o campo Cidade (que no possui um campo de validao associado), na hora de salvar o registro
ser gerado o erro indicado na Figura 12.11. Isto acontece porque o campo Cidade, na tabela Clientes, do Banco de dados
NorthWind.mdb, no aceita valores nulos. Para solucionar esta opo, basta adicionar controles de validao do tipo
RequiredFieldValidator, para todos os controles do formulrio. Desta forma, as informaes somente sero enviadas para o
banco de dados, quando todos os controles estiverem preenchidos.
527 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
3. Cria uma nova linha, define o valor dos campos desta linha e adiciona a linha coleo de linhas da tabela
Clientes:
DataRow Linha = Clientes.NewRow();
Linha[CdigoDoCliente] = txtCdigoDoCliente.Text;
Linha[NomeDaEmpresa] = txtNomeDaEmpresa.Text;
Linha[NomeDoContato] = txtNomeDoContato.Text;
Linha[CargoDoContato] = txtCargoDoContato.Text;
Linha[Endereo] = txtEndereo.Text;
Linha[Cidade] = txtCidade.Text;
Linha[Regio] = txtRegio.Text;
Linha[CEP] = txtCEP.Text;
Linha[Pas] = txtPas.Text;
www.juliobattisti.com.br 528
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
Linha[Telefone] = txtTelefone.Text;
Linha[Fax] = txtFax.Text;
Clientes.Rows.Add(Linha);
4. Crio um objeto OleDbCommandBuilder, utilizo o mtodo GetInsertCommand deste objeto para definir a
propriedade InsertCommand do objeto DataAdapter e chamo o mtodo Update do objeto DataAdapter:
OleDbCommandBuilder CriaComando = new OleDbCommandBuilder(MeuDataAdapter);
MeuDataAdapter.InsertCommand= CriaComando.GetInsertCommand();
MeuDataAdapter.Update(ds,Clientes)
5. Exibo informaes de que o cliente foi cadastrado com sucesso e limpo os valores contidos nos controles
TextBox, para que o usurio possa digitar informaes de outro Cliente.
Label1.Text= Registro para o cliente: + txtNomeDaEmpresa.Text + Inserido com
sucesso;
Label2.Text=Preencha os campos abaixo para cadastrar outro Cliente;
// Limpo o valor dos campos TextBox.
txtCdigoDoCliente.Text =;
txtNomeDaEmpresa.Text =;
txtNomeDoContato.Text =;
txtCargoDoContato.Text =;
txtEndereo.Text =;
txtCidade.Text =;
txtRegio.Text =;
txtCEP.Text =;
txtPas.Text =;
txtTelefone.Text =;
txtFax.Text =;
Ok. Um novo Cliente foi cadastrado no Banco de dados NorthWind.mdb. A seguir veremos como definir as
operaes de Excluso e Edio de registros. Para isso utilizaremos as propriedades DeleteCommand e
UpdateCommand, do objeto DataAdapter.
529 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
2. Localizo a linha a ser excluda. Para localizar a linha posso utilizar o mtodo Find, da coleo Rows, descrito e
exemplificado anteriormente. Tambm posso utilizar, caso eu conhea, o ndice da linha a ser excludo. Vejamos
alguns exemplos:
// Excluo a primeira linha do DataTable Clientes, utilizando o ndice da linha.
Clientes.Rows[0].Delete();
// Outra alternativa localizar a linha a ser excluda e depois chamar o
mtodo Delete da linha.
3. Agora precisamos enviar as excluses para o banco de dados. Em primeiro lugar criamos um objeto do tipo
OleDbCommandBuilder, associado ao objeto DataAdapter que estamos utilizando:
OleDbCommandBuilder CriaComando = new OleDbCommandBuilder(MeuDataAdapter);
Defino a propriedade DeleteCommand, do objeto DataAdapter. Posso definir esta propriedade manualmente ou
utilizando o mtodo GetDeleteCommand do objeto OleDbCommandBuilder. No exemplo a seguir, utilizamos o mtodo
GetDeleteCommand:
MeuDataAdapter.DeleteCommand= CriaComando.GetDeleteCommand();
Definidos os comandos necessrios hora de fazer com que eles sejam efetivamente executados no banco de dados.
Para tal chamamos o mtodo Update do objeto DataAdapter:
MeuDataAdapter.Update(ds,Clientes);
Como parmetros para este mtodo, passamos o nome do DataSet e o nome da tabela a ser atualizada. O mtodo
Update ir executar, no banco de dados, os comandos definidos na propriedade DeleteCommand. O resultado
prtico desta operao que todos os registros que foram excludos do objeto DataTable sero excludos da
tabela no banco de dados, ou seja, estamos sincronizando as alteraes feitas na cpia desconectada dos dados,
com a cpia original dos dados. Aps a execuo do mtodo Update, os dois conjuntos de dados desconectados
e originais so cpias idnticas.
Para que possamos gerar os comandos automaticamente, utilizando um objeto do tipo CommandBuilder, algumas
condies devem ser observadas:
Os dados que formam uma tabela no objeto DataSet devem ter sido obtidos a partir de uma nica tabela
no banco de dados. Por exemplo, se utilizamos as tabelas Pedidos e Detalhes do pedido, para obter uma
listagem com o total por Pedido, precisaremos construir manualmente os comandos de atualizao, edio
e excluso. Construir manualmente significa criar uma string com o comando SQL e atribuir esta String
propriedade respectiva.
A tabela deve ter uma Chave Primria. Pode ser uma Chave Primria simples (formada por uma coluna) ou
uma Chave Primria composta por duas ou mais colunas.
Os nomes de tabelas no podem conter caracteres especiais como espaos, pontos, aspas e outros caracteres
que no sejam nmeros e letras.
www.juliobattisti.com.br 530
CAPTULO 12: ACESSANDO BANCOS DE DADOS COM ASP.NET PARTE 3
2. Crio uma nova linha utilizando o mtodo NewRow, defino os valores para cada campo da linha e utilizo o mtodo
Add, da coleo Rows, do objeto DataTable:
// Chamo o mtodo NewRow da tabela Clientes.
Linha[CdigoDoCliente]= txtCdigoDoCliente.Text;
Linha[NomeDaEmpresa] = txtNomeDaEmpresa.Text;
Linha[NomeDoContato] = txtNomeDoContato.Text;
Linha[CargoDoContato] = txtCargoDoContato.Text;
Linha[Endereo] = txtEndereo.Text;
Linha[Cidade] = txtCidade.Text;
Linha[Regio] = txtRegio.Text;
Linha[CEP] = txtCEP.Text;
Linha[Pas] = txtPas.Text;
Linha[Telefone] = txtTelefone.Text;
Linha[Fax] = txtFax.Text;
Clientes.Rows.Add(Linha);
3. A linha foi adicionada ao conjunto de dados desconectados; agora precisamos enviar a adio para o banco de
dados. Em primeiro lugar criamos um objeto do tipo OleDbCommandBuilder, associado ao objeto DataAdapter
que estamos utilizando:
OleDbCommandBuilder CriaComando = new OleDbCommandBuilder(MeuDataAdapter);
Defino a propriedade InsertCommand, do objeto DataAdapter. Posso definir esta propriedade manualmente ou utilizando
o mtodo GetInsertCommand do objeto OleDbCommandBuilder. No exemplo a seguir, utilizamos o mtodo
GetInsertCommand:
MeuDataAdapter.InsertCommand= CriaComando.GetInsertCommand();
531 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Definidos os comandos necessrios, hora de fazer com que estes comandos sejam efetivamente executados no banco
de dados. Para tal chamamos o mtodo Update do objeto DataAdapter:
MeuDataAdapter.Update(ds,Clientes);
Como parmetros para este mtodo, passamos o nome do DataSet e o nome da tabela a ser atualizada. O mtodo
Update ir executar, no banco de dados, os comandos definidos na propriedade InsertCommand. O resultado prtico
desta operao que a nova linha ser adicionada tabela do banco de dados original, ou seja, estamos sincronizando
as alteraes feitas na cpia desconectada dos dados, com a cpia original dos dados. Aps a execuo do mtodo
Update, os dois conjuntos de dados desconectados e originais so cpias idnticas.
Concluso
Neste captulo aprendemos tcnicas fundamentais para o trabalho com bancos de dados.
Inicialmente aprendemos a realizar edies, incluses e excluses na cpia de dados desconectados, ou seja, nos
dados de um objeto DataTable. Aprendemos a utilizar diversas propriedades e mtodos do objeto DataTable.
Porm as alteraes precisam ser sincronizadas com o banco de dados originais. Na parte final do captulo aprendemos
a enviar as alteraes feitas no objeto DataTable para o banco de dados original. Com isso mantemos sincronizadas as
duas cpias dos dados.
No prximo captulo falaremos sobre Web Services e sobre o novo ambiente de desenvolvimento do Framework
.NET: Visual Studio .NET.
www.juliobattisti.com.br 532
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
PARTE
3
Conceitos Avanados
do ASP.NET e Segurana
533 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Introduo CAPTULO
Na dcada de 70 tnhamos os dados e a lgica de programao instalados no
Mainframe. Acessvamos estas aplicaes utilizando terminais para conectar com
13
o Mainframe. Como uma evoluo surgiu o modelo Cliente/Servidor, onde
tradicionalmente temos o banco de dados rodando no Servidor e a lgica e
apresentao da aplicao, instaladas na estao do cliente. Este modelo mostrou-
se de difcil manuteno e atualizao e surgiu o modelo em trs camadas, onde a
lgica fica armazenada no servidor de aplicaes, normalmente no formato de
componentes COM/COM+, os dados no servidor de banco de dados e a
apresentao no programa instalado no Cliente. Com o crescimento explosivo da Web Services e
Internet e, conseqentemente, com a consolidao dos protocolos Web, passamos
Visual Studio .NET
a utilizar o Navegador como cliente e o modelo de desenvolvimento baseado em
padres Web uma realidade.
Para a criao de programas que possam ser acessados como servios, precisamos
de alguma maneira poder criar pequenas unidades de software, com
funcionalidades especficas e depois juntar estas pequenas unidades, para formar
nossos programas. Em determinadas situaes pode ser vantajoso criar a
funcionalidade internamente; em outras situaes pode ser mais interessante
simplesmente pagar para ter acesso a um componente que j fornece a
funcionalidade desejada. Por exemplo, se voc cria um site de Comrcio Eletrnico,
pode ser mais vantajoso permitir que o seu sistema utilize um componente de
validao de carto de crdito, disponvel no servidor da empresa que criou o
componente, mediante um pagamento por acesso ou por ms, do que criar um
componente a partir do zero.
www.juliobattisti.com.br 534
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Com isso podemos criar aplicaes realmente distribudas, onde as diversas funcionalidades do sistema esto localizadas
em diferentes servidores, inclusive de diferentes empresas. Neste captulo veremos como criar Web Services e depois
utilizar os Web Services criados em nossas pginas ASP.NET.
Em seguida aprenderemos a utilizar o ambiente de desenvolvimento do Framework .NET Visual Studio .NET.
Aprenderemos a criar pginas ASP.NET simples e tambm exemplos mais elaborados, que fazem conexo com bancos
de dados. Veremos que o Visual Studio .NET traz, para o desenvolvimento Web, as mesmas facilidades que temos no
desenvolvimento de aplicaes Windows tradicionais. Com o Visual Studio .NET construmos aplicaes Web, baseadas
em ASP.NET, arrastando componentes na pgina e configurando as diversas opes, propriedades e eventos dos
componentes.
Com o Visual Studio .NET a produtividade do programador, na criao de aplicaes Web, aumenta enormemente,
uma vez que o Visual Studio .NET traz para o desenvolvimento de pginas ASP.NET um modelo j conhecido, onde
simplesmente vamos arrastando elementos na pgina e fazendo as configuraes necessrias.
Muitas vezes, dentro da mesma empresa temos diferentes ambientes e a questo do compartilhamento de informaes
e integrao de aplicaes uma das mais difceis de serem resolvidas. Com a Internet iniciou-se um processo de
padronizao em diversas frentes:
TCP/IP como protocolo da Internet e tambm das redes internas, das empresas.
HTML como um formato padro para a publicao de informaes.
HTTP como protocolo de transporte.
Porm alguns problemas ainda persistiam. Como viabilizar a troca de informaes entre empresas que, na maioria das
vezes, utilizam formatos de dados proprietrios e completamente incompatveis? Como resposta a esta questo, o
padro XML (Extensible Markup Language) tem sido uma resposta eficaz e amplamente aceita pelo mercado. Porm
ainda persiste a questo de como fazer que uma aplicao possa utilizar funcionalidades de outras aplicaes, sem ter
que reescrever toda a lgica que j est implementada.
Acredito que a utilizao dos Web Services seja a resposta para esta ltima questo. Com Web Services podemos
construir aplicaes e componentes de software capazes de interagirem. Os Web Services podem ser criados em
diferentes linguagens ou plataformas. O que garante a interoperabilidade a utilizao de um formato padro para
troca de mensagens (XML) e um protocolo padro para o envio e recebimento destas mensagens (SOAP Simple
Object Access Protocol); sendo que as mensagens no formato SOAP so empacotadas e transportadas utilizando-se
HTTP ou SMTP, protocolos amplamente utilizados na Internet.
535 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O fato de utilizar padres amplamente aceitos que torna os Web Services uma alternativa atraente. Cabe ressaltar que
o conceito de Web Services no uma novidade do Framework .NET. Outras empresas como IBM e Sun j trabalham
com o conceito de Web Services, sendo que a IBM tambm utiliza os padres XML e SOAP.
Um Web Service um componente ou unidade de software (eu prefiro o termo Pedao de Cdigo, mas reconheo
que no um termo muito, digamos, elegante) que fornece uma funcionalidade especfica, como por exemplo uma
rotina para validao do nmero de Carto de Crdito ou do Dgito Verificador de um nmero de CPF; unidade esta
que pode ser acessada por diferentes sistemas, atravs da utilizao de padres da Internet, como por exemplo XML,
HTTP e SOAP. A utilizao destes padres de vital importncia para que possamos criar aplicaes distribudas
utilizando Web Services.
Um Web Service pode ser utilizado internamente, por uma nica aplicao ou por vrias aplicaes da mesma empresa;
ou pode ser exposto atravs da Internet, para utilizao por qualquer aplicao. Por exemplo, imagine que o Governo
do Estado disponibiliza um Web Service para clculo do ICMS. Todas as mquinas registradores de Supermercados,
Padarias e demais estabelecimentos possuem um programa que utiliza este Web Service. Se a legislao do ICMS
mudar, tudo o que o governo precisaria fazer seria alterar o Web Service e as mquinas registradoras j passariam a
fazer o clculo do ICMS, baseado na nova verso. Pelo exemplo podemos ver que a utilizao de Web Services
baseada em um mundo amplamente conectado, atravs de padres utilizados na Internet. Como a forma de acesso
a um Web Service padronizada, isto permite que diferentes sistemas possam acessar e trocar dados com um mesmo
Web Service. Para que uma aplicao possa fazer uso de um Web Service, basta que ela seja capaz de entender SOAP
e XML.
A Microsoft vem trabalhando com diversas companhias e junto ao W3C (www.w3.org), que uma entidade responsvel
pela padronizao de diversas linguagens e protocolos de Internet, em uma proposta para a padronizao do SOAP e
de outros padres que do suporte utilizao de Web Services.
Para que um Web Service possa ser utilizado, algumas funes precisam estar disponveis:
Descoberta: Precisa existir uma maneira de descobrirmos a existncia do Web Service. Por exemplo, quando
voc est criando uma aplicao de Comrcio Eletrnico, voc precisa de mecanismos para localizar Web
Services com funcionalidades especficas e que possam ser utilizados pela aplicao que est sendo criada.
Para resolver esta questo existem duas especificaes sendo atualmente analisadas: 1) UDDI (Universal
Description, Discovery and Integration www.UDDI.org); 2) DISCO (Discovery).
Descrio das funcionalidades e mtodos disponibilizados pelo Web Service: Para documentar e expor as
funcionalidades de um Web Service, a Microsoft props ao W3C a especificao WSDL (Web Service Descrip-
tion Language). O WSDL define regras para a descrio das funcionalidades de um Web Service, utilizando
XML. So descritos os mtodos e propriedades suportados pelo Web Service, os tipos de dados e os protocolos
que podem ser utilizados para o envio e recebimento de mensagens. Maiores detalhes em www.w3.org/TR/wsdl.
Protocolo padro para troca de mensagens: Conforme descrito anteriormente, utilizado o protocolo SOAP.
Maiores informaes em www.w3.org/TR/SOAP.
www.juliobattisti.com.br 536
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Criao de uma funcionalidade especfica para ser utilizada por um programa cliente: Esta uma das situaes
mais simples possveis. Criamos um Web Service, cuja funcionalidade ser utilizada por um outro programa.
Por exemplo, podemos criar um Web Service que contm informaes sobre as taxas de imposto de todos os
estados Brasileiros e a forma de clculo dos impostos. Este Web Service pode ser utilizado por sites de comrcio
eletrnico para calcular o preo final do produto, de acordo com o local de entrega.
Neste cenrio, o sistema do site de comrcio eletrnico formata uma mensagem com as informaes do produto
e do local de destino, na forma de uma mensagem XML, a qual encapsulada no formato SOAP para ser
transportada pelo protocolo HTTP. No destino o Web Service desempacota a mensagem, l as informaes
no formato XML, faz os clculos com base nos valores recebidos, empacota o resultado no formato XML, o
qual encapsulado no formato SOAP para ser transportado pelo protocolo HTTP, de volta para o programa
que fez a solicitao de clculo.
Integrao entre diferentes aplicaes: Este um dos grandes problemas a serem resolvidos pela rea de TI
das empresas. Podemos utilizar Web Services para fazer a integrao entre diferentes aplicaes, criadas em
diferentes plataformas e que trabalham com diferentes formatos de dados. Com Web Services, podemos expor
a funcionalidade e os dados de cada aplicao como um Web Service. Em seguida criamos uma aplicao que
utiliza o conjunto de Web Services, criados a partir das aplicaes individuais, aplicao esta que habilita a
interoperabilidade entre as diversas aplicaes. Esta situao ilustrada na Figura 13.1.
537 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
A utilizao de Web Services tambm de grande utilidade em aplicaes de Workflow, onde um determinado
processo ou tarefa realizado em diferentes sees da empresa. O exemplo clssico o caso de aprovao
das despesas de viagens para um funcionrio. O funcionrio envia uma solicitao com a justificativa para o
chefe imediato, o qual aprova a solicitao e envia para o setor de Recursos Humanos para as providncias
necessrias. Uma vez alocados os recursos necessrios, o setor de Recursos Humanos informa o funcionrio
sobre horrios, datas, etc. Para automatizarmos um Workflow como este do exemplo, precisamos interagir
com dados e sistemas de diferentes departamentos da empresa, os quais normalmente no esto integrados,
com formatos de dados diferentes. Neste ponto que podemos utilizar Web Services para criar um sistema de
Workflow que, do ponto de vista do usurio, funciona como um sistema integrado, que utiliza um nico
modelo de dados e conjunto de funcionalidades.
A Microsoft fornece um produto que facilita a criao de um sistema como o descrito no pargrafo anterior: BizTalk
Server. Com este produto podemos criar processos de negcios e automatizar a gerao de mensagens no formato
XML, para interoperabilidade entre os sistemas.
O que Diferencia Web Services das Tecnologias de Componentes Como COM ou CORBA?
Caso voc conhea a tecnologia COM /COM+ da Microsoft ou CORBA, coordenada por um grupo de grandes empresas
como Sun, Netscape, IBM, etc., pode estar se perguntando se Web Services no exatamente a mesma coisa.
Em termos de funcionalidade devo concordar que a idia bastante semelhante, mas o que diferencia um Web Service
o fato de este poder ser acessado a partir de qualquer servidor da Internet, utilizando um protocolo padro como o
HTTP. J a tecnologia COM utiliza interfaces e formatos de mensagens, proprietrios. Surgiram algumas solues
para acesso a componentes COM atravs da Internet, porm solues proprietrias. Os mesmos comentrios so
vlidos para a tecnologia CORBA.
O modelo de programao para a criao de Web Services semelhante, em muitos aspectos, ao modelo de criao
e utilizao de componentes COM. O principal objetivo da tecnologia COM possibilitar aos programadores a
criao de uma aplicao a partir de componentes prontos, componentes estes que fornecem funcionalidades
especficas. Para atingir este objetivo, COM utiliza uma padro binrio (e proprietrio), para a definio das inter-
faces expostas por um componente COM. Embora o modelo COM facilite a localizao e utilizao de componentes,
o modelo est restrito quelas plataformas capazes de entender o mtodo proprietrio de comunicao, definido na
especificao COM.
O principal objetivo dos Web Services possibilitar aos desenvolvedores uma maneira fcil para integrar aplicaes e
dados de diferentes plataformas. Com Web Services somos capazes de integrar aplicaes criadas em diferentes
plataformas e em diferentes linguagens. Para tal, diferentemente do COM, os Web Services so baseados em padres
abertos (XML, SOAP, HTTP, etc.), padres estes amplamente utilizados atualmente. Ao invs de um mtodo binrio
para comunicao entre aplicaes, os Web Services utilizam um mecanismo de comunicao baseado em XML. O
XML passa a ser uma espcie de Linguagem Universal para troca de dados e mensagens entre aplicaes.
Bem, chega de teoria. Agora vamos aprender a criar e a utilizar Web Services. Primeiro aprenderemos a criar um Web
Service para, em seguida, aprender a utilizar Web Services em uma pgina ASP.NET.
www.juliobattisti.com.br 538
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Com base no estado de destino, o mtodo calcula o valor do imposto sobre o preo final, j aplicado o desconto.
Por simplicidade vamos considerar pedidos apenas para cinco estados e um valor padro para os demais estados. O
percentual de imposto para cada estado est descrito na Tabela 13.1.
Estado % Imposto
RS 12
SC 15
PR 17
SP 20
RJ 22
Outros 25
No nosso exemplo, vamos chamar a classe de CalculosLegais. Para definir a classe CalculosLegais utilizamos o
seguinte comando:
O prximo passo fazer referncia ao namespace System.Web.Services. Este namespace contm as classes que do
suporte criao de Web Services:
using System.Web.Services;
539 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Agora implementamos a classe CalculosLegais e os mtodos da classe. Um detalhe importante que, aps o nome da
classe, colocamos dois-pontos e a palavra Webservice. Antes de cada mtodo colocamos a palavra WebMethod entre
colchetes. Vamos chamar o mtodo que faz o clculo dos impostos de: CalculaImposto. A estrutura bsica para a
definio do WebService CalculosLegais est indicada na Listagem 13.1.
using System.Web.Services;
case RJ:
return ValorComDesconto*1.22;
break;
default:
return ValorComDesconto*1.25;
break;
}
}
}
www.juliobattisti.com.br 540
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Digite o cdigo da Listagem 13.1 e salve o mesmo em um arquivo chamado CalculosLegais.asmx, na pasta
chap13, dentro da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste
livro, no Captulo 6.
Esta pgina traz informaes genricas sobre o Web Service que est sendo testado. Mas o principal componente
desta pgina, para o nosso exemplo, um link para o mtodo CalculaImposto. D um clique neste link. Observe
541 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
que so exibidos campos para que digitemos os valores para os parmetros do mtodo. Digite os valores indicados
na Figura 13.3.
D um clique no boto Invoke. O mtodo ser executado e os resultados, retornados em uma nova janela, no formato
XML, conforme indicado na Figura 13.4.
www.juliobattisti.com.br 542
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Esta funcionalidade bastante til, pois nos permite testar os mtodos de um Web Service antes de gerar um proxie
(veremos com gerar proxies mais adiante) e utilizar o Web Service em nossas pginas ASP.NET (aprenderemos a
utilizar Web Services em pginas ASP.NET mais adiante).
Na Pgina da Figura 13.3, onde podemos definir valores para os parmetros do mtodo CalculaImposto, temos uma
srie de informaes sobre os formatos possveis para a comunicao com um Web Service. Conforme visto nesta
pgina, temos trs opes possveis:
SOAP: um protocolo baseado em XML, para troca de informaes, mais precisamente: de mensagens, entre
diferentes componentes de software, atravs da Web. A implementao do protocolo SOAP, no Framework
.NET, utiliza o protocolo HTTP como protocolo de transporte. Com isso o SOAP segue o comportamento
padro do HTTP, ou seja, envia uma requisio para o servidor (que no caso do SOAP um Web Service) e
aguarda uma resposta.
A seguir temos o exemplo de uma requisio e resposta utilizando o protocolo SOAP. Observe que os dados esto no
formato XML:
543 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<soap:Envelope xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:soap=http://schemas.xmlsoap.org/
soap/envelope/>
<soap:Body>
<CalculaImpostoResponse xmlns=http://tempuri.org/>
<CalculaImpostoResult>double</CalculaImpostoResult>
</CalculaImpostoResponse>
</soap:Body>
</soap:Envelope>
HTTP GET: Este um dos mtodos mais antigos utilizados para enviar informaes atravs de uma requisio
HTTP. Com este mtodo, as informaes so enviadas na prpria URL, conforme pode ser visto pelo exemplo
de requisio/resposta a seguir:
GET /Chap13/CalculosLegais.asmx/
CalculaImposto?Total=string&Desconto=string&Estado=string HTTP/1.1
Host: localhost
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
Observe que os dados so passados, na forma de string, no prprio endereo. Onde temos Total=string, devemos
substituir string pelo valor realmente definido para o parmetro, como por exemplo:
/Chap13/CalculosLegais.asmx/CalculaImposto?Total=1250&Desconto=25&Estado=RS
HTTP POST: Este mtodo um pouco mais sofisticado do que o mtodo GET. A principal diferena do
mtodo POST que, com este mtodo, as informaes so enviadas na requisio HTTP e no na URL, como
acontecia com o mtodo GET. Observe o exemplo de requisio/resposta a seguir:
POST /Chap13/CalculosLegais.asmx/CalculaImposto HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Total=1250&Desconto=25&Estado=RS
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
www.juliobattisti.com.br 544
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
O nosso objetivo criar um Web Service e poder utilizar as funcionalidades disponibilizadas por ele, em nossas
pginas ASP.NET. Porm ainda temos um passo antes de que o Web Service CalculosLegais esteja disponvel para
uso. O passo que falta a criao de um proxy para o Web Service. No prximo tpico veremos o que um proxy
e como cri-lo.
545 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
4. Distribuio da DLL criada no item anterior, para que ela possa ser acessada atravs da Web.
5. Utilizao do Web Service, nas pginas ASP.NET onde a funcionalidade dele for necessria.
X:\Arquivos de programas\Microsoft.NET\FrameworkSDK\Bin
Onde X: o drive onde est instalado o Framework .NET. Se voc estiver utilizando o Windows 2000 em ingls, ao
invs da pasta Arquivos de Programas, procure na pasta Programs Files.
Parmetro Descrio
/language:language Opcional. Pode ser utilizado para definir uma das linguagens habilitadas ao .NET: CS para
CSharp, VB para VB.NET e JS para JScript.NET. Se no for especificado, ser utilizado CS,
que corresponde ao C#.
/protocol:protocol Opcional. Define o protocolo utilizado para invocar os mtodos do Web Service. O padro
SOAP. Tambm pode ser utilizado: HttpGet e HttpPost.
/namespace:myNameSpace Opcional. Define o namespace do Proxy gerado.
/out:filename Opcional. Define o nome do arquivo que ser gerado, contendo o proxy. O nome padro
baseado no nome do Web Service.
/username:username Opcional. Nome do usurio com o qual fazer a conexo, quando o servidor, onde est o
Web Service, requer autenticao.
/password:password Opcional. Senha para o usurio definido no parmetro anterior.
/domain:domain Opcional. Nome do domnio ao qual pertence o usurio especificado no parmetro /
username:username.<url ou path>: Este o nico parmetro obrigatrio. Define uma
URL ou um caminho para o arquivo que descreve o Web Service, arquivo este que deve
estar no formato WSDL (Web Services Description Language). Se for um arquivo,
especificamos o caminho para um arquivo com a extenso .wsdl. Se utilizarmos uma URL,
a URL deve apontar para o arquivo .asmx ou para uma pgina que retorna uma
descrio do arquivo, no formato WSDL.
www.juliobattisti.com.br 546
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Para Web Services utilizados com o ASP.NET, podemos retornar a descrio do Web Service, simplesmente
concatenando ?WSDL a URL que aponta para o arquivo .asmx. No nosso exemplo, o arquivo .asmx est no
seguinte endereo: http://localhost/Chap13/CalculosLegais.asmx. Para retornar a descrio do mesmo, no formato
WSDL, simplesmente vamos concatenar ?WSDL, no final da URL, quando utilizarmos o comando Wsdl.exe,
para gerar o proxy.
Vamos utilizar o comando Wsdl.exe para gerar o proxy para o Web Service CalculosLegais.asmx. Para isso, abra um
Prompt de Comando (Iniciar -> Programas -> Acessrios -> Prompt de comando). Na janela que surge, digite o
seguinte comando:
Wsdl http://localhost/Chap13/CalculosLegais.asmx?WSDL
e pressione ENTER. Ser gerado um arquivo .cs (lembre que a linguagem padro o CSHarp, para a gerao de
proxies), no mesmo diretrio onde o comando foi executado. No nosso exemplo, indicado na Figura 13.6, foi gerado
o arquivo CalculosLegais.cs, no drive D:
Na Listagem 13.2 temos o cdigo do Arquivo CalculosLegais.cs. Este cdigo gerado automaticamente pelo utilitrio
wsdl.exe e no precisamos alter-lo.
547 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
[System.Web.Services.WebServiceBindingAttribute(Name=CalculosLegaisSoap,
Namespace=http://tempuri.org/)]
public class CalculosLegais : System.Web.Services.Protocols.SoapHttpClientProtocol
[System.Diagnostics.DebuggerStepThroughAttribute()]
public CalculosLegais() {
this.Url = http://localhost/Chap13/CalculosLegais.asmx;
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(http://tempuri.org/
CalculaImposto, Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
www.juliobattisti.com.br 548
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
[System.Diagnostics.DebuggerStepThroughAttribute()]
public System.IAsyncResult BeginCalculaImposto(long Total, int Desconto, string
Estado, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke(CalculaImposto, new object[]
{
Total,
Desconto,
Estado}, callback, asyncState);
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
public System.Double EndCalculaImposto(System.IAsyncResult asyncResult)
{
object[] results = this.EndInvoke(asyncResult);
return ((System.Double)(results[0]));
}
}
O arquivo CalculosLegais.cs compilado e a DLL CalculosLegais.dll gerada, conforme indicado na Figura 13.7.
O parmetro /t:library: Indica que o cdigo-fonte deve ser compilado e o resultado deve ser uma DLL. Outras
opes seriam: /t:winexe, para gerar um programa executvel do Windows ou /t:exe, para gerar um programa
do tipo console.
/out: Define o nome do arquivo gerado pela compilao.
CalculosLegais.cs: O arquivo a ser compilado.
/r: Faz referncia aos metadados dos arquivos .dll especificados.
549 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
D:\InetPub\wwwroot\Chap13.
Vou criar a pasta bin, dentro da pasta Chap13 e depois copiar a DLL CalculosLegais.dll para a pasta bin, conforme
indicado na Figura 13.8:
www.juliobattisti.com.br 550
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
IMPORTANTE: Alm de disponibilizar a DLL, importante que a pasta onde esta a pgina ASP.NET que utilizar o Web Service
seja configurada como um aplicativo. No nosso exemplo, criaremos uma pgina na pasta D:\InetPub\wwwroot\Chap13, porm
esta pasta ainda no est configurada como um Aplicativo; Vamos configurar a pasta Chap13 como um aplicativo, para isso
siga os seguintes passos:
1. Abra o gerenciador do IIS (Iniciar -> Programas -> Ferramentas Administrativas Gerenciador de servios de
Internet).
2. Na janela que surge d um clique no sinal de mais ao lado do nome do servidor que voc est utilizando. No meu
exemplo, o nome do equipamento servidor.
3. Nas opes que surgem d um clique no sinal de mais ao lado da opo Site da Web padro, para expandi-la.
4. Nas pastas que surgem, clique com o boto direito na pasta Chap13 e, no menu de opes, clique em Propriedades.
5. Surge a janela Propriedades de Chap13. Na guia Pasta, temos as opes para tornar Chap13 uma aplicao Web.
6. D um clique no boto Criar. Certifique-se de que as opes da guia Pasta estejam configuradas conforme indicado
na Figura 13.9.
7. De volta ao Gerenciador de servios de Internet, observe que o cone de Chap13 foi alterado. O novo cone indica
que Chap13 uma aplicao Web, conforme indicado na Figura 13.10.
551 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Exemplo: Vamos criar uma pgina ASP.NET onde temos trs controles:
Um controle DropDownList, onde so exibidas as opes: RS, SC, PR, SP, RJ e Outros.
Um controle TextBox, onde o usurio digita o valor da compra.
Um controle TextBox, onde o usurio digita o valor do desconto.
Um controle Label, onde exibido o valor final, calculado pelo mtodo CalculaImposto, do Web Service
CalculosLegais.
www.juliobattisti.com.br 552
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
string txtEstado;
string txtValor;
string txtDesconto;
txtEstado=Estado.SelectedItem.Value;
txtValor=Valor.Text;
txtDesconto=Desconto.Text;
double txtValorFinal;
txtValorFinal=ChamaCalculo.CalculaImposto(Convert.ToInt32(txtValor),
Convert.ToInt32(txtDesconto), txtEstado);
<body>
<asp:RequiredFieldValidator
id=Requer_Valor
ControlToValidate=Valor
Type=String
ErrorMessage=*
Text=DIGITE UM VALOR PARA O PREO.
ForeColor=Red
runat=server
553 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
/>
<asp:RequiredFieldValidator
id=Requer_Desconto
ControlToValidate=Desconto
Type=String
ErrorMessage=*
Text=DIGITE UM VALOR PARA O DESCONTO.
ForeColor=Red
runat=server
/>
<table>
<tr>
<td><B>Selecione o Estado:</B> </td>
<td>
<asp:DropDownList id=Estado runat=server>
<asp:ListItem>RS</asp:ListItem>
<asp:ListItem>SC</asp:ListItem>
<asp:ListItem>PR</asp:ListItem>
<asp:ListItem>SP</asp:ListItem>
<asp:ListItem>RJ</asp:ListItem>
<asp:ListItem>Outros</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<td><B>Preo:</B> </td>
<td>
<asp:TextBox runat=server
id=Valor
Text=
Font_Face=Arial
Font_Size=3"
BackColor=Cyan
ForeColor=Blue
TextMode=SingleLine
www.juliobattisti.com.br 554
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Columns=40"
/>
</td>
</tr>
<tr>
<td><B>Desconto:</B> </td>
<td>
<asp:TextBox runat=server
id=Desconto
Text=
Font_Face=Arial
Font_Size=3"
BackColor=Cyan
ForeColor=Blue
TextMode=SingleLine
Columns=40"
/>
</td>
</tr>
<tr>
<td><B>Valor Final:</B></td>
<td><textarea
id=Exibe
cols=40"
rows=5"
runat=server
/>
</td>
</tr>
<tr>
<td><B>Clique no boto></B></td>
<td><input type=submit
value=Calcular
555 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
OnServerClick=Enviar_Click
runat=server>
</td>
</tr>
</table>
</form>
</body>
</html>
Digite o cdigo da Listagem 13.1 e salve o mesmo em um arquivo chamado chap13ex1.aspx, na pasta chap13, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Para construo do formulrio, alm dos controles para entrada de informaes, utilizamos dois controles de
validao, para garantir que os campos Preo e Desconto sejam preenchidos.
Utilizamos o evento Click do boto, para criar a lgica da pgina. Em resposta ao evento Click, definimos o
procedimento Enviar_Click. Neste procedimento ns seguimos as seguintes etapas:
2. Utilizamos algumas variveis do tipo String, para armazenar os valores que o usurio inseriu no formulrio:
string txtEstado;
string txtValor;
string txtDesconto;
txtEstado=Estado.SelectedItem.Value;
txtValor=Valor.Text;
txtDesconto=Desconto.Text;
www.juliobattisti.com.br 556
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
3. Declaramos uma varivel do tipo double, que ir conter o valor retornado pelo mtodo CalculaImposto, do
WebService CalculosLegais.
double txtValorFinal;
4. Como a varivel ChamaCalculo do tipo CalculosLegais, esta varivel herda o mtodo CalculaImposto do Web
Service CalculosLegais. Chamamos este mtodo para fazer o clculo do preo final, com base no Estado
selecionado, no Preo informado e no percentual de desconto. Estes valores so passados como parmetros para
o mtodo CalculaImposto. Observe que temos que fazer as devidas converses, pois caso contrrio obteremos um
erro. Por exemplo, o parmetro txtValor do tipo String, porm o mtodo CalculaImposto espera receber um
parmetro do tipo int. Utilizamos Convert.Int32 para fazer a converso:
txtValorFinal = ChamaCalculo.CalculaImposto(Convert.ToInt32(txtValor),
Convert.ToInt32(txtDesconto), txtEstado);
5. Em seguida montamos uma string que exibe os valores digitados pelo usurio e o valor calculado pelo mtodo
CalculaImposto. Esta string atribuda propriedade Text, do controle Exibe:
Exibe.Value = Preo Inicial: + txtValor +\n+
Estado : + txtEstado + \n+
Desconto : + txtDesconto + \n+
********************************** + \n+
PREO FINAL : + Convert.ToString(txtValorFinal);
Observe que agora podemos reaproveitar a funcionalidade do mtodo CalculaImposto em qualquer pgina ASP.NET
da aplicao Chap13.
557 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Apenas para recapitular, eis os passos necessrios para a criao e utilizao de um Web Service, utilizando C# e
ASP.NET:
Com o Visual Studio .NET podemos criar pginas ASP.NET, simplesmente arrastando
elementos em uma interface grfica, configurando propriedades para estes elementos e IMPORTANTE: Para que
definindo cdigo para ser executado em resposta a eventos disparados pelos elementos voc possa acompanhar os
da pgina. exemplos deste tpico, faz-
se necessrio que voc
Inicialmente veremos quais as principais novidades do Visual Studio .NET e daremos tenha o Visual Studio .NET
uma olhada rpida no Ambiente de Desenvolvimento. Em seguida construiremos alguns instalado. A instalao do
exemplos, utilizando instrues detalhadas, passo a passo. Visual Studio .NET bastante
simples, sendo idntica
instalao de qualquer
O que h de Novo no Visual Studio .NET aplicativo Windows. Embora
Em primeiro lugar uma interface nica; ou seja, quer estejamos criando uma aplicao simples, o processo todo
Win32 utilizando VB.NET ou uma aplicao Web utilizando C# e ASP.NET, o ambiente demora cerca de duas horas.
RAD (Rapid Application Development) o mesmo. Nas verses anteriores do Visual Voc pode obter uma verso
Studio, cada linguagem tinha o seu prprio ambiente de desenvolvimento, e agora com de avaliao do Visual
o Visual Studio .NET todas as linguagens e projetos compartilham um ambiente comum, Studio .NET, no seguinte
apenas com menus e barras de ferramentas que se adaptam de acordo com projeto e endereo: http://
elemento que est sendo editado. msdn.microsoft.com/
vstudio/nextgen/beta.asp
www.juliobattisti.com.br 558
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Start Page: Ao abrirmos o Visual Studio .NET carregada uma pgina chamada de Start Page. Esta pgina permite
que o usurio configure o ambiente de desenvolvimento de acordo com as suas preferncias. Por exemplo, pode ser
que voc esteja acostumado com a interface do Visual Basic 6.0 e prefira ter os menus, barras de ferramentas e teclas
de atalho configuradas de uma maneira semelhante ao que era no VB 6. Para solicitar tal configurao, na pgina
inicial (Start Page), voc clica na opo My Profile e seleciona as opes indicadas na Figura 13.12.
Suporte a Tecnologia Windows Instaler, edio de cdigo HTML e CSS (Cascadin Style Sheets), diretamente no ambiente
grfico, edio de XML e visualizao do resultado das pginas tambm diretamente no ambiente grfico, etc.
So inmeras as novidades. O prprio Ambiente do Visual Studio .NET serve de assunto para um livro inteiro. Para maiores
informaes sobre as novidades consulte o seguinte endereo: http://msdn.microsoft.com/vstudio/nextgen/overview.asp
Agora vamos conhecer um pouco do novo ambiente, atravs da criao de alguns exemplos.
Neste exemplo vamos criar uma aplicao Web, baseada em ASP.NET e C#. Para a criao desta aplicao precisamos
de que o IIS (Internet Information Services) e o Visual Studio .NET estejam instalados e funcionando. Estarei utilizando
um servidor com os seguintes dados:
559 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Sempre que for feita referncia a uma destas configuraes, substitua pelas configuraes que voc estiver utilizando,
caso sejam diferentes das aqui apresentadas.
Criaremos uma aplicao Web chamada: AppWebChap13. Dentro destas aplicaes Web, criaremos algumas pginas
ASP.NET utilizando o Visual Studio .NET. Para nos conectarmos com as pginas da aplicao AppWebChap13,
utilizaremos o seguinte endereo: http://servidor/AppWebChap13/nome_da_pgina.aspx
1. Abra o Visual Studio .NET: Iniciar -> Programas -> Microsoft Visual Studio .NET 7.0 -> Microsoft Visual Studio
.NET 7.0 ( duas vezes mesmo, uma a pasta de opes e outra o atalho para o Visual Studio).
2. O Visual Studio carregado e a pgina Start Page exibida, conforme indicado na Figura 13.13.
3. Para criar uma nova aplicao Web, devemos criar um novo Projeto. Isto pode ser feito clicando na opo New
Project da pgina de abertura ou selecionando o comando File -> New -> Project ou pressionando Ctrl+Shift+N.
4. D um clique na opo New Project. Ser aberta a janela New Project, onde podemos selecionar o tipo de
aplicao que ser criada.
5. Em Project Types, d um clique em Visual C# Projects.
6. Nas opes que so exibidas, no painel da direita, d um clique em ASP.NET Web Application.
7. No campo Name, digite: AppWebChap13.
8. No campo Location, digite: http://SERVIDOR.
9. A janela New Project deve estar com as configuraes indicadas na Figura 13.14.
www.juliobattisti.com.br 560
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
12. O projeto criado e, por padro, criada, dentre outros elementos, uma pgina ASP.NET chamada WebForm1.aspx.
Este formulrio pode ser acessado atravs do endereo: http://servidor/AppWebChap13/WebForm1.aspx.
Toda aplicao Web tem uma pgina que chamada de pgina inicial do projeto. o mesmo conceito de pgina
padro de um diretrio virtual, ou seja, se simplesmente digitarmos o endereo: http://servidor/AppWebChap13, ser
carregada a pgina inicial do projeto, no nosso exemplo: WebForm1.aspx.
13. Alm da pgina inicial, o Visual Studio .NET cria uma srie de outros arquivos que so utilizados para a
configurao da aplicao Web. Estes arquivos podem ser gerenciados atravs da janela Solution Explorer,
destacada na Figura 13.16.
561 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
14. Outro elemento importante do ambiente de desenvolvimento a Barra de Ferramentas Toolbox. Quando voc
coloca o mouse sobre esta opo, exibida uma barra com os diversos elementos que podemos colocar em nossas
pginas ASP.NET, conforme destacado na Figura 13.17.
www.juliobattisti.com.br 562
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
15. Na Toolbox temos os diversos controles que podem ser colocados em uma pgina ASP.NET. So os mesmos
controles que aprendemos a utilizar nos captulos 7, 8 e 9. A diferena que, com o Visual Studio .NET, podemos
criar a pgina, utilizando um ambiente grfico, onde simplesmente arrastamos os controles, configuramos as
propriedades destes e criamos cdigo que executa em resposta aos eventos gerados na pgina.
16. Vamos adicionar um controle do tipo Label, onde colocaremos o seguinte texto: Primeira pgina criada como o
Visual Studio. Em seguida vamos salvar a pgina WebForm1.aspx e enviar as alteraes para o servidor, para que
a pgina possa ser testada.
17. Aponte o mouse para Toolbox. Nas opes que surgem, d um clique no controle Label e arraste-o para a pgina
WebForm1.aspx. Utilize o mouse para aumentar o tamanho do controle.
18. Para alterar o texto do label, utilizamos a janela Properties que, por padro, encontra-se no lado direito da tela,
abaixo da janela Solution Explorer.
19. Certifique-se de que o controle Label esteja selecionado e localize a propriedade Text, na janela de propriedades.
Altere o valor desta propriedade para Primeira pgina criada com o Visual Studio.
20. Observe que temos diversas propriedades que podem ser alteradas, como por exemplo a cor de segundo plano
(BackColor), a cor das bordas (BorderColor), etc. medida que vamos alterando estas propriedades, o Visual
Studio vai, automaticamente, gerando o cdigo da pgina ASP.NET para refletir as mudanas.
21. Na propriedade BackColor, selecione um cinza claro. A sua janela deve estar semelhante indicada na Figura
13.18.
563 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br 564
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
30. Observe que o controle Label definido com a utilizao de um Web Server Control do tipo asp.Label. Este
cdigo gerado, automaticamente, pelo Visual Studio, conforme indicado a seguir:
<asp:Label id=Label1
style=Z-INDEX: 101; LEFT: 80px; POSITION: absolute; TOP: 46px
runat=server
Width=325px
Height=38px
BackColor=#E0E0E0">
Primeira pgina criada com o Visual Studio
</asp:Label>
31. Agora vamos ver uma das pequenas maravilhas do Visual Studio.
32. Clique no controle Label, aps a opo runat=server. Vamos definir que o texto deve ser exibido em negrito.
Para isso voc lembra que existe uma propriedade Font..., alguma coisa.
33. Experimente, simplesmente teclar a barra de espaos e observe: Ser exibida uma lista com todas as propriedades,
mtodos e eventos disponveis para o controle do tipo Label, conforme indicado na Figura 13.21.
34. Na lista que exibida selecione a opo Font-Bold e tecle o sinal de igual (=). Observe outra maravilha: O Visual
Studio mostra a lista de valores possveis para a propriedade selecionada, no nosso exemplo: True ou False. Basta
565 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
selecionar True e pronto, est habilitado Negrito para o nosso controle. Com este recurso do Visual Studio fica
muito mais fcil localizar as propriedades, mtodos e eventos de um determinado elemento. Quando selecionamos
um mtodo, so destacados os parmetros e os tipos de cada parmetro. Este recurso de grande valor, pois, alm
de localizar rapidamente a propriedade ou mtodo desejado, reduz drasticamente a entrada de valores incompatveis
para a propriedade ou para os parmetros de um mtodo.
35. Vamos salvar novamente a nossa aplicao: File -> Save All.
36 Vamos atualizar a verso da aplicao no Servidor: Build -> Build.
37. Agora s test-la novamente, utilizando o endereo: http://servidor/AppWebChap13/WebForm1.aspx
38 Voc obter os resultados indicados na Figura 13.22.
39. Mantenha o Visual Studio .NET aberto.
Agora que j conhecemos os aspectos bsicos da criao de uma aplicao Web, com o Visual Studio, vamos criar
mais alguns exemplos, para aprender a utilizar melhor a interface grfica.
Neste exemplo vamos criar uma nova pgina ASP.NET, na aplicao AppWebChap13. Vamos chamar esta pgina de
Form2.aspx. Neste formulrio colocaremos um controle do tipo DropDownList e dois controles do tipo TextBox, para
o usurio digitar informaes. Tambm colocaremos um boto Enviar. Quando o usurio clicar no boto Enviar,
utilizaremos o evento OnClick do boto, para exibir os valores digitados pelo usurio em um controle TextArea.
2. Na janela Add New Item que aberta, seleciona a opo Web Form. No campo Name, digite Form2.aspx, conforme
indicado na Figura 13.23.
www.juliobattisti.com.br 566
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
3. D um clique no boto Open. A pgina Form2.aspx ser criada e exibida no Visual Studio.
4. Agora vamos arrastar os seguintes controles:
Um controle do tipo DropDownList.
Trs controles do tipo TextBox.
Quatro controles do tipo Label, um ao lado de cada um dos controles anteriores, para identificar o contedo de
cada controle.
Um controle do tipo Button.
5. Neste momento os controles esto desalinhados. Para alinhar os controles facilmente, voc pode selecionar os
controles a serem alinhados e depois utilizar o comando Format -> Align. Para selecionar vrios controles voc
pode segurar a tecla Shift e ir clicando nos controles a serem selecionados.
6. Agora que alinhamos os controles vamos configurar as diversas propriedades de cada controle.
7. Configure a propriedade Text, para os controles Label e para o controle Button, com os valores indicados na
Figura 13.24.
8. Agora vamos configurar a propriedade Id para o controle DropDownList, para os controles TextBox e para o
controle Button, conforme indicado a seguir:
DropDownList -> ID= SelecionaPais
Primeiro TextBox -> ID= Nome
Segundo TextBox -> ID= Email
Terceiro TextBox -> ID= Exibe
Controle Button - > ID= Enviar
567 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
11. Para adicionar itens em um controle DropDownList utilizamos a propriedade Items, do controle SelecionaPais.
D um clique neste controle para selecion-lo. Na lista de propriedades, na janela de propriedades, localize a
propriedade Items. Ao clicar nesta propriedade ser habilitado um boto com reticncias (...), ao lado da propriedade.
D um clique no boto com as reticncias, e ser exibida a janela ListItem Collection Editor. Para adicionar um
item lista, clique no boto Add. Na coluna da direita, sero exibidos os campos para definio do item. Para o
primeiro item, defina as propriedades conforme indicado na Figura 13.25.
12. Utilize o boto Add para adicionar os demais itens. No final a sua janela deve estar conforme indicado na Figura
13.26.
13. D um clique no boto OK e, pronto, a lista ser construda.
www.juliobattisti.com.br 568
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
14. Agora precisamos criar o cdigo que executa em resposta ao evento OnClick do boto de comando. Para definir
este procedimento, basta dar um clique duplo no boto Enviar Dados. Automaticamente aberta a janela de
cdigo, com a estrutura do procedimento j definida. Tudo o que temos que fazer digitar o seguinte cdigo:
string Dados;
Dados= Pas: + SelecionaPais.SelectedItem.Value + \n+
Nome: + Nome.Text+ \n+
e-mail: + Email.Text ;
Exibe.Text = Dados;
569 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
15. Agora s falta configurar a propriedade TextMode, do controle Exibe. Altere de SingleLine para MultiLine. O
formulrio Form2.aspx deve estar conforme indicado na Figura 13.27.
www.juliobattisti.com.br 570
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Neste exemplo vamos criar uma nova pgina ASP.NET, na aplicao AppWebChap13. Vamos chamar esta pgina de
dados.aspx. Vamos utilizar um assistente do Visual Studio, assistente este que criar a pgina automaticamente.
A pgina dados.aspx, que iremos construir, exibir dados da tabela Customers (Clientes) e da tabela Orders (Pedidos),
do Banco de dados NorthWind, do SQL Server 2000. No equipamento que estou utilizando para este exemplo, tenho
instalada a seguinte instncia do SQL Server 2000: SERVIDOR\INSTANCIA1. Se voc estiver utilizando uma instalao
do SQL Server 2000, com um nome diferente, sempre que houver referncia a SERVIDOR\INSTANCIA1, substitua
pelo nome que voc est utilizando.
1. Para criar a pgina dados.aspx, estando com a aplicao AppWebChap13 aberta, execute o seguinte comando:
File Add New Item.
2. Na janela Add New Item que aberta, selecione a opo Data Form Wizard. No campo Name, digite data.aspx,
conforme indicado na Figura 13.29.
3. D um clique no boto Open.
4. A primeira tela do assistente Data Form Wizard ser exibida.
5. D um clique no boto Next, seguindo para a prxima etapa do assistente.
6. Nesta etapa temos a opo de criar um novo objeto DataSet.
7. D um clique na opo Create a new dataset named: e no campo nome digite: ListaDePedidos, conforme
indicado na Figura 13.30.
571 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br 572
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
11. D um clique na guia Provider e certifique-se de que a opo Microsoft OLE DB Provider for SQL Server
esteja selecionada, conforme indicado na Figura 13.31.
12. D um clique na guia Connection.
13. Na lista Select or enter a server name, selecione SERVIDOR\INSTANCIA1 (ou o nome do servidor que voc
estiver utilizando).
14. No item 2, da guia Connection, defina as informaes de conexo. No meu exemplo estou utilizando a opo
Use a specific user name and password. Para usurio estou utilizando as, com senha em branco. Marquei as
opes Blank Password e Allow saving password. No item 3, selecionamos o banco de dados com o qual
queremos nos conectar. Para o nosso exemplo, selecione NorthWind. A guia Connection deve estar com as
configuraes indicadas na Figura 13.32.
15. D um clique no boto OK. Voc estar de volta ao assistente Data Form Wizard.
16. D um clique no boto Next, seguindo para a prxima etapa do assistente.
17. Nesta etapa definimos de quais tabelas queremos acessar informaes. Clique na tabela Customers e d um
clique no boto (>) para adicionar a tabela coluna da direita. Repita a operao para a tabela Orders. Sua tela
deve estar conforme indicado na Figura 13.33.
18. D um clique no boto Next, seguindo para a prxima etapa do assistente.
573 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
19. Nesta etapa, que s existe quando temos duas ou mais tabelas, podemos definir um relacionamento entre as
tabelas. Para o nosso exemplo, vamos definir um relacionamento do tipo Um para Vrios, entre a tabela Cus-
tomers (lado um) e a tabela Orders (lado vrios). O relacionamento ser estabelecido atravs do campo comum s
duas tabelas: CustomerID. Na prtica este relacionamento est definindo que cada cliente cadastrado uma nica
vez e pode fazer vrios pedidos. Para maiores informaes sobre relacionamentos e o modelo de dados relacionais,
consulte o Anexo II.
20. No campo Name digite RelClientesPedidos.
21. Na lista Parent table, selecione Customers.
22. Na lista Child table, selecione Orders.
23. Na lista Keys, selecione CustomerID, para as duas listas da primeira linha. Depois d um clique no boto (>), para
criar o relacionamento. Observe que o relacionamento RelClientesPedidos exibido na coluna Relations. Clique
neste relacionamento e as propriedades definidas para o relacionamento RelClientesPedidos sero exibidas,
conforme indicado na Figura 13.34.
www.juliobattisti.com.br 574
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
575 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
25. Nesta etapa voc define quais campos de cada tabela devem ser exibidos na pgina. Deixe marcados apenas os
seguintes campos:
Tabela Customer: CompanyName
Phone
28. Observe, na parte de baixo da pgina, que foram criados diversos objetos que do suporte a conexo:
DataSet objListaDePedidos
OleDbConnection oleDbConnection1
OleDbDataAdapter oleDbDataAdapter1
OleDbDataAdapter oleDbDataAdapter2
www.juliobattisti.com.br 576
CAPTULO 13: WEB SERVICES E VISUAL STUDIO .NET
Figura 13.36: Pgina data.aspx criada com o assistente Web Data Wizard.
Observe que com a ajuda do assistente criamos rapidamente um formulrio que exibe dados de duas tabelas diferentes,
do Banco de dados NorthWind, do SQL Server 2000. Evidentemente que o assistente no a soluo para todos os
casos. Eu aconselho que voc utilize o assistente para criar as funcionalidades bsicas da pgina e depois faa as
alteraes necessrias.
Conforme descrito no incio deste tpico, o Visual Studio .NET assunto para um livro inteiro. Para o escopo proposto,
encerramos o nosso estudo do Visual Studio por aqui.
Concluso
Neste captulo aprendemos sobre o conceito de Web Services como uma forma de criar aplicaes distribudas, onde
as funcionalidades da aplicao podem ser fornecidas por Web Services localizados em diferentes servidores, atravs
da Internet.
577 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Em seguida aprendemos a criar e utilizar um Web Service em uma pgina ASP.NET. Para isso, seguimos as seguintes etapas:
Em seguida apresentamos o novo ambiente de desenvolvimento para o ambiente .NET: Visual Studio .NET. Falamos
sobre as principais caractersticas do novo ambiente e aprendemos, passo a passo, a criar algumas pginas ASP.NET,
utilizando o ambiente grfico do Visual Studio .NET.
www.juliobattisti.com.br 578
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Introduo CAPTULO
Quando se fala de Internet nos dias de hoje, o assunto mais tratado, sem nenhuma
dvida, sobre Segurana. Muitos relatos, alguns verdadeiros e outros mais
14
fantasiosos, sobre invases mirabolantes, roubo de nmero de cartes de crditos,
acesso a informaes sigilosas de rgos governamentais e assim por diante.
Por todos estes motivos que a questo de segurana fundamental e deveria ser
prioritria quando tratamos de aplicaes Web. Outro fato importante a ser
mencionado que a maioria dos ataques, ao contrrio do que muitos pensam,
originado dentro da Intranet da prpria empresa. Pode ser um funcionrio
descontente ou desonesto, ou um usurio com permisses de acesso indevidas,
que causa algum prejuzo por impercia tcnica. O fato que a questo de segurana
no deve ser tratada apenas como uma questo de proteo contra as foras do
mal que vm da Internet. O fato que precisamos definir uma poltica de
segurana que permita que todos possam realizar o seu trabalho, porm com os
nveis de permisso adequados.
579 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Outro erro bastante comum achar que a questo de segurana responsabilidade somente da equipe de desenvolvimento
ou somente do Administrador da Rede. Na verdade o item segurana bastante complexo e exige que o pessoal de
desenvolvimento trabalhe em sintonia com a Administrao da rede e com todos na empresa.
Conforme veremos neste captulo, existem aspectos de segurana que so de responsabilidade do desenvolvimento e
outros que so de responsabilidade da Administrao de rede. Na verdade o que se faz criar vrias barreiras para que
o hacker no tenha sucesso em sua tentativa de invaso. Algumas destas barreiras so criadas na prpria rede da
empresa e outras em nvel de aplicao Web.
Este aspectos tm a ver com o ambiente Sistema Operacional (Windows 2000, Windows XP, Windows 2002) mais
Servidor Web (IIS 5.0), onde rodam as aplicaes Web criadas com ASP.NET. Estes aspectos so os mesmos, quer
estejamos trabalhando com ASP ou ASP.NET.
Na segunda parte do captulo, estudaremos alguns aspectos de segurana que so especficos NOTA: Para acompanhar
do Framework .NET e do ASP.NET. Conforme veremos existe uma srie de classes que este captulo o usurio
nos permitem fazer configuraes de segurana para aplicaes Web criadas com ASP.NET. deve conhecer alguns
aspectos bsicos do
De maneira alguma temos a pretenso de que este captulo seja um guia completo para Windows 2000 Server,
a segurana na Internet e para o Comrcio Eletrnico. O objetivo fornecer as tais como:
informaes bsicas para que o usurio possa tomar as medidas mnimas necessrias Permisses NTFS.
para garantir um nvel aceitvel de segurana para seu site e suas aplicaes Web.
Contas de Usurios e
Quando trabalhamos com tecnologias da Microsoft como ADO>NET, IIS e Windows Grupos de Usurios.
2000 Server, o endereo a seguir de consulta obrigatria para assuntos relacionados Utilizao do MMC
segurana de tecnologias Microsoft: http://www.microsoft.com/security. Microsoft Management
Console e de Snap-in.
Neste site so divulgados boletins de segurana sobre os produtos Microsoft. Sempre
que algum novo problema descoberto, so divulgadas informaes sobre o problema,
bem como a maneira de corrigi-los. Tambm so disponibilizados arquivos para
Download. Estes arquivos normalmente contm correes (Hot-fix) que devem ser DICA: Para informaes
aplicadas para corrigir problemas de segurana. sobre estes itens, consulte
o livro Srie Curso Bsico
& Rpido Microsoft
Windows 2000 Server de
Autenticao de Usurios com o IIS 5.0 minha autoria, publicado
Quando um usurio tenta acessar uma pgina, a primeira coisa que o servidor precisa pela editora Axcel Books.
determinar a identidade deste usurio, isto , o IIS precisa conhecer quem est
www.juliobattisti.com.br 580
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
tentando acessar a pgina. Uma das maneiras de saber quem o usurio que est acessando o site atravs da
utilizao de um Username e senha. Porm no seria nada simptico apresentar uma tela de logon para o usurio
na primeira vez que ele est acessando o site. At mesmo nas prximas tentativas de acesso, a necessidade de logon
pode acabar afastando o internauta.
Atravs da autenticao do usurio, podem ser definidos os nveis de acesso a informao que o mesmo ter, bem
como podem ser feitos registros das aes realizadas pelo usurio, mediante a gravao de logs de acesso. Existem
diversos tipos de autenticao possveis com o IIS. Passaremos a estud-los individualmente. Os tipos de autenticao
que estudaremos so os seguintes:
Autenticao annima.
Autenticao bsica.
Autenticao avanada.
Autenticao integrada ao Windows 2000.
Autenticao com certificados.
Autenticao Annima
Um tipo de autenticao bastante comum o que permite o acesso annimo. O IIS permite que seja configurado um
tipo de acesso chamado Acesso annimo, no qual no necessrio que o usurio fornea um Username e senha para
ter acesso ao site. Este acesso annimo est ligado a uma nica Conta de usurio do Windows 2000 Server. Todo
usurio que acessar um site configurado para permitir Acesso annimo, ser identificado como se estivesse autenticado
usando a Conta de usurio configurada para o Acesso annimo.
A conta de usurio para Acesso annimo automaticamente criada quando instalamos o Internet Information Serv-
ices 5.0. Por padro esta conta possui o seguinte nome:
IUSR_NOME_DO_COMPUTADOR
Por exemplo, ao instalarmos o IIS em um servidor chamado SERVIDOR, ser criada a seguinte conta para permitir o
Acesso annimo:
IUSR_SERVIDOR
A autenticao annima fornece aos usurios acesso a reas pblicas do seu site, sem solicitar um nome de usurio ou
uma senha.
Por padro, a conta IUSR_NOME_DO_COMPUTADOR includa no grupo de usurios Convidados. Esse grupo
tem restries de segurana, impostas pelas permisses do NTFS (sistema de arquivos do Windows 2000 que possui
recursos de segurana mais avanados do que o sistema FAT ou FAT32), que designam o nvel de acesso e o tipo de
contedo disponvel para os usurios pblicos. Com isso o usurio possui limitaes sobre os recursos que ele pode
acessar no servidor, sendo que estas limitaes j atuam como um nvel inicial de segurana.
581 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Se existem vrios sites no seu servidor ou reas no seu site que exigem privilgios de acesso diferentes, voc pode
criar vrias contas annimas, uma para cada rea do site, diretrio ou arquivo.
Por exemplo, voc pode querer registrar o nvel de acesso a diferentes reas do seu site, utilizando para isso diferentes
contas para o acesso annimo a cada uma destas reas.
www.juliobattisti.com.br 582
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
IMPORTANTE:
Se a autenticao annima for ativada, o IIS tentar sempre a autenticao annima, usando-a primeiro,
mesmo se outros mtodos forem ativados.
Em alguns casos, o navegador solicitar ao usurio um nome de usurio e uma senha. Voc pode alterar a
conta usada para a autenticao annima no Snap-in do IIS, no nvel de servio do servidor Web ou para
diretrios virtuais ou arquivos individuais.
A conta annima deve ter o seguinte direito de usurio: Efetuar logon localmente. Se a conta no tiver a
permisso Efetuar logon localmente, o IIS no poder atender qualquer solicitao annima. Ao
instalarmos o IIS, automaticamente, a permisso Efetuar logon localmente concedida conta
IUSR_NOME_DO_COMPUTADOR.
Para definir qual conta ser utilizada para o acesso annimo siga os seguintes passos:
1. Faa o logon no Windows 2000 Server, com permisses de administrador. DICA: Para informaes
2. Abra o Gerenciador do Internet Services: Iniciar -> Programas -> Ferramentas mais detalhadas sobre
administrativas -> Gerenciador do Internet Services. estes itens, consulte o
3. Surge a janela indicada na Figura 14.2. livro Srie Curso Bsico
4. Esta a janela do console de administrao do IIS 5.0. & Rpido Microsoft
Windows 2000 Server de
5. D um clique duplo no nome do computador. No nosso exemplo o nome servidor
minha autoria, publicado
(na prtica aparece um asterisco ao lado do nome do servidor).
pela editora Axcel Books.
6. Surgem as opes indicadas na Figura 14.3.
7. Podemos configurar o Acesso annimo para todas as aplicaes Web contidas no Servidor ou para cada aplicao
individualmente. Inclusive podemos configurar diferentes contas do Windows 2000 Server, para serem utilizadas
para o Acesso annimo em diferentes reas do site. Podemos configurar uma conta em nvel do Servidor Web, de
cada aplicao e at mesmo para uma pasta dentro de uma aplicao. Com isso poderamos ter diferentes pastas,
583 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
dentro de uma mesma aplicao Web (que para o IIS representada por uma pasta virtual, com diferentes contas
para acesso annimo).
8. No nosso exemplo, iremos configurar uma nica conta para Acesso annimo para todo o servidor. O procedimento
o mesmo quer seja para o site como um todo, para uma aplicao Web do site ou para uma pasta dentro da
aplicao Web.
9. Clique com o boto direito do mouse sobre a opo Site da Web padro (ou na opo correspondente, caso voc
tenha alterado este nome). No menu de opes que surge d um clique em Propriedades.
10. Ser exibida a janela Propriedades de Site Web padro, conforme indicado na Figura 14.4.
11. D um clique na guia Segurana de pasta. Sero exibidas as opes indicadas na Figura 14.5.
12. A primeira opo desta guia Controle de acesso annimo e autenticao. D um clique no boto Editar, ao lado
desta opo. Surge a janela Mtodos de autenticao, indicada na Figura 14.6.
www.juliobattisti.com.br 584
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
585 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
13. A primeira opo desta janela Acesso annimo. Para que o acesso annimo seja permitido, esta opo deve estar
marcada.
14. Para definir a conta que ser utilizada para o acesso annimo, d um clique no boto Editar, ao lado da opo
Acesso annimo.
15. Ser exibida a janela Conta de usurio annimo, conforme indicado na Figura 14.7.
16. Nesta janela voc pode definir a conta que ser utilizada para o acesso annimo. Observe que por padro
definida a conta IUSR_NOME_DO_COMPUTADOR. No exemplo da Figura 9.7, aparece IUSR_SERVIDOR,
pois o computador que estou utilizando para escrever este livro tem o nome de SERVIDOR, conforme j descrito
em outras oportunidades.
17. Caso voc queira utilizar outra conta e no lembre o nome da mesma, s clicar no boto Procurar, e ser exibida
uma lista de usurios cadastrados no Windows 2000.
www.juliobattisti.com.br 586
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Porm mais adiante, por algum motivo ou por solicitao do Administrador do IIS, a senha para esta conta alterada
no Windows 2000. Como a sincronizao no est ativada, o IIS continua tentando usar a senha antiga. Como as duas
senhas esto diferentes, o acesso negado e o usurio recebe uma mensagem de acesso negado ao tentar acessar o site.
19. Aps ter configurado as informaes para a conta de acesso annimo, d um clique
em OK. IMPORTANTE: A
20. Voc estar de volta janela Mtodos de autenticao; d um clique em OK para sincronizao de senhas
fech-la. deve ser usada somente
com contas de usurio
21. Voc estar de volta janela Propriedades do site da Web padro; d um clique em
annimas definidas no
OK para fech-la.
computador local e no
22. Voc estar de volta ao Gerenciador do Internet Services. Feche-o.
com contas annimas de
computadores remotos.
Verificando as Configuraes da Conta Para
Acesso Annimo no Windows 2000 Server
Conforme descrito anteriormente, a conta IUSR_NOME_DO_COMPUTADOR deve ter algumas configuraes
especiais (relativas a permisses e direitos), definidas no Windows 2000 Server. Agora veremos como conferir se as
configuraes para esta conta esto corretas.
NOTA: Se o servidor que voc estiver utilizando for um controlador de domnio, voc deve abrir o Console para gerenciamento
do Active Directory. As opes que surgem podem ser um pouco diferentes das apresentadas neste passo-a-passo.
587 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
7. D um clique na opo Usurios. Surge, no painel da direita, uma listagem com o nome de todos os usurios,
conforme indicado na Figura 14.10.
www.juliobattisti.com.br 588
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
589 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
9. Para saber a quais grupos o usurio pertence, d um clique na guia Participante de (ou Membro de, se for um
Controlador de Domnio). Podemos conferir que o usurio IUSR_SERVIDOR somente pertence ao grupo
Convidados. Se estivssemos em um Servidor que atua como Controlador de domnio, teramos o grupo Convidados
do domnio.
10. Quando o IIS instalado, a conta IUSR_SERVIDOR criada e automaticamente
adicionada ao grupo Convidados. DICA: Para informaes
11. Muito cuidado ao adicionar a conta IUSR_SERVIDOR a outros grupos. Quando mais detalhadas sobre
uma conta de usurio adicionada a um grupo, ele herda as permisses atribudas Controladores de domnio
ao grupo e com isso passa a ter acesso aos recursos a que o grupo tem acesso. A e Active Directory,
maior insanidade que o administrador Web poderia cometer seria adicionar a consulte o livro Srie
conta IUSR_SERVIDOR ao grupo Administradores. Com isso estaria dando Curso Bsico & Rpido
permisses mximas aos usurios que fazem acesso annimo. Seria caso de Microsoft Windows 2000
internao do seu administrador Web. Server, de minha
12. Clique no boto OK para fechar a janela com as propriedades da conta
autoria, publicado pela
IUSR_SERVIDOR.
editora Axcel Books.
13. Voc estar de volta ao Gerenciador do computador; feche-o.
Agora precisamos verificar se a conta IUSR_SERVIDOR tem a permisso para Efetuar logon local.
Para verificar se a conta IUSR_SERVIDOR tem a permisso para Efetuar logon local, faa o seguinte:
www.juliobattisti.com.br 590
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
5. Nas opes que surgem, abaixo de Diretivas locais, d um clique no sinal de + ao lado da opo Atribuio de
direitos de usurio, para abri-la.
6. Surgem as opes indicadas na Figura 14.13.
9. D um clique duplo sobre a permisso Efetuar logon local, para exibir a janela de configuraes para esta Diretiva
de segurana local. Nesta janela surge uma lista dos usurios que possuem a permisso de Efetuar logon local,
conforme indicado na Figura 14.15. O usurio IUSR_SERVIDOR deve fazer parte da lista.
591 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
10. Caso o usurio IUSR_SERVIDOR no estivesse na lista, voc poderia adicion-lo utilizando o boto Adicionar.
11. A permisso Efetuar logon local autoriza o usurio a fazer o logon no console do Servidor, isto , localmente no
servidor. A conta utilizada para acesso annimo precisa desta permisso, pois caso contrrio o Acesso annimo
no ir funcionar.
12. D um clique no boto OK para voltar ao console Configuraes locais de segurana.
13. Feche-o.
Com isso j sabemos que a conta para acesso annimo est configurada corretamente. No prximo item vamos retirar
as permisses NTFS da conta de acesso annimo de uma das aplicaes Web do servidor. Vamos tentar acessar esta
aplicao e observar os resultados obtidos.
Quando estamos tratando de permisses NTFS, j estamos em um nvel de segurana que gerenciado pelo Sistema
Operacional. atravs da utilizao do Windows 2000 Server que definimos permisses NTFS. Isso refora o fato de
que a segurana tanto responsabilidade do grupo de Desenvolvimento, quanto do Administrador da rede.
www.juliobattisti.com.br 592
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
No exemplo do Acesso annimo, o usurio identificado para o Windows 2000, como se fosse o usurio
IUSR_NOME_DA_MAQUINA. Este usurio somente ter acesso s pastas e arquivos para os quais o usurio
IUSR_NOME_DA_MAQUINA tiver permisses de acesso e com os nveis de permisses definidos.
Antes de aprendermos a definir permisses NTFS vamos aprender um pouco mais sobre as mesmas.
Um sistema de arquivos determina a maneira como o Windows 2000 Server organiza e recupera as informaes no
disco rgido ou em outros tipos de mdia. O Windows 2000 Server reconhece os seguintes sistemas de arquivos:
FAT
FAT32
NTFS
NTFS 5
O sistema FAT vem desde a poca do DOS e tem sido mantido por questes de compatibilidade. Alm disso, se voc
tiver instalado mais de um Sistema Operacional no seu computador, alguns sistemas mais antigos (DOS, Windows 3.x
e as primeiras verses do Windows 95) somente reconhecem o sistema FAT. Com o sistema de arquivos FAT, a nica
maneira de restringir o acesso ao contedo de uma pasta compartilhada atravs das permisses de compartilhamento,
as quais no tm efeito no caso de acessos pela Internet, atravs do IIS. Com a utilizao do sistema FAT, alguns
recursos avanados, tais como compresso, criptografia e auditoria, no esto disponveis.
O sistema FAT32 apresenta algumas melhoras em relao ao sistema FAT. Existe um melhor aproveitamento do
espao em disco, e, com isso, um menor desperdcio. Um grande inconveniente do sistema FAT32 que ele no
reconhecido pelo Windows NT Server 4.0. Com o sistema de arquivos FAT32, a nica maneira de restringir o acesso
ao contedo de uma pasta compartilhada atravs das permisses de compartilhamento. Com a utilizao do sistema
FAT32, alguns recursos avanados, tais como compresso, criptografia e auditoria, no esto disponveis.
O sistema de arquivos NTFS utilizado no Windows NT Server 4.0 e foi mantido e melhorado no Windows 2000
Server, por questes de compatibilidade, j que uma nova verso do NTFS foi introduzida com o Windows 2000
NTFS 5. um sistema bem mais eficiente do que FAT e FAT32, alm de permitir uma srie de recursos
avanados, tais como:
593 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Uma das principais vantagens do NTFS que o mesmo permite que sejam definidas permisses de acesso em nvel de
arquivo e de pastas, isto , posso ter arquivos em uma mesma pasta, com permisses diferentes para usurios diferentes.
Alm disso, as permisses NTFS tm efeito localmente, isto , mesmo que o usurio faa o logon no computador onde
um determinado arquivo est gravado, se o usurio no tiver as permisses NTFS necessrias, ele no poder acessar
o arquivo. Isso confere um alto grau de segurana, desde que as permisses NTFS sejam configuradas corretamente.
No Windows 2000 Server, conforme descrito anteriormente, temos tambm o NTFS 5, o qual apresenta diversas
melhorias em relao ao NTFS, tais como:
Criptografia de arquivos e pastas (A criptografia uma maneira de embaralhar a informao de tal forma
que, mesmo que um arquivo seja copiado, o mesmo se torna ininteligvel, a no ser para a pessoa que possui a
chave para descriptografar o arquivo).
Cotas de usurio: faz com que seja possvel limitar o espao em disco que cada usurio pode utilizar.
Gerenciamento e otimizao melhorados.
Um inconveniente do NTFS 5 que ele no reconhecido pelas verses anteriores, tais como o Windows NT Server
4.0 (somente com Service Pack 4.0 ou superior). Caso voc possua uma rede na qual esto presentes servidores com
o Windows 2000 Server e com o Windows NT Server 4.0, planeje com bastante cuidado a utilizao do NTFS 5.
Conforme descrito anteriormente, podemos definir permisses de acesso em nvel da pasta ou arquivo, mas somente
em unidades formatadas com o sistema de arquivos NTFS (seja na verso do NT Server 4.0 ou o NTFS 5 do Windows
2000 Server). Por isso que aconselhvel instalar o Windows 2000 Server sempre em unidades formatadas com
NTFS, pois isso melhora a segurana.
Com relao s permisses NTFS, temos um conjunto diferente de permisses quando tratamos de pastas ou
arquivos. Nas Tabelas 14.1(para pastas) e 14.2 (para arquivos), so apresentadas as permisses e o nvel de
acesso para cada uma delas.
www.juliobattisti.com.br 594
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Todo arquivo ou pasta em uma unidade formatada com NTFS possui uma Lista de controle de acesso (Access
Control List) ACL. Nesta ACL fica uma lista de todas as contas de usurios e grupos para os quais foi garantido
acesso para o recurso, bem como o nvel de acesso de cada um deles.
Permisses NTFS so cumulativas, isto , se um usurio pertence a mais de um grupo, o qual tem diferentes
nveis de permisso para um recurso, a permisso efetiva do usurio a soma das permisses.
Permisses NTFS para um arquivo tm prioridade sobre permisses NTFS para pastas. Por exemplo se um
usurio tem permisso NTFS de escrita em uma pasta, mas somente permisso NTFS de leitura para um
arquivo dentro desta pasta, a sua permisso efetiva ser somente a de leitura, pois a permisso para o arquivo
tem prioridade sobre a permisso para a pasta.
Negar uma permisso NTFS tem prioridade sobre permitir. Por exemplo, se um usurio pertence a dois grupos
diferentes. Para um dos grupos foi dada permisso de leitura para um arquivo, e para o outro grupo foi negada
a permisso de leitura; o usurio no ter o direito de leitura, pois Negar tem prioridade sobre Permitir.
595 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Agora que j conhecemos um pouco mais sobre permisses NTFS, podemos aprender como configurar estas permisses.
Para acessar as permisses NTFS de uma pasta e retirar as permisses do usurio IUSR_SERVIDOR, faa o seguinte:
www.juliobattisti.com.br 596
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
7. Observe que a conta com a descrio Conta de convidado da Internet a conta para acesso annimo, que no nosso
exemplo IUSR_SERVIDOR. Somente possuem permisso de acesso as contas que fazem parte desta lista.
8. D um clique no boto Avanado. Surge a janela indicada na Figura 14.18.
597 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
9. Observe que a conta para acesso annimo possui permisso somente de leitura.
10. Vamos remover as permisses da conta IUSR_SERVIDOR (Conta de convidado da Internet). Para isso d um
clique sobre a conta para marc-la, e depois d um clique no boto Remover.
11. A conta IUSR_SERVIDOR no aparece mais na listagem.
12. Marque a opo Redefinir opes em todos os objetos filhos e permitir a propagao das permisses herdades.
Esta opo deve ser marcada para que as alteraes que esto sendo feitas na pasta sejam propagadas para todas
as subpastas e arquivos pertencentes a esta pasta. Esta modificao necessria para que a permisso para o
usurio IUSR_SERVIDOR seja retirada de todos os arquivos pertencentes pasta que est sendo alterada.
13. D um clique no boto OK para voltar janela de propriedades da pasta.
14. Surge uma janela pedindo confirmao. D um clique em Sim para continuar.
15. Voc estar de volta janela de propriedades da pasta.
16. Na lista de usurios, remova os usurios IUSR_SERVIDOR e o grupo Todos. Para isso basta clicar no nome do
usurio ou grupo e depois clicar no boto Remover.
17. A sua lista de permisses deve estar semelhante indicada na Figura 14.19.
Figura 14.19: Lista de permisses, onde foi retirada a permisso de acesso para o usurio annimo.
www.juliobattisti.com.br 598
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Agora que retiramos as permisses do usurio annimo, se algum tentar acessar algum arquivo que est na pasta
cujas permisses foram retiradas, ir receber uma mensagem de erro, conforme indicado na Figura 14.20.
Veja que a mensagem informa que o acesso pgina solicitada foi negado. Isto acontece porque o usurio
IUSR_SERVIDOR no possui as permisses NTFS necessrias.
Figura 14.20: Mensagem de erro ao tentar acessar uma pgina para a qual o usurio annimo
(conta IUSR_SERVIDOR no nosso exemplo) no tem mais permisso de acesso.
Caso voc teste o acesso localmente no servidor onde a pgina est gravada e a autenticao integrada esteja habilitada,
voc ter acesso pgina. Isto acontece porque primeiro o IIS tenta acesso com a autenticao annima. No obtm
sucesso. Se a autenticao integrada (a autenticao integrada utiliza a conta do Windows que voc utilizou para fazer
o logon) estiver habilitada, o IIS tenta utiliz-la. Caso a conta que voc utilizou para fazer o logon tenha permisso de
acesso pgina, o IIS libera o acesso. Isto tambm vlido para usurios da sua rede local que fizeram o logon em um
domnio do Windows NT Server 4.0 ou do Windows 2000 e cujas contas ou grupos a que pertencem possuam permisso
de acesso para o arquivo solicitado. Nos prximos itens veremos mais sobre a autenticao integrada.
Agora vamos restaurar as permisses NTFS para o usurio IUSR_SERVIDOR e testar para ver se ele voltou a ter
acesso.
1. Utilizando o Windows Explorer, localize a pasta cujas permisses NTFS sero alteradas.
2. D um clique com o boto direito do mouse sobre a pasta. No menu de opes que surge d um clique em
Propriedades.
3. Na janela de propriedades d um clique na guia Segurana.
599 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
5. Observe que a conta com a descrio Conta de convidado da Internet a conta para acesso annimo, que no
nosso exemplo IUSR_SERVIDOR. e que esta conta no aparece na lista de usurios; portanto a mesma no
possui permisses de acesso.
6. D um clique no boto Avanado. Observe que a janela em que surge a conta IUSR_SERVIDOR tambm no faz
parte da listagem, conforme indicado na Figura 14.22.
www.juliobattisti.com.br 600
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
7. D um clique no boto Adicionar. Surge uma janela com a listagem de usurios. Localize o usurio
IUSR_SERVIDOR e d um clique sobre o mesmo para marc-lo, conforme indicado na Figura 14.23.
8. D um clique no boto OK. Surge uma janela pedindo para que voc defina as permisses NTFS para o usurio
IUSR_SERVIDOR.
9. Defina as permisses conforme indicado na Figura 14.24 e d um clique no boto OK.
601 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
10. Voc estar de volta janela de opes avanadas. Certifique-se de que a opo Redefinir permisses em todos
os objetos filho e permitir a propagao das permisses herdadas, esteja marcada.
11. D um clique no boto OK para voltar janela de propriedades da pasta.
12. Surge uma janela pedindo confirmao, conforme indicado na Figura 14.25. D um clique em Sim para continuar.
Figura 14.26: Adicionando o usurio IUSR_SERVIDOR na lista de usurios que tm permisso de acesso pasta selecionada.
www.juliobattisti.com.br 602
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
16. D um clique no boto OK. Observe que o usurio IUSR_SERVIDOR j consta na listagem de usurios.
17. Defina as permisses conforme indicado na Figura 14.27 e d um clique no boto OK.
Feito isso foram reatribudas as permisses NTFS originais e qualquer usurio volta a ter acesso pasta (no nosso
exemplo era a pasta Captulo 8) e a todo o seu contedo, porm com permisso somente para leitura.
Agora o usurio j poder acessar a pgina, pois no ser mais retornada a mensagem de acesso negado.
Com este exemplo, podemos constatar que o servidor IIS trabalha em sintonia com o Windows 2000, de tal forma que
os recursos de segurana do Sistema Operacional podem ser utilizados pelo IIS.
Ns detalhamos um pouco mais o primeiro tipo de acesso Acesso annimo, para explicar alguns conceitos importantes
em detalhes. Agora passaremos a estudar outros tipos de autenticao possveis com o IIS. Lembrando que a autenticao
com o IIS apenas um dos tantos nveis de segurana que podemos configurar.
Autenticao Bsica
A autenticao bsica uma das mais antigas formas de autenticao que existem, desenvolvidas desde a poca dos
primeiros servidores Web como o NCSA e o Cern HTTP. Neste tipo de autenticao, o usurio precisa fornecer um
603 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Username e uma senha. O mtodo de autenticao bsica um padro de mercado amplamente usado para coletar
informaes de nome de usurio e senha. A autenticao bsica funciona da seguinte forma:
1. O navegador exibe uma caixa de dilogo na qual o usurio pode digitar seu Username e senha de conta do
Windows 2000, previamente cadastrada. Por isso, um pr-requisito da autenticao bsica, que o usurio j
possua uma conta cadastrada no Windows 2000.
2. O navegador tenta estabelecer uma conexo usando essas informaes.
3. Se o servidor rejeitar as informaes, o navegador da Web exibe repetidamente a caixa de dilogo at que o
usurio digite um nome de usurio e uma senha vlidos ou feche a caixa de dilogo.
4. Quando o servidor Web verifica que o nome de usurio e a senha correspondem a uma conta de usurio do
Windows 2000 vlida, a conexo estabelecida e o acesso pgina solicitada liberado.
A autenticao bsica apresenta, como principal requisito, o fato de que o usurio deve ter uma conta no Windows
2000. Para sites que so acessados por um grande nmero de usurios pode no ser uma boa opo. Alm disso, o fato
de o usurio ter que digitar um username e senha no muito simptico.
Uma das grandes desvantagens deste mtodo de autenticao o fato de que a senha no criptografada ao ser
transmitida pela rede. A codificao que feita extremamente simples de ser quebrada; por isso este mtodo de
autenticao no dos mais seguros.
A vantagem da autenticao bsica que ela faz parte da especificao do HTTP e tem
suporte da maioria dos navegadores. A desvantagem que, pelo fato de os navegadores IMPORTANTE: A
que usam a autenticao bsica transmitirem senhas de forma descriptografada, ao autenticao integrada do
monitorar as comunicaes na sua rede, algum pode interceptar e decifrar facilmente Windows (que veremos
essas senhas usando ferramentas disponveis publicamente na Internet. Portanto, a logo em seguida) tem
autenticao bsica no recomendada a menos que voc tenha certeza de que a conexo prioridade sobre a
entre o usurio e seu servidor Web segura, como uma conexo direta via cabo ou uma autenticao bsica. O
linha dedicada. navegador escolher a
autenticao integrada do
Windows e tentar usar
as informaes de logon
Autenticao Integrada do Windows atuais do Windows antes
A autenticao integrada do Windows (chamada anteriormente NTLM ou autenticao de solicitar ao usurio um
de desafio/resposta do Windows NT) uma forma segura de autenticao pois o nome nome de usurio e uma
de usurio e a senha no so enviados pela rede criptografados. Quando voc ativa a senha. Atualmente,
autenticao integrada do Windows, o navegador do usurio verifica a validade da senha somente o Internet
atravs de uma troca criptogrfica com o servidor Web. Explorer, verso 2.0 e
posterior, oferece suporte
A autenticao integrada do Windows pode usar o protocolo de autenticao Kerberos autenticao integrada
verso 5 e o seu prprio protocolo de autenticao desafio/resposta. Se o Servio de do Windows.
diretrio Active Directory, estiver instalado no servidor e o navegador for compatvel
com o protocolo de autenticao Kerberos verso 5, o protocolo Kerberos verso 5 e o
www.juliobattisti.com.br 604
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
protocolo desafio/resposta sero usados; caso contrrio, somente o protocolo desafio/resposta ser usado.
O protocolo de autenticao Kerberos verso 5 um recurso da arquitetura do Windows 2000 Distributed Services.
Para que a autenticao do Kerberos verso 5 seja bem-sucedida, o cliente e o servidor devem ter uma conexo
confivel com um Key Distribution Center (KDC) e devem ser compatveis com os Servios do Active Directory. A
situao ideal onde o cliente utiliza o Windows 2000 Professional.
Portanto, a autenticao integrada do Windows mais adequada para um ambiente de Intranet, no qual o usurio e o
servidor Web esto no mesmo domnio e os administradores podem garantir que todos os usurios tenham o Microsoft
Internet Explorer, verso 2.0 ou posterior.
A tecnologia de certificados usa os recursos de segurana de Secure Sockets Layer (SSL, camada de soquetes de
segurana) do servidor Web para dois tipos de autenticao.
possvel usar um certificado de servidor para permitir que os usurios faam a autenticao do seu site da Web antes
de transmitir informaes pessoais, como um nmero de carto de crdito. Alm disso, voc pode usar certificados de
cliente para autenticar os usurios que solicitam informaes no seu site da Web. O SSL faz a autenticao verificando
o contedo de uma identificao digital (O Certificado digital) criptografada submetida pelo navegador do usurio
605 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
durante o processo de logon (Os usurios obtm certificados de cliente de uma organizao independente mutuamente
confivel Autoridade Certificadora.). Os certificados de servidor contm geralmente informaes sobre sua empresa
e a organizao que emitiu o certificado. Os certificados de cliente contm normalmente informaes de identificao
sobre o usurio e a organizao que emitiu o certificado.
O tipo de autenticao apenas um dos aspectos que precisam ser definidos. Devem ser consideradas diversas questes.
A seguir segue uma lista de questes que devem ser levadas em considerao na hora de decidir sobre o tipo de
autenticao que iremos configurar no IIS, ou se devemos configurar mais do que um tipo de autenticao.
Para um site pblico, ou reas de acesso pblico, a autenticao utilizando Acesso annimo a mais indicada,
pois evita que o usurio tenha que fornecer um username e senha.
Para acesso ao contedo de uma Intranet, uma das primeiras opes a serem pensadas a utilizao da
autenticao integrada do Windows. Pois sendo uma Intranet um ambiente controlado, possvel garantir que
todos os clientes satisfaam as condies exigidas pela autenticao Integrada.
Para sites que trabalham com dados sensveis como servios bancrios pela Internet e Comercio Eletrnico,
sem dvida que a utilizao de Certificados Digitais o mais indicado. Em Intranets tambm tm sido utilizados
Certificados Digitais, pois, conforme descrevemos no incio do captulo, a maioria dos ataques parte de usurios
da prpria Intranet da empresa. Muitas vezes nos preocupamos muito com os ataques externos e esquecemos
as ameaas que vm de dentro da empresa.
www.juliobattisti.com.br 606
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
2. Abra o Gerenciador do Internet Services: Iniciar -> Programas -> Ferramentas administrativas -> Gerenciador do
Internet Services.
3. aberto o console de gerenciamento do IIS.
4. D um clique duplo no nome do computador. No nosso exemplo o nome Servidor.
5. Surgem as opes indicadas na Figura 14.28.
6. Neste momento podemos configurar o tipo de autenticao para todos os aplicativos Web contidos no Servidor ou
para cada aplicativo individualmente.
7. A ttulo de exemplo, vamos configurar o tipo de autenticao para o site Web padro.
8. Clique com o boto direito do mouse sobre a opo Site da Web padro (ou na opo correspondente, caso voc
tenha alterado este nome). No menu de opes que surge d um clique em Propriedades.
9. Ser exibida a janela Propriedades de Site Web padro.
10. D um clique na guia Segurana de pasta. Sero exibidas as opes indicadas na Figura 14.29.
11. A primeira opo desta guia Controle de acesso annimo e autenticao. D um clique no boto Editar, ao lado
desta opo. Surge a janela Mtodos de autenticao, indicada na Figura 14.30.
12. Observe que, por padro, esto definidas as opes de Acesso annimo e Autenticao integrada do Windows.
13. Nesta janela voc pode definir qual ou quais tipos de autenticao que o servidor IIS dever suportar para o site
Web padro. Alm disso, voc pode configurar qual a conta que ser utilizada para o acesso annimo, conforme
descrito anteriormente.
607 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br 608
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
14. Selecione as opes desejadas. Se voc clicar na opo Autenticao bsica, o IIS emite um aviso de que para esta
opo as senhas sero transmitidas sem criptografia, conforme indicado na Figura 14.31.
Figura 14.31: Aviso de que para a autenticao bsica a senha transmitida sem criptografia.
19. Para estender as configuraes basta selecionar uma ou mais das opes mostradas e clicar no boto OK. Voc
tambm pode utilizar o boto Selecionar tudo e depois clicar em OK.
609 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Para configurar as opes para uma pasta Virtual em particular, basta localiz-la abaixo da opo Site Web padro,
clicar com o boto direito sobre a mesma e clicar na opo Propriedades. Depois s seguir os passos indicados
anteriormente.
www.juliobattisti.com.br 610
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
5. D um clique no sinal de + ao lado de Site Web padro. Sero exibidas as diversas pastas virtuais disponveis no servidor.
6. A ttulo de exemplo, vamos configurar as opes gerais de segurana para a pasta Capitulo6, conforme indicado
na Figura 14.33.
7. Clique com o boto direito do mouse sobre a opo Capitulo6. No menu de opes
NOTA: Caso voc no tenha
que surge d um clique em Propriedades.
criado uma pasta virtual
8. Ser exibida a janela Propriedades de Capitulo6. Capitulo6, utilize qualquer
9. Na guia Pasta (que j deve estar sendo exibida), existem diversas opes de pasta virtual disponvel no
configurao. Abaixo descrevemos cada uma destas opes. seu servidor IIS.
Acesso ao cdigo-fonte do Script: Selecione esta opo para permitir que os
usurios acessem o cdigo-fonte se a permisso de leitura ou gravao estiver
definida. O cdigo-fonte inclui scripts nos aplicativos ASP.
Leitura: Selecione esta opo para permitir que os usurios leiam ou faam o download dos arquivos ou
diretrios e de suas propriedades associadas.
Gravao: Selecione esta opo para permitir que os usurios carreguem os arquivos e suas propriedades
associadas no diretrio ativado no servidor ou alterem o contedo de um arquivo ativado para gravao. A
gravao s poder ser feita com um navegador que d suporte ao recurso PUT do protocolo padro HTTP 1.1.
Cuidado com esta permisso. Dificilmente voc precisar habilitar permisso de Gravao para reas em que
permitida a autenticao com usurio annimo.
Pesquisa em Pasta: Selecione esta opo para permitir que o usurio veja uma listagem em hipertexto dos arquivos
e subdiretrios deste diretrio virtual. Os diretrios virtuais no aparecero nas listagens de diretrios; os usurios
devem saber o alias do diretrio virtual. Caso o usurio digite o endereo para o caminho da pasta e no especifique
um documento a ser carregado, ser exibida uma listagem semelhante indicada na Figura 14.34.
Figura 14.34: Listagem exibida quando a opo Pesquisa em Pasta est habilitada.
611 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Caso esta opo no esteja marcada e o usurio digite o endereo para a pasta, sem especificar um arquivo a ser
carregado, ser retornada a mensagem de erro indicada na Figura 14.35.
Figura 14.35: Mensagem de erro quando a opo Pesquisa em Pasta estiver desabilitada.
Criar log de visitantes: Selecione esta opo para registrar as visitas feitas a este diretrio em um arquivo de
log. As visitas sero registradas somente se o log estiver ativado para este site da Web.
Indexar este recurso: Para permitir que o Servio de indexao da Microsoft (Index Services) inclua este
diretrio em um ndice de texto completo do site da Web, selecione esta opo.
De uma maneira geral, recomendo que as opes Gravao e Pesquisa em pasta somente sejam marcadas em situaes
especiais e para reas que no contenham dados confidenciais.
Uma questo importante sobre a combinao entre as permisses definidas no IIS e as permisses NTFS. Por
exemplo, vamos supor que o usurio tenha sido autenticado como usurio annimo e est tentando gravar contedo
em uma pasta virtual na qual o IIS possui permisso de gravao, porm as permisses NTFS no permitem que o
usurio annimo faa gravaes. Como fica esta combinao ?
Quando uma pgina solicitada, o IIS segue a seqncia indicada na Figura 14.36.
Observe que primeiro o IIS verifica se o usurio tem permisses da Web para o recurso solicitado. Se o usurio no
tiver, a solicitao falha e o usurio recebe uma mensagem 403 Acesso proibido. O IIS verifica as permisses do
NTFS para o recurso. Se o usurio no tiver permisses do NTFS para o recurso, a solicitao falha e o usurio recebe
uma mensagem 401 Acesso negado.
Ento a resposta para o nosso exemplo que o usurio no conseguiria gravar o contedo, pois o mesmo no teria as
permisses NTFS necessrias e o mesmo acabaria recebendo a mensagem de erro 401 Acesso negado.
www.juliobattisti.com.br 612
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
613 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Conforme descrito anteriormente, uma Aplicao Web do IIS definida pela estrutura de diretrios em que est
localizado (falaremos mais sobre Aplicaes Web, mais adiante). Para obter mais informaes, consulte o tpico
Aplicaes Web, mais adiante.
NOTA: Para determinar qual opo representa uma aplicao Web e qual simplesmente uma pasta virtual s observar o
cone ao lado do nome, no Gerenciador do Internet Services. Opes que so simplesmente uma pasta virtual so
representadas por um envelope amarelo; j aplicaes Web possuem um cone que parece uma caixa aberta, conforme
indicado na Figura 14.37.
www.juliobattisti.com.br 614
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Figura 14.37: cones para uma pasta virtual e para uma aplicao Web.
Por exemplo, vamos supor que existe uma rea do site que est em desenvolvimento, de tal forma que a mesma no
deva ser acessada, nem por usurios da Intranet da empresa, muito menos por usurios da Internet. Somente os
participantes do grupo de desenvolvimento que devem ter acesso a esta parte do site. Podemos, sem maiores problemas,
limitar o acesso, de tal maneira que somente as estaes de trabalho dos desenvolvedores tenham acesso rea de
desenvolvimento do site.
Neste item aprenderemos a configurar uma aplicao Web ou uma pasta virtual do IIS, para limitar o acesso com base
no endereo IP do usurio.
615 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
8. O segundo grupo de opes desta guia Restries de nome de domnio e endereo IP. D um clique no boto
Editar, ao lado desta opo. Surge a janela, indicada na Figura 14.38.
Figura 14.38: Janela para configurao das restries de nome de domnio e endereo IP.
Observe que ns temos duas opes para configurao, conforme descrito a seguir:
Acesso permitido: Se esta opo estiver marcada, todo mundo ter acesso ao site, com exceo dos endereos
IP que estiverem indicados na listagem Exceto os listados abaixo. Este mecanismo chamado de Lista
Negra, ou seja, todo mundo tem acesso, com exceo de quem est na lista.
Acesso negado: Se esta opo estiver marcada, ningum ter acesso ao site, com
exceo dos endereos IP que estiverem indicados na listagem Exceto os listados NOTA: No exemplo do
abaixo. Este mecanismo chamado de Lista Branca, ou seja, ningum tem livro estarei negando
acesso, com exceo de quem est na lista. acesso para o IP:
10.204.123.1, que o
9. A ttulo de exemplo, deixe marcada a opo Acesso permitido. Agora vamos negar endereo IP do meu
acesso para um computador especfico. computador. Utilize o
10. D um clique no boto Adicionar. Surge a janela indicada na Figura 14.39. endereo IP do
equipamento para o qual
voc quer negar acesso,
em nvel de teste.
www.juliobattisti.com.br 616
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Nesta janela temos trs opes a serem escolhidas, conforme explicado a seguir:
Um computador: Neste caso estamos negando acesso para um computador especfico. Basta digitar o endereo
IP do mesmo. No nosso exemplo, utilizaremos esta opo e iremos digitar o IP 10.204.123.1.
Grupo de computadores: Se voc marcar esta opo, surge, na parte de baixo da janela, mais um campo:
Mscara de sub-rede, conforme indicado na Figura 14.40. Podemos utilizar esta opo para negar acesso a
uma rede ou segmento de rede inteiro.
Por exemplo, podemos negar acesso a qualquer computador da rede 10.204.123; para isso preencheramos os campos
da seguinte maneira:
Para negar acesso a todas as mquinas da rede 161.147, utilizaramos a seguinte configurao:
Nome de domnio: Esta opo permite que neguemos acesso com base no nome DNS de um grupo de
computadores. Por exemplo, podemos negar acesso para setor de contabilidade empresa, negando acesso para
o domnio: contabilidade.abc.com.br. Ao tentar utilizar esta opo, o IIS emite uma mensagem avisando que o
desempenho do servidor pode ser prejudicado pela ativao desta opo, e perguntando se voc realmente
deseja ativ-la.
11. Vamos negar o acesso apenas para um computador 10.204.123.1. Certifique-se de que a opo Um computador
esteja marcada e no campo Endereo IP, digite 10.204.123.1, conforme indicado na Figura 14.41.
617 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
12. D um clique no boto OK para incluir o computador com endereo IP 10.204.123.1, na lista dos computadores
com acesso negado, conforme indicado na Figura 14.42.
13. D um clique no boto OK e voc estar de volta janela de propriedades do site Web padro.
14. D um clique no boto OK para fechar a janela de propriedades.
15. Caso alguma aplicao Web ou pasta virtual do Servidor possua uma configurao diferente da definida para o
site Web padro, o IIS abre uma janela informando qual site possui uma configurao diferente e perguntando se
voc deseja estender as configuraes do site Web padro para as pastas virtuais e aplicativos Web internos.
16. Para estender as configuraes basta selecionar uma ou mais das opes mostradas e clicar no boto OK. Voc
tambm pode utilizar o boto Selecionar tudo e depois clicar em OK.
17. Voc estar de volta ao Gerenciador do Internet Services. Feche-o.
Agora vou tentar acessar uma pgina do servidor IIS para o qual o acesso foi negado para o IP do meu computador
10.204.123.1. Ao tentar fazer o acesso, recebo a mensagem indicada na Figura 14.43.
www.juliobattisti.com.br 618
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Observe que a mensagem informa que o endereo IP foi rejeitado. Para que o endereo IP 10.204.123.1 volte a ter
acesso ao site, s seguir os passos indicados anteriormente e remov-lo da lista de endereos IP com acesso negado.
No Microsoft SQL Server podemos atribuir nveis de permisso para os usurios do Windows 2000 e at mesmo para
o usurio utilizado para acesso annimo.
Na Figura 14.44, temos um exemplo onde o usurio IUSR_SERVIDOR est recebendo permisso somente para
leitura na tabela Orders do Banco de dados Northwind em um Servidor com o Microsoft SQL Server 2000.
619 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Figura 14.44: Definindo permisses de banco de dados no Microsoft SQL Server 2000.
www.juliobattisti.com.br 620
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Aplicaes, atravs da qual feito o acesso ao Banco de dados. Quando o usurio inicia a aplicao cliente, o mesmo
se identifica, normalmente atravs da digitao de um nome de usurio (username ou login) e da digitao de uma
senha.
As informaes de identificao so utilizadas para estabelecer uma conexo com o Servidor. Esta conexo
mantida enquanto a aplicao cliente estiver sendo utilizada. Atravs desta conexo, o lado Servidor da aplicao
consegue identificar o usurio. Com a identificao do usurio podem ser aplicadas regras de segurana, como nveis
de permisso de acesso aos dados, nveis de permisso para as funcionalidades da aplicao, log das aes realizadas
pelo usurio, etc. Por exemplo, as opes de menu da aplicao Cliente podem ser montadas com base nas permisses
de acesso que o usurio possui. Se o usurio no possui permisses para alterar os dados, o menu com as opes de
alterao no ser exibido.
Atravs da manuteno da conexo e da respectiva possibilidade de identificar unicamente cada um dos usurios conectados,
podemos implementar a maioria das funcionalidades fundamentais nas aplicaes Cliente/Servidor tradicionais.
Porm existem diversos problemas na atualizao e manuteno deste tipo de aplicao, dentre os quais podemos
destacar:
A atualizao dos sistemas problemtica, pois neste modelo cada vez que houver alterao na camada
de apresentao (no modelo de n camadas) ou at mesmo na camada de Lgica do negcio (no modelo
mais antigo de 2 camadas), a aplicao ter que ser atualizada em todas as estaes de trabalho que
utilizam a aplicao.
Controle de verso: Garantir que todas as estaes de trabalho estejam com a
ltima verso da aplicao uma tarefa nada fcil, a qual, dependendo do nmero NOTA: Para maiores
de estaes da rede da empresa, pode exigir uma equipe de Help Desk (suporte) detalhes sobre os modelos
praticamente dedicada a esta tarefa. de aplicao de 2 ou mais
camadas, consulte os
Problemas de conflitos de DLL e padronizao de ambiente tornam a manuteno
Captulos 1 e 2.
e o gerenciamento destas aplicaes uma tarefa difcil e de custo elevado.
Estes problemas surgem para cada aplicao Cliente/Servidor tradicional que estiver sendo usada. Agora imagine o
caso de uma grande empresa, com milhares de computadores ligados em rede, com dezenas de aplicaes. A situao
torna-se insustentvel, alm do custo de manuteno e suporte atingir patamares impraticveis.
Para resolver estes e outros problemas das aplicaes Cliente/Servidor tradicionais que comearam a ser desenvolvidas
aplicaes para a Web ou aplicaes baseadas em tecnologia Web, como preferem alguns. Vamos falar um pouco mais
sobre aplicaes Web.
Para acessar uma aplicao Web, o nico programa de que o usurio precisa um Navegador instalado na sua estao.
Existem inclusive aplicaes Web bem projetadas que no obrigam o usurio a utilizar um Navegador especfico, o
que aumenta mais ainda a flexibilidade.
621 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Uma aplicao Web reside no servidor, no nosso caso no IIS. Toda e qualquer alterao que se fizer necessria na
aplicao ser feita diretamente no servidor Web, sem que seja necessria nenhuma modificao nas estaes dos
usurios. Na prxima vez que o usurio acessar a aplicao, utilizando o Navegador instalado na sua estao, j
estaro disponveis as alteraes efetuadas. Com este modelo no necessria a atualizao (que muitas vezes
significa uma reinstalao) da aplicao em todas as estaes da rede, cada vez que forem feitas alteraes na aplicao.
Com isso, a equipe de suporte fica dispensada da tediosa tarefa de atualizao da aplicao em cada estao da rede.
O modelo de aplicaes Web traz inmeras vantagens, dentre as quais podemos destacar:
Atualizao das aplicaes centralizada no servidor Web, sem a necessidade de atualizar todas as estaes da
rede que fazem acesso aplicao.
Facilidade de manuteno e suporte, uma vez que o cliente somente precisa de um Navegador para acessar a
aplicao.
Reduo do chamado TCO Total Cost Ownership (Custo Total de Propriedade). O TCO uma medida de
quanto custa, por ano, a manuteno de uma estao de rede em funcionamento. O Clculo do TCO leva em
considerao diversos fatores. Para maiores informaes sobre o clculo do TCO acesse o site do Gardner
Group na Internet.
Porm nem tudo so vantagens. Pela natureza e implementao do modelo Web, o qual faz uso do protocolo HTTP, as
aplicaes Web no tm como manter uma conexo permanente com o usurio. Por isso que o modelo Web, muitas
vezes, conhecido como State Less, isto , Sem estado. Isso acontece porque, aps ter enviado a pgina solicitada
pelo usurio, a conexo encerrada, no sendo possvel continuar trocando informaes com o usurio, a no ser que
uma nova conexo seja estabelecida. Esta uma caracterstica intrnseca do protocolo HTTP.
Para vencer as limitaes impostas por este modelo State Less, o ASP.NET deu passos importantes, como a
possibilidade da manuteno do estado dos diversos controles de um formulrio Web, entre uma chamada e outra da
pgina, conforme estudamos nos captulos anteriores.
A possibilidade de diferenciar cada usurio que est acessando uma aplicao Web de fundamental importncia,
para que possamos criar contedos personalizados e interativos, alm da possibilidade de aplicar conceitos como
nveis de permisso de acesso aos dados e auditoria de acesso.
De uma maneira simples e didtica poderamos definir uma aplicao Web desenvolvida com ASP ou ASP.NET, como
sendo: Uma pasta virtual e todas as suas subpastas, juntamente com um conjunto de pginas ASP ou ASP.NET,
componentes COM ou COM+ e Web Services, projetados para executar uma ou mais tarefas especficas, como por
exemplo um sistema para controle do departamento de Recursos Humanos.
O nosso conjunto de pginas ASP pode fazer uso dos diversos componentes disponveis para a aplicao Web.
www.juliobattisti.com.br 622
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
No IIS, o primeiro passo para criar uma aplicao Web criar uma pasta, a qual ser o ponto de partida para a
aplicao. O prximo passo transformar esta pasta em uma Pasta Virtual do servidor IIS.
Vamos supor que voc tenha criado uma pasta chamada WebApl no drive C:\WebApl,
de um servidor IIS chamado www.abc.com.br. Agora voc registrou esta pasta como NOTA: Para saber como
uma pasta virtual chamada WebApl. Dentro deste diretrio voc criou uma pgina transformar uma pasta
ASP.NET chamada index.aspx, a qual ser a pgina inicial da aplicao Web. Voc lembra em uma Pasta Virtual
como seria o endereo para acessar a pgina index.asp do diretrio virtual WebApl do do IIS, consulte a
servidor www.abc.com.br ? Introduo e o Captulo 1
deste livro.
O endereo seria o seguinte: http://www.abc.com.br/WebApl/index.aspx
Todos as subpastas da pasta WebApl tambm faro parte da aplicao Web. Com isso podemos concluir, em um
primeiro momento, que uma aplicao Web do IIS est ligada criao de uma pasta virtual no servidor IIS.
O prximo passo configurar as propriedades da aplicao Web. Para isso utilizamos o Gerenciador do Internet
Services, conforme ilustrado nos passos a seguir.
623 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
7. Todos os aplicativos Web esto disponveis atravs da opo Site da Web Padro. D um clique no sinal de + ao
lado desta opo para abri-la.
8. Sero exibidas todas as pastas virtuais disponveis no servidor IIS, conforme indicado na Figura 14.47.
9. No nosso exemplo queremos configurar as propriedades da pasta virtual WebApl. Neste ponto o conceito de pasta
virtual confunde-se com o de aplicao Web. Na verdade a nossa aplicao WebApl est contida na pasta Virtual
WebApl.
www.juliobattisti.com.br 624
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Caminho da pasta: C:\WebApl. Este o caminho fsico onde so gravados os elementos da aplicao Web. No
nosso exemplo, a pasta WebApl do drive C:
Permisses de acesso pasta virtual da aplicao: Observe que por padro somente so marcadas as opes
Leitura, Criar log e Indexao.
Nome do aplicativo: No nosso exemplo WebApl.
625 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Na primeira guia Mapeamento de aplicativos, temos a indicao de qual componente do IIS ir processar cada
requisio do usurio. Este mapeamento baseado na extenso do arquivo. Por exemplo, toda pgina com a extenso
.aspx ser processada pela DLL aspnet_isapi.dll, conforme indicado pela Figura 14.50.
Figura 14.50: A DLL aspnet_isapi.dll responsvel pelo processamento das pginas .aspx.
www.juliobattisti.com.br 626
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Ativar o estado da seo: Esta caixa afeta as pginas ASP 3.0. Use essa caixa de seleo para ativar ou desativar
o estado da sesso. Quando o estado da sesso ativado, o interpretador ASP cria uma sesso para cada
usurio que acessa um aplicativo ASP, de modo que voc possa identificar o usurio atravs das pginas do
aplicativo. Quando o estado da sesso desativado, o ASP no controla usurios e no permite que um script
do ASP armazene informaes no objeto Session ou use os eventos Session.OnStart ou Session.OnEnd. Uma
sesso finalizada automaticamente se o usurio no solicitou ou atualizou uma pgina em um aplicativo no
fim do tempo limite TimeOut.
Tempo limite da seo: No nosso exemplo est definido em 20 minutos. Uma sesso finalizada
automaticamente se o usurio no solicitou ou atualizou uma pgina em um aplicativo por um tempo maior do
que o tempo limite TimeOut.
Ativar o Buffer: Esta opo afeta as pginas ASP 3.0. Por padro esta opo ativada no IIS 5.0. Nas verses
anteriores esta propriedade era desativada por padro. Quando o Buffer est ativo, o resultado do processamento
de uma pgina ASP somente enviado para o Navegador do cliente, quando toda a pgina tiver sido processada,
a menos que seja utilizado o mtodo Flush do objeto Response.
627 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Ativar os caminhos Pai: Marque esta caixa de seleo para permitir que as pginas ASP usem os caminhos
relativos do diretrio pai do diretrio atual (caminhos que usam a sintaxe ..), tambm conhecidos como
endereos relativos.
Linguagem ASP padro: Por padro definida como sendo VBScript. Caso
voc deseje pode alterar para JScript. Tambm podemos especificar o nome de IMPORTANTE: Se voc
qualquer outra linguagem para a qual tenhamos o interpretador instalado no ativar essa opo, no
servidor IIS, como por exemplo Perl. Esta opo define a linguagem que ser fornea acesso de
utilizada para interpretar os comandos dentro das tags <% e %>. execuo aos diretrios
Tempo limite do script ASP: Especifica o perodo de tempo durante o qual o pai; caso contrrio, um
ASP permitir a execuo de um script. Se a execuo do script no terminar ao script poder tentar
final do perodo de tempo limite, o ASP ir parar o script e gravar um evento no executar um programa
log de eventos do Windows 2000. Voc pode definir o perodo de tempo limite no autorizado em um
como um valor entre 1 e 2147483647, alm de poder substituir essa opo em uma diretrio pai.ASP usando o
pgina
mtodo Server.ScriptTimeout.
18. No iremos alterar nenhuma opo nesta guia.
19. D um clique na guia Depurao de aplicativo.
20. Na terceira guia Depurao de aplicativo, temos diversas configuraes relacionadas com a depurao de erros
em pginas ASP, conforme indicado na Figura 14.52.
www.juliobattisti.com.br 628
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Abaixo temos a descrio destas opes, que afetam, principalmente, pginas ASP 3.0:
Ativar a depurao de script ASP do lado do servidor: Marque esta opo para permitir que o servidor Web
entre no Depurador de scripts da Microsoft durante o processamento de pginas ASP. Em seguida, voc pode
usar o depurador para examinar seus scripts. Por questes de desempenho, a depurao do ASP no
recomendada em um ambiente de produo.
Ativar a depurao de script ASP do lado do cliente: Essa caixa de seleo est reservada para uso futuro e no
tem efeito sobre a verso atual do ASP Esta a informao contida na prpria documentao do IIS 5.0.
Enviar mensagens de erro do ASP detalhadas para o cliente: Selecione essa opo para enviar informaes
especficas de depurao (incluindo o nome do arquivo, a mensagem de erro e o nmero da linha) para o
navegador. Principalmente quando estamos desenvolvendo nossas aplicaes, importante que esta opo
esteja selecionada, pois ao testarmos uma pgina, se a mesma contiver um erro, o Navegador informa o
nmero da linha onde est o erro, o que facilita a correo do script.
Enviar mensagem de erro de texto para o cliente: Selecione esta opo para enviar uma mensagem de erro
padro ao navegador quando algum erro impedir o servidor Web de processar a pgina ASP. Uma mensagem
de erro especfica gravada no log de erros. Voc pode alterar a mensagem de erro padro digitando uma nova
mensagem na caixa de texto. No recomendada a utilizao desta opo no ambiente de desenvolvimento,
pelos motivos descritos no pargrafo anterior.
21. No iremos alterar nenhuma opo nesta guia.
22. D um clique no boto OK para fechar a janela de configurao.
23. D um clique no boto OK para fechar a janela de propriedades da pasta virtual WebApl.
24. Voc estar de volta ao Gerenciador do Internet Services.
25. Feche-o.
Com isso finalizamos os elementos de segurana ligados ao IIS e ao Windows 2000. Agora vamos estudar alguns
aspectos de segurana, especficos das pginas ASP.NET.
Impersonation
Conforme descrevemos no incio do captulo, quando o usurio faz a requisio de uma pgina ASP.NET, a primeira
coisa que acontece, antes de a pgina ser processada e retornada para o usurio, a autenticao do usurio. Atravs da
629 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
autenticao, o IIS identifica o usurio que est fazendo a requisio. Para reas de acesso pblico utilizada a autenticao
annima, onde todos os usurios so autenticados utilizando a mesma conta: IUSR_NOME_DO_COMPUTADOR.
O mecanismo de Impersonation pode estar habilitado ou desabilitado. Por padro este mecanismo est desabilitado. O
mecanismo de Impersonation define se a requisio do usurio ser executada utilizando a conta com a qual o usurio
foi autenticado (IUSR_NOME_DO_COMPUTADOR para o caso de acesso annimo, ou uma conta do Windows
2000 para outros tipos de autenticao), ou a conta System, que uma conta local do servidor Windows 2000.
Este mecanismo pode parecer sem sentido prtico, mas na verdade existe uma justificativa bastante plausvel. Como
as pginas ASP.NET so compiladas e mantidas em cache, pode acontecer situaes onde o IIS precise gravar arquivos
temporrios, em reas do disco nas quais a conta IUSR_NOME_DO_COMPUTADOR no tem permisses de acesso.
Neste caso o IIS precisa fazer de conta que est executando como se fosse o usurio System, o qual tem permisses
para as reas para criao de arquivos temporrios.
Se o mecanismo de Impersonation estiver habilitado e a pgina fizer parte de uma rea do site, no qual o acesso
annimo est habilitado, a requisio ser feita em nome do usurio configurado para o acesso annimo, normalmente
a conta IUSR_NOME_DO_COMPUTADOR. Se o mecanismo de Impersonation estiver desabilitado (que o padro),
ao invs da conta configurada para o acesso annimo, ser utilizada a conta System.
Se o mecanismo de Impersonation estiver habilitado e a pgina fizer parte de uma rea na qual o acesso annimo no
est habilitado, a requisio ser feita em nome do usurio que est logado no Windows. No caso de uma rede com
servidores Windows 2000 e clientes Windows 9x ou Windows 2000, o usurio, provavelmente, estar logado com uma
conta de um domnio do Windows 2000. O mesmo acontece para o caso de o mecanismo de Impersonation estar
habilitado. Observe que a mudana de contexto (Impersonation) para a conta System somente ocorre quando o acesso
for feito a reas nas quais o acesso annimo permitido.
Em qualquer uma das situaes, aps assumir a identidade de um determinado usurio, quer seja a conta de acesso
annimo, quer seja a conta System ou a conta com a qual o usurio est logado, ser feita uma verificao se o usurio
tem permisso para os recursos que ele requisitou. Se tiver permisso a pgina compilada, executada e retornada
para o cliente; caso contrrio uma mensagem de erro ser retornada. Quando falamos em permisses podem ser tanto
permisses NTFS quanto as permisses configuradas no IIS, conforme descrevemos no incio do captulo.
O Arquivo Web.Config
O arquivo Web.Config um arquivo de configurao que fica gravado na pasta raiz da aplicao Web. Por exemplo, no
Captulo 13, utilizamos o Visual Studio .NET, para criar a aplicao AppWebChap13. Na pasta raiz desta aplicao
temos um arquivo chamado Web.Config, o qual contm diversas configuraes para a aplicao. Neste tpico estaremos
modificando algumas opes deste arquivo e testando o efeito das modificaes.
www.juliobattisti.com.br 630
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Listagem 14.1 Arquivo Web.Config para a aplicao Web criada no Captulo 13.
<?xml version=1.0" encoding=utf-8" ?>
<configuration>
<system.web>
<! AUTHENTICATION
This section sets the authentication policies of the application. Possible modes
are
Windows, Forms,
Passport and None
>
<authentication mode=None />
631 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br 632
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
It is recommended that you use this section to prevent your sources being
downloaded.
>
<httpHandlers>
<add verb=* path=*.vb
type=System.Web.HttpNotFoundHandler,System.Web />
<add verb=* path=*.cs
type=System.Web.HttpNotFoundHandler,System.Web />
<add verb=* path=*.vbproj
type=System.Web.HttpNotFoundHandler,System.Web />
<add verb=* path=*.csproj
type=System.Web.HttpNotFoundHandler,System.Web />
<add verb=* path=*.webinfo
type=System.Web.HttpNotFoundHandler,System.Web />
</httpHandlers>
<! GLOBALIZATION
This section sets the globalization settings of the application.
>
<globalization
requestEncoding=utf-8"
responseEncoding=utf-8"
/>
</system.web>
</configuration>
<system.web>
Configurao 1
Configurao 2
...
Configurao n
</system.web>
</configuration>
633 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Onde temos diversos formatos para as clusulas Configurao 1, Configurao 2, ... , Configurao n. Neste tpico
aprenderemos a utilizar clusulas referentes a configuraes de segurana.
Windows built-in authentication: ASP.NET utiliza este tipo de autenticao em conjunto com a autenticao
do IIS. Primeiro a autenticao feita pelo IIS, utilizando um dos seguintes tipos: autenticao bsica, digest,
ou autenticao Integrada do Windows (NTLM). Quando a autenticao do IIS finalizada ASP.NET utiliza
a identidade do usurio autenticado para autorizar ou negar acesso s pginas e demais recursos da aplicao
Web.
Passport-based authentication: Este tipo de autenticao utiliza um servio pago, disponibilizado pela Microsoft.
Com este tipo de autenticao, o usurio se identifica uma nica vez e, automaticamente, estar autenticado
para todos os sites e aplicaes que utilizam a autenticao Passport-based. O inconveniente que o servio
pago; maiores informaes em www.passport.com/business.
Forms authentication: Quando uma requisio recebida e ainda no foi autenticada, isto , o IIS no conhece
o usurio que fez a requisio, esta redirecionada para um formulrio HTML, atravs da utilizao de redireo
HTTP client-side. Neste formulrio o usurio fornece um username e senha para login e envia o formulrio
para o servidor, normalmente clicando em um boto Login. Se a aplicao autentica a requisio, o sistema
cria um cookie que contm as credenciais necessrias autenticao do usurio. O navegador do cliente envia
o cookie em todas as futuras requisies; desta forma o usurio pode continuar acessando a aplicao, sem
digitar um username e senha, enquanto o cookie estiver gravado no seu computador.
Para definir o tipo de autenticao, no arquivo Web.Config, utilizamos a seguinte sintaxe:
<authentication mode=[Windows/Forms/Passport/None]>
outras opes de autenticao utilizadas para a aplicao
</authentication>
Alm disso foi utilizada a sintaxe alternativa, ou seja, ao invs do fechamento </authentication>, utilizamos simplesmente />.
www.juliobattisti.com.br 634
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
<authorization>
<allow users=[lista de usurios, separados por vrgula]
roles=[lista de grupos, separados por vrgula]
verb=[GET/POST/HEAD]
/>
<deny users=[lista de usurios, separados por vrgula]
roles=[lista de grupos, separados por vrgula]
verb=[GET/POST/HEAD]
/>
</authorization>
A definio de uma lista de usurios e grupos do Windows, com permisso de acesso, mais comum em uma Intranet,
onde temos que definir permisses de acesso somente para um grupo especfico de usurios. Vamos supor que exista
uma aplicao Web, com informaes gerenciais sobre o desempenho dos funcionrios, planos de promoo e carreira.
Imagine que somente o Gerente de RH, diretores, vice-presidentes e o presidente devam ter acesso a essa aplicao.
Esta uma situao em que devemos utilizar a autenticao Windows built-in authentication e utilizar uma clusula
<authorization> </authorization> para definir quais os usurios que tm permisso de acesso.
Neste caso a primeira coisa a ser feita definir o tipo de autenticao como Windows:
<authentication mode=Windows/>
allow users contm uma lista de usurios e grupos com permisso de acesso aplicao.
deny users contm uma lista de usurios e grupos, para os quais a permisso de acesso negada.
Ao especificarmos o nome de um usurio, devemos utilizar a nomenclatura completa, na qual especificado o nome
do domnio. Na mquina que estou utilizando, est instalado um domnio Windows 2000 chamado GROZA. Para
especificar uma conta deste domnio utilizo a seguinte nomenclatura:
GROZA\jsilva
GROZA\user1
GROZA\user2
GROZA\Administrador
NOTA: Se a conta pertencer a um Member Server, isto , um servidor que no faz parte de um domnio, basta substituir o
nome do domnio pelo nome do servidor.
635 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Uma vez montada a lista nica vamos entender como so aplicadas as permisses. O processador do ASP.NET vai lendo a
lista de cima para baixo e aplica a configurao que melhor se encaixar; em outras palavras, a configurao mais especfica.
Voc pode ter notado no exemplo que apresentamos anteriormente, onde a permisso atribuda a dois usurios:
www.juliobattisti.com.br 636
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
<deny users=*/>
Aqui precisamos fazer alguns comentrios para que no haja confuso entre a maneira como as permisses so
aplicadas com as clusulas <allow> e <deny>, no arquivo Web.Config e a maneira como o Windows 2000 aplica
permisses NTFS em pastas e arquivos.
Com as permisses NTFS, negar tem precedncia sobre qualquer outra permisso. Ento, se negarmos a permisso de
acesso a uma pasta ou arquivo, para o grupo Todos (Everyone no Windows 2000 em ingls), ningum ter acesso a
pasta ou arquivo, independente de quantos usurios tenham permisses explcitas de acesso. Em resumo, nas permisses
NTFS, negar tem precedncia sobre permitir e as permisses so cumulativas; por exemplo, se um usurio tem permisso
de acesso e o grupo ao qual ele pertence tem negada a permisso de acesso, o usurio herda o negar do grupo e, como
negar tem precedncia sobre permitir, o acesso ser negado.
J para as configuraes do arquivo Web.Config, o comportamento um pouco diferente. Ser aplicada a permisso
mais especfica, ou seja, aquela que estiver mais especificamente definida. Vamos novamente nos reportar ao exemplo
anterior. Os usurios:
637 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
GROZA\Usurio1
GROZA\Usurio2
tm permisso <allow> de acesso definida. O grupo todos (*) tem permisso negada - <deny>. Como os usurios tm
permisso especfica de acesso, estes podero acessar a aplicao. Todos os demais usurios (* - GROZA\Usurio1 -
GROZA\Usurio2) tero permisso de acesso negada. Mais uma vez cabe ressaltar que este comportamento diferente
do que temos com as permisses NTFS em relao a pastas e arquivos em parties NTFS.
Outro uso comum, onde precisamos combinar permisses <allow> e <deny>, para casos em que um determinado
grupo deve ter permisses de acesso e um ou mais elementos do grupo devem ter a permisso negada. Vamos considerar
a seguinte situao de usurios e grupos para um domnio chamado GROZA:
Ns queremos que o grupo gerente tenha permisso de acesso a uma aplicao Web, com exceo dos usurios: user2
e user5. Para implementar estas configuraes de segurana, utilizamos a seguinte clusula <authorization> </au-
thorization>, no arquivo Web.Config da aplicao Web:
<authorization>
<allow roles=GROZA\gerentes />
<deny users=GROZA\user2,GROZA\user5 />
</authorization>
Neste caso o grupo gerentes tem permisso de acesso e, para os usurios user2 e user5, tenho negado, explicitamente,
o acesso. O resultado prtico que os usurios user1, user3 e user4 tm permisso de acesso e os usurios user2 e
user5 no tm permisso de acesso. Observe que para permitir acesso a grupos utilizamos a clusula <allow roles=.../
> e para negar permisso a grupos, utilizamos a clusula <deny roles=.../>.
A utilizao da clusula verb opcional. Esta clusula pode ser utilizada para definir o tipo de requisio que o
usurio pode fazer. Conforme descrevemos anteriormente existem diferentes mtodos de enviar os dados de um
formulrio para processamento no servidor. Os tipos mais comuns so GET e POST. Com a clusula verb podemos
limitar a forma de envio permitida para usurios ou grupos. Vamos a um exemplo prtico.
Vamos definir que os usurios GROZA\user1 e GROZA\user2 devem ter permisso para utilizar o mtodo GET e
todos os demais usurios somente podem utilizar o mtodo POST. Para implementar estas configuraes, utilizamos
a seguinte clusula de autorizao, no arquivo Web.Config:
<authorization>
<allow verb=GET users=GROZA\user1,GROZA\user2 />
<allow verb =POST users=* />
<deny verb = GET users=* />
</authorization>
www.juliobattisti.com.br 638
CAPTULO 14: SEGURANA DE APLICAES WEB COM O IIS 5.0 E ASP.NET
Observe que negamos o verbo GET para todos os usurios, de tal maneira que somente os usurios user1 e user2
tenham a permisso para utilizar GET. Para os demais usurios demos a permisso para utilizar POST.
Podem existir situaes onde precisamos definir diferentes configuraes de acesso, para uma pgina ou pasta da
aplicao Web. Neste caso podemos utilizar a clusula <location> </location> para especificar a qual arquivo ou pasta
as configuraes devem ser aplicadas. No exemplo a seguir, aplicamos as configuraes de acesso que se aplicam
somente pgina dados.aspx.
<location path=dados.aspx>
<system.web>
<authorization>
<allow roles=GROZA\gerentes />
<deny users=GROZA\user2,GROZA\user5 />
</authorization>
</system.web>
</location>
Concluso
Neste captulo aprendemos sobre aspectos bsicos de segurana, tais como:
Tipos de autenticao.
Permisses NTFS do Windows 2000.
Opes de segurana do IIS.
Permisses em nvel de Banco de dados.
Muito existe a ser tratado sobre segurana. Livros inteiros j foram escritos sobre o assunto. Pela experincia de anos
trabalhando com ambientes de Rede Locais e acesso a dados crticos posso afirmar com convico: O primeiro passo
para estabelecer um ambiente seguro a definio de uma poltica de segurana e a ampla divulgao da mesma, para
que todos estejam conscientes de suas responsabilidades em relao segurana.
Muitas vezes cuida-se muito da segurana de acesso lgico aos dados, com a otimizao das configuraes de segurana
do Sistema Operacional, do Servidor Web, das aplicaes Web e do Servidor de Banco de dados. So gastos milhares
de dlares em equipamentos e programas sofisticados para atuarem como Firewall. Investe-se em roteadores e switches
modernos, com capacidades de filtragem de pacotes, deteco de tentativas de invaso e assim por diante. E muitas
vezes a segurana fsica esquecida. De que adianta toda esta segurana no acesso lgico se um desconhecido pode,
facilmente, invadir a sala dos Servidores e sair com uma meia dzia de fitas de Backup embaixo do brao?
639 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Obviamente que o investimento em segurana de acesso lgico aos dados necessrio, porm o aspecto da segurana
no acesso fsico igualmente importante. Pontos como estes devem ser definidos na poltica de segurana da empresa,
a qual deve ser continuamente revisada para se adaptar s freqentes mudanas no mundo da tecnologia.
Na parte final do captulo aprendemos a utilizar o arquivo Web.Config para definir permisses de acesso a aplicaes
Web ou partes especficas da aplicao.
www.juliobattisti.com.br 640
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Introduo CAPTULO
Como o prprio ttulo sugere, este captulo apresenta assuntos variados sobre o
ASP.NET. Veremos uma srie de exemplos e tcnicas teis na criao de pginas
15
e aplicaes Web com ASP.NET. Veremos assuntos que variam de classes do Frame-
work .NET que tratam da requisio do usurio, passando por alguns exemplos
prticos que fazem conexo com banco de dados, seguindo com o conceito de
Code-Behind at questes relacionadas ao controle de segurana atravs do cdigo
ASP.NET.
641 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Para os exemplos apresentados, utilizarei diversos conceitos e tcnicas que foram apresentados nos captulos anteriores,
de tal forma que no irei explic-los novamente. Caso voc tenha alguma dvida em relao aos comandos ou tcnicas
utilizados consulte os captulos iniciais do livro, principalmente os Captulos 10, 11 e 12 quando tratamos do acesso a
bancos de dados, utilizando as classes do ADO.NET.
LIstaPaises: Este controle ir exibir uma lista dos pases para os quais existem pedidos, a partir da tabela
Pedidos do banco de dados NorthWind.mdb.
LIstaCidades: Este controle ir exibir uma lista das cidades para as quais existem pedidos, a partir da tabela
Pedidos do banco de dados NorthWind.mdb. Quando a pgina carregada pela primeira vez, esta lista est
vazia. Quando o usurio seleciona um pas na lista de pases, a pgina recarregada e so exibidas as cidades
para o pas selecionado.
LIstaPedidos: Este controle ir exibir uma lista dos pedidos para a cidade selecionada na lista de cidades.
Quando a pgina carregada pela primeira vez, esta lista est vazia. Quando o usurio seleciona um pas, a
pgina recarregada e so exibidas as cidades para o pas selecionado. A lista de pedidos continua vazia.
Quando o usurio seleciona uma cidade, na lista de cidades, a pgina recarregada e so exibidos os pedidos
para a cidade selecionada. Quando o usurio seleciona um pedido na lista, so exibidas informaes sobre o
pedido. Para exibir as informaes sobre o pedido, utilizamos diversos controles do tipo TextBox.
Na Listagem 15.1 temos o cdigo para o exemplo proposto. Aps a listagem apresentaremos mais alguns comentrios
sobre o exemplo.
<html>
<script language=C# runat=server>
OleDbDataAdapter MeuComando;
String auxSQL1;
String auxSQL2;
String comandoSQL;
www.juliobattisti.com.br 642
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
OcultaControles();
String auxSQL1;
String auxSQL2;
String comandoSQL;
comandoSQL = auxSQL1+auxSQL2;
MinhaConexo = new OleDbConnection(DefineConexo);
ListaPaises.DataSource = source ;
ListaPaises.DataBind();
ListaPaises.Items.Insert(0,);
}
}
void OcultaControles()
{
txtNmeroDoPedido.Visible=false;
643 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
txtCdigoDoCliente.Visible=false;
txtDataDoPedido.Visible=false;
txtFrete.Visible=false;
txtNomeDoDestinatrio.Visible=false;
txtPasDeDestino.Visible=false;
txtCidadeDeDestino.Visible=false;
}
if (ListaPaises.SelectedItem.Value!=)
{
OcultaControles();
auxSQL1 = Select CidadeDeDestino From Pedidos Where PasDeDestino=;
auxSQL2 = ListaPaises.SelectedItem.Value + Group By CidadeDeDestino
Order
By CidadeDeDestino;
comandoSQL = auxSQL1+auxSQL2;
MeuComando.Fill(ds);
www.juliobattisti.com.br 644
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
if (ListaCidades.SelectedItem.Value!=)
{
OcultaControles();
auxSQL1 = Select * From Pedidos Where CidadeDeDestino=;
auxSQL2 = ListaCidades.SelectedItem.Value + Order By NmeroDoPedido;
comandoSQL = auxSQL1+auxSQL2;
MeuComando.Fill(ds);
DataView source = new DataView(ds.Tables[0]);
ListaPedidos.DataSource=source;
ListaPedidos.DataBind();
ListaPedidos.Items.Insert(0,);
}
if (ListaCidades.SelectedItem.Value!=)
{
auxSQL1 = Select * From Pedidos Where NmeroDoPedido=;
auxSQL2 = ListaPedidos.SelectedItem.Value + Order By NmeroDoPedido;
comandoSQL = auxSQL1+auxSQL2;
MeuComando.Fill(ds);
645 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
txtNmeroDoPedido.Visible=true;
txtCdigoDoCliente.Visible=true;
txtDataDoPedido.Visible=true;
txtFrete.Visible=true;
txtNomeDoDestinatrio.Visible=true;
txtPasDeDestino.Visible=true;
txtCidadeDeDestino.Visible=true;
txtNmeroDoPedido.Text = Linha[NmeroDoPedido].ToString();
txtCdigoDoCliente.Text = Linha[CdigoDoCliente].ToString();
txtDataDoPedido.Text = Linha[DataDoPedido].ToString();
txtFrete.Text = Linha[Frete].ToString();
txtNomeDoDestinatrio.Text = Linha[NomeDoDestinatrio].ToString();
txtPasDeDestino.Text = Linha[PasDeDestino].ToString();
txtCidadeDeDestino.Text = Linha[CidadeDeDestino].ToString();
}
}
</script>
<body>
<h3>
<font face=Verdana>
Selecione um Pas na lista de pases.
<BR>
Em seguida uma cidade na lista de cidades.
<BR>
E por ltimo, um pedido na lista de Pedidos.
</font>
</h3>
www.juliobattisti.com.br 646
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
<HR>
<form runat=server>
<div align=left>
<table border=0">
<tr>
<td>
<p align=right>
<B>Selecione um Pas ->></B>
</td>
<td>
<asp:DropDownList
id=ListaPaises
runat=server
BackColor=#c0c0c0"
Font-Bold=True
DataTextField = PasDeDestino
DataValueField = PasDeDestino
AutoPostBack = True
onSelectedIndexChanged = PasSelecionado
>
</asp:DropDownList>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Selecione uma Cidade ->></B>
</td>
<td>
<asp:DropDownList
id=ListaCidades
runat=server
647 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
BackColor=#c0c0c0"
Font-Bold=True
DataTextField = CidadeDeDestino
DataValueField = CidadeDeDestino
AutoPostBack = True
onSelectedIndexChanged = CidadeSelecionada
>
</asp:DropDownList>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Selecione um Pedido ->></B>
</td>
<td>
<asp:DropDownList
id=ListaPedidos
runat=server
BackColor=#c0c0c0"
Font-Bold=True
DataTextField = NmeroDoPedido
DataValueField = NmeroDoPedido
AutoPostBack = True
onSelectedIndexChanged = PedidoSelecionado
>
</asp:DropDownList>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Nmero do Pedido:</B>
</td>
<td>
<asp:TextBox
www.juliobattisti.com.br 648
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
runat=server
id=txtNmeroDoPedido
Text=
TextMode=SingleLine
Font_Face=Arial Font_Size=3"
Height=20"
Width=200"
Enabled=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Cdigo do Cliente:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtCdigoDoCliente
Text=
TextMode=SingleLine
Font_Face=Arial Font_Size=3"
Height=20"
Width=200"
Enabled=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Data do Pedido:</B>
</td>
<td>
<asp:TextBox
649 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
runat=server
id=txtDataDoPedido
Text=
TextMode=SingleLine
Font_Face=Arial Font_Size=3"
Height=20"
Width=200"
Enabled=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Frete:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtFrete
Text=
TextMode=SingleLine
Font_Face=Arial Font_Size=3"
Height=20"
Width=200"
Enabled=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Nome do Destinatrio:</B>
</td>
<td>
<asp:TextBox
www.juliobattisti.com.br 650
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
runat=server
id=txtNomeDoDestinatrio
Text=
TextMode=SingleLine
Font_Face=Arial Font_Size=3"
Height=20"
Width=200"
Enabled=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Pas de Destino:</B>
</td>
<td>
<asp:TextBox
runat=server
id=txtPasDeDestino
Text=
TextMode=SingleLine
Font_Face=Arial Font_Size=3"
Height=20"
Width=200"
Enabled=False
/>
</td>
</tr>
<tr>
<td>
<p align=right>
<B>Cidade de Destino:</B>
</td>
<td>
<asp:TextBox
runat=server
651 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
id=txtCidadeDeDestino
Text=
TextMode=SingleLine
Font_Face=Arial Font_Size=3"
Height=20"
Width=200"
Enabled=False
/>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Digite o cdigo da Listagem 15.1 e salve o mesmo em um arquivo chamado chap15ex1.aspx, na pasta chap15, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Ao carregar a pgina voc obtm o resultado indicado na Figura 15.1. Inicialmente apenas a lista de pases est
preenchida, conforme destacado na Figura 15.1.
Esta lista preenchida com o auxlio do evento Page_Load, onde estabelecemos uma conexo com o banco de dados
NorthWind.mdb e retornamos a lista de pases da tabela Pedidos. Por ltimo adicionamos um elemento em branco (
), como primeiro elemento da lista de Pases. Este elemento adicionado para que nenhum pas esteja selecionado
por padro, ou seja, o usurio deve abrir a lista e selecionar um pas:
ListaPaises.Items.Insert(0,);
Na lista de pises selecione Brasil. Ao selecionar um pas na lista, ser disparado o evento onSelectedIndexChanged,
do controle ListaPaises. Em resposta a este evento, configuramos o procedimento PasSelecionado:
onSelectedIndexChanged = PasSelecionado
O procedimento PasSelecionado faz uma conexo com o banco de dados NorthWind.mdb e retorna apenas as cidades para
o pas selecionado. Os dados retornados so atribudos ao controle ListaCidades, atravs do uso da propriedade DataSource
e do mtodo DataBind. Por ltimo adicionamos um elemento em branco ( ), como primeiro elemento da lista de cidades.
Este elemento adicionado para que nenhuma cidade seja selecionada por padro, ou seja, o usurio deve abrir a lista e
selecionar uma cidade. Abra a lista de cidades e selecione So Paulo, conforme indicado na Figura 15.2.
www.juliobattisti.com.br 652
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
653 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Ao selecionar uma cidade na lista de cidades, ser disparado o evento onSelectedIndexChanged, do controle
ListaCidades. Em resposta a este evento, configuramos o procedimento CidadeSelecionada:
onSelectedIndexChanged = CidadeSelecionada
O procedimento CidadeSelecionada faz uma conexo com o banco de dados NorthWind.mdb e retorna apenas os
pedidos para a cidade selecionada. Os dados retornados so exibidos nos respectivos controles TextBox da pgina. O
procedimento CidadeSelecionada tambm torna a propriedade Visible, dos controles TextBox, igual a True, de tal
forma que estes controles sejam exibidos na pgina. Selecione o pedido nmero: 10494; os dados para o pedido
selecionado sero exibidos, conforme indicado na Figura 15.3.
Se voc selecionar uma outra cidade, os controles TextBox so ocultados e a lista de pedidos ser redefinida para que
sejam exibidos os pedidos para a cidade selecionada. Isto feito pelo procedimento CidadeSelecionada, o qual
disparado toda vez que uma nova cidade for selecionada. Se voc selecionar um novo pas, a lista de cidades ser
redefinida para exibir as cidades do pas selecionado e o controle ListaPedidos ser desabilitado. Quando voc seleciona
uma cidade, na lista de cidades, o controle ListaPedidos habilitado e passa a exibir os pedidos para a cidade selecionada.
Neste exemplo vimos algumas tcnicas interessantes, as quais possibilitam a criao de formulrios para pesquisas
com um ou mais critrios. O grande segredo deste exemplo a correta utilizao da propriedade
onSelectedIndexChanged, do controle DropDownList.
www.juliobattisti.com.br 654
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Na Listagem 15.2 temos o cdigo para o exemplo proposto. Aps a listagem apresentaremos mais alguns comentrios.
<html>
<script language=C# runat=server>
void BuscaDados()
{
// Crio uma conexo com o banco de dados pubs localizado no servidor local.
// Vamos acessar a instncia SERVIDOR\NETSDK.
655 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
}
void Page_Load(Object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
txtTitulo.Text=Clique em Editar para alterar os dados de uma linha!;
BuscaDados();
}
}
www.juliobattisti.com.br 656
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
657 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Linha.BeginEdit();
Linha[au_id] = txtCodAutor;
Linha[au_fname] = txtNome;
Linha[au_lname] = txtSobreNome;
Linha[phone] = txtTelefone;
Linha.EndEdit();
MeuDataAdapter.UpdateCommand= CriaComando.GetUpdateCommand();
MeuDataAdapter.Update(ds,authors);
MinhaGrade.DataSource = source ;
MinhaGrade.DataBind();
}
</script>
<body>
<form runat=server>
<asp:Label
www.juliobattisti.com.br 658
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
id=txtTitulo
Font-Bold=True
runat=server
>
</asp:Label>
<BR>
<asp:Label
id=txtTitulo2"
Font-Bold=True
runat=server
>
</asp:Label>
<HR>
<asp:DataGrid
id=MinhaGrade
BorderColor=black
BorderWidth=1"
CellPadding=3"
AutoGenerateColumns=false
runat=server
EditItemStyle-BackColor=#c0c0c0"
EditItemStyle-ForeColoer=blue
OnEditCommand=FazEdicao
OnUpdateCommand=FazUpdate
OnCancelCommand=CancelaAlteracoes
>
<HeaderStyle
BackColor=#00aaaa
Font-Bold=True
Font-Name=Courier New
ForeColor=White
>
659 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
</HeaderStyle>
<Columns>
<asp:BoundColumn
HeaderText=Cdigo
DataField=au_id
ItemStyle-BackColor=#c0c0c0"
>
</asp:BoundColumn>
<asp:BoundColumn
HeaderText=Nome
DataField=au_fname
ItemStyle-Font-Italic=True
ItemStyle-Font-Name=Courier New
>
</asp:BoundColumn>
<asp:BoundColumn
HeaderText=Sobrenome
DataField=au_lname
ItemStyle-Font-Italic=True
ItemStyle-Font-Name=Courier New
>
</asp:BoundColumn>
<asp:BoundColumn
HeaderText=Telefone
DataField=phone
ItemStyle-BackColor=#c0ffff
ItemStyle-Font-Bold=True
>
www.juliobattisti.com.br 660
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
</asp:BoundColumn>
<asp:EditCommandColumn
EditText=Editar
CancelText=Cancelar
UpdateText=Atualizar
/>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
Digite o cdigo da Listagem 15.2 e salve o mesmo em um arquivo chamado chap15ex2.aspx, na pasta chap15, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Ao carregar a pgina voc obtm uma tabela com os dados sobre os autores. Observe a ltima coluna onde temos um
link Editar, conforme indicado na Figura 15.4.
D um clique no link Editar, da primeira linha. Observe que os dados da linha passaram a ser exibidos em controles do
tipo TextBox, nos quais podemos fazer as alteraes necessrias. Altere o sobrenome do autor para Battisti, conforme
indicado na Figura 15.5.
Observe que na ltima coluna, da primeira linha, ao invs do link Editar, passaram a ser exibidos dois links. Se voc
clicar no link Atualizar, as alteraes sero enviadas para o banco de dados. Se voc clicar no link Cancelar, as
alteraes sero descartadas e o DataGrid sair do modo de edio e voltar a ser exibido somente o link Editar.
D um clique no boto Atualizar para confirmar as alteraes. Observe que o sobrenome foi atualizado para Battisti e
o DataGrid continua no modo de edio. Agora altere o sobrenome do autor da primeira linha, de volta para Bennet.
D um clique no boto Cancelar. Observe que a ltima alterao cancelada, isto , o sobrenome continua sendo
Battisti e o DataGrid saiu do modo de edio, conforme indicado na Figura 15.6.
661 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br 662
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Criamos um DataGrid, onde as colunas foram definidas manualmente, utilizando as tags <columns> </columns>.
Para cada campo a ser exibido criamos uma coluna do tipo BoundColumn. O nome do campo associado com a
coluna definido pela propriedade DataField, como para a primeira coluna, que ir exibir dados do campo au_id:
<asp:BoundColumn
HeaderText=Cdigo
DataField=au_id
ItemStyle-BackColor=#c0c0c0"
>
Para exibir a ltima coluna, onde so exibidos os links Editar, Atualizar ou Cancelar, dependendo do modo em que se
encontra o DataGrid, utilizamos uma coluna do tipo EditCommandColumn:
<asp:EditCommandColumn
EditText=Editar
CancelText=Cancelar
UpdateText=Atualizar
/>
663 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Poderamos definir uma srie de propriedades desta coluna, porm definimos apenas o texto para o link de cada um
dos comandos: Editar, Cancelar e Atualizar.
Na def inio do DataGrid def inimos que as colunas no sero geradas automaticamente
AutoGenerateColumns=false. A parte mais importante da definio do DataGrid a especificao dos
procedimentos que sero executados quando o usurio clicar nos links Editar, Atualizar e Cancelar. Isto feito
atravs da definio das propriedades OnEditCommand (executado quando o usurio clica no link Editar),
OnUpdateCommand (executado quando o usurio clica no link Atualizar) e OnCancelCommand (executado
quando o usurio clica no link Cancelar). A seguir temos a definio do DataGrid:
<asp:DataGrid
id=MinhaGrade
BorderColor=black
BorderWidth=1"
CellPadding=3"
AutoGenerateColumns=false
runat=server
EditItemStyle-BackColor=#c0c0c0"
EditItemStyle-ForeColoer=blue
OnEditCommand=FazEdicao
OnUpdateCommand=FazUpdate
OnCancelCommand=CancelaAlteracoes
>
Quando a pgina carregada pela primeira vez, isto , quando no for um PostBack, o texto do incio da pgina
definido e o procedimento BuscaDados chamado. Este procedimento faz a conexo com o banco de dados e
exibe as informaes obtidas no controle DataGrid. Neste momento est habilitado apenas o link Editar.
if (!Page.IsPostBack)
{
txtTitulo.Text=Clique em Editar para alterar os dados de uma linha!;
BuscaDados();
}
Quando o usurio clica no link Editar, dispara o evento OnEditCommand e executado o procedimento
FazEdicao. Este procedimento altera o texto dos labels txtTitulo e txtTitulo1 e coloca a linha onde o usurio
clicou no link Editar, no modo de edio:
void FazEdicao(Object sender, DataGridCommandEventArgs e)
{
txtTitulo.Text=Clique em Atualizar para Confirmar as alteraes!;
txtTitulo2.Text=ou Clique em Cancelar para descartar as alteraes!;
MinhaGrade.EditItemIndex = e.Item.ItemIndex;
BuscaDados();
}
www.juliobattisti.com.br 664
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
O ndice da linha onde o usurio clicou retornado pela propriedade ItemIndex do argumento e (do tipo
DataGridCommandEventArgs), passado como parmetro para o procedimento. Este ndice atribudo propriedade
EditItemIndex do DataGrid. O efeito prtico colocar a respectiva linha no modo de edio.
Quando o usurio clica no link Cancelar, as alteraes so abandonadas, o texto dos labels atualizado e o DataGrid
retirado do modo de edio e o procedimento BuscaDados chamado para reexibir os dados no DataGrid:
void CancelaAlteracoes(Object sender, DataGridCommandEventArgs e)
{
txtTitulo.Text=Clique em Editar para alterar os dados de uma linha!;
txtTitulo2.Text=;
MinhaGrade.EditItemIndex = -1;
BuscaDados();
}
Agora vamos analisar o procedimento FazUpdate, que o procedimento mais complexo. Na parte inicial deste
procedimento criamos os objetos para conexo com o banco de dados e preenchimento de um objeto DataView,
com as informaes originais da tabela authors.
O prximo passo acessar os valores que foram digitados nos controles TextBox, da linha que est sendo editada. O
ASP.NET cria uma coleo de controles do tipo TextBox, para a linha que est sendo editada. O primeiro controle
possui o 0, o segundo o ndice 1 e assim por diante. Para atribuir estes valores a variveis do tipo string, utilizamos a
seguinte sintaxe:
O argumento e do tipo DataGridCommandEventArgs. Este argumento tem uma propriedade chamada Item, a qual
uma referncia linha atual do DataGrid, ou seja, a linha que estamos editando. A propriedade Item baseada na
classe DataGridItem, a qual possui uma coleo chamada Cells, coleo esta que representa todas as colunas (cada
coluna considerada uma clula) do DataGrid. Ento considere a seguinte referncia:
e.Item.Cells[0] uma referncia primeira coluna da linha que est sendo editada.
e.Item.Cells[1] uma referncia segunda coluna da linha que est sendo editada e assim por diante.
Em cada clula do DataGrid posso ter um ou mais controles. Estes controles fazem parte da coleo Controls da
clula. O primeiro controle acessado pelo ndice 0 Controls[0], o segundo pelo ndice 1 Controls[1] e assim por
diante. No nosso caso temos ento:
e.Item.Cells[0].Controls[0] uma referncia ao primeiro controle da primeira coluna da linha que est sendo editada.
665 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
e.Item.Cells[1].Controls[0] uma referncia ao segundo controle da segunda coluna da linha que est sendo
editada e assim por diante.
Cada controle, no nosso exemplo, um objeto do tipo TextBox. Para acessar o valor contido neste controle, utilizamos
a sua propriedade Text. Finalmente chegamos seguinte concluso:
Alm disso, tivemos que fazer uma converso explcita, para o tipo TextBox. Isto feito colocando-se o tipo TextBox
entre parnteses na frente de cada um dos comandos.
De posse destes valores, utilizamos os passos aprendidos no Captulo 12, para enviar as atualizaes para o banco de
dados. Em resumo:
Para maiores detalhes sobre estes passos, consulte o Captulo 12, onde apresentamos explicaes detalhadas sobre
cada um destes passos.
Sem dvida a parte mais complexa deste procedimento o entendimento de como feita a referncia aos valores
contidos em cada coluna da linha que est sendo editada. Podemos ver que existe uma hierarquia bem definida. O
DataGrid formado por uma coleo de linhas. Cada linha formada por uma coleo de colunas. Cada coluna
pode conter um ou mais controles, os quais fazem parte da coleo Controls da coluna. Cada controle um objeto
com uma srie de propriedades e mtodos. Utilizamos a propriedade Text do controle, para acessar o valor contido
em cada controle.
Com o ASP 3.0, para implementarmos a mesma funcionalidade vista neste exemplo, temos que utilizar um componente
COM vendido separadamente. Este componente simula as funcionalidades de edio que o DataGrid nos fornece
apenas com a configurao de umas poucas propriedades.
www.juliobattisti.com.br 666
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
CdigoDoCliente
NomeDaEmpresa
Endereo
Cidade
Pas
Telefone
Na Listagem 15.3 temos o cdigo para o exemplo proposto. Aps a listagem apresentaremos mais alguns comentrios
sobre o exemplo.
//You must use the $ after the object you reference in the spreadsheet
667 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
myCommand.Fill(myDataSet, Clientes);
MinhaGrade.DataSource = myDataSet.Tables[0].DefaultView;
MinhaGrade.DataBind();
}
</script>
<body>
<B>
<asp:Label
id=Label1
runat=server
>
<HR>
Dados da planilha C:\Clientes.xls
<HR>
</asp:Label>
</B>
<asp:DataGrid
id=MinhaGrade
HeaderStyle-BackColor=#c0c0c0"
HeaderStyle-Font-Bold=True
runat=server
/>
</body>
</html>
Digite o cdigo da Listagem 15.3 e salve o mesmo em um arquivo chamado chap15ex3.aspx, na pasta chap15, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Ao carregar a pgina voc obtm o resultado indicado na Figura 15.7, onde so exibidos os dados da planilha Clientes.xls.
www.juliobattisti.com.br 668
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Para fazer a conexo com uma planilha do Excel, utilizamos um objeto OleDbConnection; porm na definio
da String de Conexo, utilizamos um atributo a mais:
string strConn;
strConn = Provider=Microsoft.Jet.OLEDB.4.0; +
Data Source=C:\\Meus documentos\\Clientes.xls; +
Extended Properties=Excel 8.0;;
O atributo Extended Properties=Excel 8.0 que informa que o arquivo est no formato do Excel.
Observe que, aps o nome da planilha, devemos colocar um sinal de cifro [Plan1$]
Poderamos, tambm, selecionar colunas individuais da planilha. Para isso basta alterar o comando SQL. Por exemplo,
se quisssemos exibir apenas as colunas Cdigo do Cliente e Nome da Empresa, utilizaramos o seguinte comando:
669 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O restante do cdigo no tem maiores novidades. O nico detalhe diferente dos exemplos anteriores que, ao
invs de criar explicitamente um objeto do tipo DataView, utilizamos a propriedade DefaultView, da primeira (e
nica) tabela, da coleo de tabelas do objeto DataSet, para definir a propriedade DataSource do objeto DataGrid:
MinhaGrade.DataSource = myDataSet.Tables[0].DefaultView;
MinhaGrade.DataBind();
Este exemplo demonstra o poder e flexibilidade das classes do namespace System.Data.OleDb. Poderamos, sem
maiores problemas, exibir na mesma pgina ASP.NET dados de um banco de dados do SQL Server, de uma tabela de
um arquivo do Microsoft Access, de uma planilha do Microsoft Excel e de uma planilha do Lotus 123. Poderamos
inclusive fazer clculos com dados das diferentes fontes e salvar os resultados em um banco de dados do ORACLE.
Esta flexibilidade e possibilidade de trabalhar com diferentes formatos de dados que torna o Framework .NET uma
opo muito interessante como plataforma para o desenvolvimento de aplicaes empresarias, quer sejam aplicaes
Web, quer sejam aplicaes tradicionais.
www.juliobattisti.com.br 670
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
volta no seu navegador. Para que os resultados estejam corretos, necessrio que a lgica da pgina tenha sido
implementada corretamente. Esta lgica pode ser implementada na prpria pgina, na seo de cdigo ou em um
arquivo separado, quando ento estamos utilizando o conceito de Code Behind. Para ter acesso ao cdigo gravado em
um arquivo separado, fazemos uma referncia ao arquivo, nas pginas onde iremos utiliz-lo.
O arquivo com o cdigo responsvel pela lgica pode ser criado com qualquer linguagem habilitada ao .NET. Por
exemplo, pode ser um arquivo com a extenso .vb, criado com o VB.NET ou um arquivo com a extenso .cs, criado
com o C#. Na pgina, onde o arquivo .vb ou .cs deve ser utilizado, devemos incluir uma referncia ao mesmo, utilizando
as clusulas Inherits e Src, na diretiva @Page, conforme exemplo a seguir:
Considere o exemplo:
Vamos a um exemplo prtico, onde colocaremos o cdigo responsvel por fazer a conexo com o banco de dados
NorthWind.mdb em um arquivo chamado conecta.cs. Neste arquivo criaremos uma classe chamada Conecta. Em
seguida criaremos uma pgina ASP.NET que faz uso do cdigo contido no arquivo conecta.cs.
671 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
String auxSQL1;
String auxSQL2;
String auxSQL3;
String ComandoSQL;
ComandoSQL= auxSQL1+auxSQL2+auxSQL3;
MinhaGrade1.DataSource = source ;
MinhaGrade1.DataBind();
}
}
O mecanismo de Code Behind baseado na idia de herana. Observe, pelo cdigo da Listagem 15.4, que criamos
uma nova classe chamada Conecta. A classe Conecta baseada na classe Page. Isto feito porque a classe Conecta
ser herdada pelas pginas ASP.NET onde a classe for utilizada. Como ser herdada por pginas ASP.NET, a classe
Conecta definida como do tipo Page, que a classe bsica para todas as pginas ASP.NET. Alm disso utilizamos
uma srie de diretivas using, para fazer referncia aos namespaces utilizados pela classe:
using System;
using System.Data;
using System.Data.OleDb;
using System.Web.UI;
using System.Web.UI.WebControls;
public class Conecta: Page
www.juliobattisti.com.br 672
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Em seguida declaramos uma varivel pblica do tipo DataGrid. A declarao desta varivel necessria para que
possamos fazer a ligao dos dados do objeto DataView, criado no procedimento Page_Load, com o controle DataGrid,
da pgina que ir utilizar o cdigo da classe Conecta.
Em seguida criamos um procedimento para o evento Page_Load. O cdigo deste procedimento simplesmente faz a
conexo com o banco de dados NorthWind.mdb e retorna alguns campos da tabela Clientes. Em seguida estes dados
so exibidos em um controle DataGrid.
Agora vamos criar uma pgina ASP.NET que utiliza o cdigo da classe Conecta, contido no arquivo conecta.cs.
Considere o cdigo da Listagem 15.5.
<html>
<body>
<HR>
<B> Exemplo de utilizao de Code Behind.</B>
<HR>
<ASP:DataGrid
id=MinhaGrade1"
runat=server
Width=500"
BackColor=#c0c0c0"
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0"
Font-Name=Verdana
Font-Bold=True
Font-Size=7pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
<HR>
</body>
</html>
673 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o cdigo da Listagem 15.5 e salve o mesmo em um arquivo chamado chap15ex4.aspx, na pasta chap15, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Para acessarmos a classe Conecta, utilizamos a diretiva @Page, conforme indicado a seguir:
Como o arquivo conecta.cs est na mesma pasta da pgina Chap15ex4.aspx, informamos somente o nome do arquivo.
Caso o arquivo .cs estivesse em uma subpasta, digamos Codigos, da pasta onde est a pgina .aspx, teramos que
informar o caminho completo, conforme indicado no exemplo a seguir:
A utilizao de Code Behind traz inmeras vantagens, dentre as quais podemos destacar:
www.juliobattisti.com.br 674
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
O mecanismo de Code Behind demonstra, mais uma vez, o fato de os conceitos de Orientao a Objetos estarem
presentes em todos os aspectos do Framework .NET. A possibilidade de codificar a lgica em uma classe separada e
poder utilizar esta lgica em uma ou mais pginas ASP.NET nada mais do que a implementao prtica do conceito
de reaproveitamento de cdigo em aplicaes Web.
O Objeto HttpRequest
Quando o usurio digita um endereo e pressiona Enter, ou clica no boto Enviar de um formulrio, o navegador
monta uma requisio e envia esta requisio, via HTTP, para o servidor. Na requisio enviada pelo navegador, existe
uma srie de informaes. O objeto HttpRequest nos d acesso s informaes contidas na requisio enviada pelo
navegador do cliente. Para acessarmos este objeto utilizamos simplesmente Request, conforme veremos nos exemplos
no final deste tpico.
O objeto HttpRequest baseado na classe HttpRequest, do namespace System.Web. A propriedade Request, do objeto
Page, retorna um objeto do tipo HttpRequest, o qual contm informaes sobre a requisio feita pelo cliente. Por isso
podemos utilizar diretamente Request, em uma pgina ASP.NET, que esta propriedade estar fazendo referncia a um
objeto HttpRequest.
Com o ASP 3.0, para acessarmos as chamadas Server Variables (nmero IP do cliente, tipo de navegador, etc.),
tnhamos que utilizar a coleo ServerVariables. Com o objeto HttpRequest, do ASP.NET, as variveis de servidor
esto disponveis como propriedades do objeto HttpRequest.
Na Tabela 15.1, temos uma descrio das principais propriedades do objeto HttpRequest.
Propriedade Descrio
AcceptTypes Retorna um Array de strings, com todos os Mime Types aceitos pelo navegador do cliente.
ApplicationPath Retorna uma String, indicando o caminho virtual para a pastaraiz da aplicao.
Browser Retorna um objeto do tipo HttpBrowserCapabilities. As propriedades deste objeto
fornecem informaes sobre o navegador do cliente.
675 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Propriedade Descrio
Browser Retorna um objeto do tipo HttpBrowserCapabilities. As propriedades deste objeto
fornecem informaes sobre o navegador do cliente.
ClientCertificate Retorna um objeto do tipo HttpClientCertificate. As propriedades deste objeto fornecem
informaes sobre o certificado de segurana do Cliente.
ContentLength Retorna o tamanho, em bytes, da requisio enviada pelo cliente.
ContentType Retorna uma string indicando o tipo do contedo requisitado pelo cliente.
Cookies Retorna uma coleo de Cookies, enviados na requisio do cliente.
HttpMethod Retorna o mtodo HTTP de transferncia utilizado pelo cliente. Pode ser: GET, POST ou
HEAD.
IsSecuryConnection Retorna True se a conexo est utilizando HTTPS (sockets seguros) e False, caso contrrio.
Path Retorna o caminho virtual da requisio atual.
PhysicalPath Retorna o caminho fsico correspondente a URL contida na requisio.
QueryString Nos d acesso s variveis passadas na prpria URL, quando utilizado o mtodo GET
para enviar as informaes contidas no campo de um formulrio.
Url Retorna informaes sobre a URL da requisio atual.
UserAgent Retorna uma string que identifica o navegador do Cliente. Porexemplo: MSIE identifica
o Internet Explorer da Microsoft.
UserHostAddres Retorna o nmero IP da estao do cliente.
UserHostName Retorna o nome DNS da estao do cliente.
A seguir temos um exemplo, onde utilizamos a propriedade Browser para exibir as capacidades do navegador do
cliente.
HttpBrowserCapabilities bc = Request.Browser;
Response.Write(<HR>);
www.juliobattisti.com.br 676
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
</script>
<body>
</body>
</html>
Digite o cdigo da Listagem 15.6 e salve o mesmo em um arquivo chamado chap15ex6.aspx, na pasta chap15, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
677 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Utilizamos o evento PageLoad da pgina, onde criamos um objeto do tipo HttpBrowserCapabilities. Para criar este
objeto utilizamos a propriedade Browser do objeto Request:
HttpBrowserCapabilities bc = Request.Browser;
Depois utilizamos uma srie de comando Response.Write, para retornar o valor das diversas propriedades do navegador
do cliente.
www.juliobattisti.com.br 678
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
HttpClientCertificate cs = Request.ClientCertificate;
Response.Write(ClientCertificate Settings:<br>);
Response.Write(Certificate = + cs.Certificate + <br>);
Response.Write(Cookie = + cs.Cookie + <br>);
Response.Write(Flags = + cs.Flags + <br>);
Response.Write(IsPresent = + cs.IsPresent + <br>);
Response.Write(Issuer = + cs.Issuer + <br>);
Response.Write(IsValid = + cs.IsValid + <br>);
Response.Write(KeySize = + cs.KeySize + <br>);
Response.Write(SecretKeySize = + cs.SecretKeySize + <br>);
Response.Write(SerialNumber = + cs.SerialNumber + <br>);
Response.Write(ServerIssuer = + cs.ServerIssuer + <br>);
Response.Write(ServerSubject = + cs.ServerSubject + <br>);
Response.Write(Subject = + cs.Subject + <br>);
Response.Write(ValidFrom = + cs.ValidFrom + <br>);
Response.Write(ValidUntil = + cs.ValidUntil + <br>);
Response.Write(Whats this = + cs.ToString() + <br>);
String Caminho;
Caminho = Request.Path;
Response.Write(<HR>);
Response.Write(Propriedade Path = + Caminho + <br>);
String FileCaminho;
FileCaminho = Request.FilePath;
Response.Write(<HR>);
Response.Write(Propriedade FilePath = + FileCaminho + <br>);
String FisicalFileCaminho;
FisicalFileCaminho = Request.PhysicalApplicationPath;
Response.Write(<HR>);
Response.Write(Propriedade PhysicalFilePath = + FisicalFileCaminho + <br>);
String FisicalCaminho;
679 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
FisicalCaminho = Request.PhysicalPath;
Response.Write(<HR>);
Response.Write(Propriedade PhysicalPath = + FisicalCaminho + <br>);
}
</script>
<body>
</body>
</html>
Digite o cdigo da Listagem 15.7 e salve o mesmo em um arquivo chamado chap15ex7.aspx, na pasta chap15, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Utilizamos o evento PageLoad da pgina, onde exibimos informaes sobre o certificado de segurana do cliente e
informaes sobre as diversas variveis Path do objeto HttpRequest.
www.juliobattisti.com.br 680
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Tambm exibimos informaes sobre o endereo IP do cliente. Como estou utilizando o endereo http://localhost,
observe que est sendo retornado o IP 127.0.0.1, que o IP associado com o nome local localhost.
O Objeto HttpResponse
O objeto HttpResponse utilizado para enviar informaes para o navegador do cliente, em resposta a uma requisio.
A propriedade Response, do objeto Page, retorna um objeto do tipo HttpResponse. Este objeto derivado da classe
HttpResponse, do namespace System.Web. Por isso este objeto, suas propriedades e mtodos podem ser utilizados
diretamente em uma pgina ASP.NET.
Quando uma pgina requisitada, criada uma instncia da classe page na memria do servidor, conforme descrito
no Captulo 6. Em qualquer local desta pgina podemos utilizar a propriedade Response; na prtica como se tivssemos
criado uma instncia da classe HttpResponse. Por isso que, nos exemplos anteriores, utilizamos diretamente
Response.Write. Quando fizemos isso, estamos utilizando o mtodo Write, da classe HttpResponse, classe essa acessada
atravs da propriedade Response da pgina, ou diramos melhor, da classe Page.
Na Tabela 15.2, temos uma descrio das principais propriedades do objeto HttpResponse.
Propriedade Descrio
Buffer Pode ser definido em True ou False. Se for True, toda a resposta ser processada, antes de
ser enviada para o navegador do cliente. Caso seja False, medida que a resposta for
sendo processada, ser enviada para o navegador do cliente.
BufferOutput Pode ser definido em True ou False. Se for True, toda a pgina ser processada, antes de
ser enviada para o navegador do cliente. Caso seja False, medida que a pgina for
sendo processada, ser enviada para o navegador do cliente.
Cache Retorna um objeto do tipo HttpCachePolicy com informaes sobre as configuraes de
cache para a resposta atual.
Cookies Retorna a coleo de Cookies contida na resposta para o navegador do cliente.
Write O mtodo mais conhecido do objeto HttpResponse , sem dvidas, o mtodoWrite, que
utilizado para enviar texto para o navegador do Cliente. Com o ASP 3.0, utilizvamos,
intensamente, o mtodo Write (Response.Write) para enviar as tags HTML que formavam
a pgina de resposta, pgina esta que era enviada de volta para o cliente. Com os Web
Server Controls (vistos nos Captulos 7, 8 e 9) e suas funcionalidades avanadas, o uso de
Response.Write ficou bastante reduzido no ASP.NET, conforme podemos constatar nos
diversos exemplos deste livro.
681 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Diretivas de Pgina
As diretivas de pgina so utilizadas para definir uma srie de comportamentos que influenciam a maneira como
uma pgina processada e exibida no navegador do cliente. As diretivas podem ser includas em qualquer local da
pgina, mas de praxe colocarmos as diretivas no incio da pgina. Uma diretiva pode conter um ou mais atributos,
que definem configuraes relacionadas com a diretiva.
A Diretiva @Page
Esta diretiva utilizada para definir atributos especficos para a pgina ASP.NET. Os atributos so utilizados pelo
processador ASP.NET para definir como a pgina ser processada, se ser ou no mantida em cache, como a resposta
ser enviada para o cliente e assim por diante. A diretiva @Page somente pode ser utilizada em arquivos do tipo .aspx.
AspCompact: Pode conter o valor true ou false. Se for definida em true permite que a pgina .aspx acesse
componentes COM antigos, criados em VB, que utilizam o modelo de Single-thread Apartment STA, para
alocao de memria e execuo.
Exemplo: <% @Page AspCompact=true %>
Buffer: Define se o buffer est ou no habilitado. Pode conter os valores true ou false.
Exemplo: <% @Page Buffer=false %>
ClientTarget: Pode ser utilizado para informar ao processador ASP.NET qual o navegador do cliente, uma vez
que a maneira como os controles so processados otimizada para cada tipo de navegador. Somente so
vlidos os valores aceitveis pela propriedade User Agent, do objeto HttpRequest.
Debug: Pode ser do tipo true ou false. J utilizamos em alguns exemplos deste livro. Se for definida em true,
quando a pgina compilada, o processo de debug estar habilitado. Com o processo de debug habilitado,
mais informaes so geradas caso acontea algum erro. Esta opo muito til quando a pgina est em
desenvolvimento, devendo ser desabilitada quando a pgina estiver disponvel para uso. O padro false.
Exemplo: <% @Page Debug=true %>
EnableViewState: Pode conter os valores true ou false. Se for true (o padro), o estado ser mantido para a
pgina e para os controles da pgina; se for false, o estado no ser mantido.
ErrorPage: Define a URL de uma pgina de erro, para a qual o processamento ser redirecionado caso acontea
algum erro para o qual no foi feito o devido tratamento de excees. Para mais informaes sobre o tratamento
de excees, consulte o Captulo 5.
Inherits: Utilizada para configurao do mecanismo de Code Behind. Para maiores detalhes consulte o tpico
Um conceito importante: Code Behind, neste captulo.
www.juliobattisti.com.br 682
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Language: Utilizada para definir a linguagem que ser utilizada na pgina. Na prtica define qual o compilador
que deve ser utilizado para compilar a pgina. Se no utilizarmos esta diretiva, ser utilizada a linguagem VB.NET.
<%@ Page Language=C# %>
Src: Informa o caminho para o arquivo contendo o cdigo da classe especificada no atributo Inherits. Para
maiores detalhes consulte o tpico Um conceito importante: Code Behind, neste captulo.
A Diretiva @Import
Esta diretiva utilizada para fazer referncia a um namespace. Se formos utilizar classe de um namespace, precisamos
utilizar a diretiva import para fazer referncia ao respectivo namespace. Por exemplo, quando utilizamos classes do
namespace System.Data.OleDb, para fazer conexo com um banco de dados do Microsoft Access, precisamos utilizar
a seguinte diretiva:
Em cada diretiva @Import somente podemos fazer referncia a um namespace. Para fazermos referncia a diversos
namespaces devemos utilizar vrias diretivas @Import.
Existe um conjunto de namespaces aos quais j feita referncia automtica, ou seja, no precisamos fazer referncia
explcita, utilizando a diretiva @Import. Na lista a seguir temos os namespaces aos quais feita referncia,
automaticamente:
System
System.Collections
System.Collections.Specialized
System.Configuration
System.IO
System.Text
System.Text.RegularExpressions
System.Web
System.Web.Caching
System.Web.Security
System.Web.SessionState
System.Web.UI
System.Web.UI.HtmlControls
System.Web.UI.WebControls
Outras Diretivas
Existem outras diretivas, utilizadas com menor freqncia: @Import, @Implements, @Register, @Assembly,
@OutputCache e @Reference. Para maiores informaes sobre estas diretivas consulte a documentao do Frame-
683 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
work .NET no seguinte tpico: .NET Framework Reference -> ASP.NET Syntax -> Web Forms Syntax -> Direc-
tive Syntax.
Os objetos e mtodos que veremos neste tpico so utilizados com a autenticao do tipo Windows, a qual normalmente
utilizada em ambientes de Intranet ou Extranet. Neste caso cada usurio cadastrado e faz o logon com a sua conta
de usurio. O usurio pode pertencer a um ou mais grupos.
Gerentes GROZA\suser1
GROZA\suser2
Funcionarios GROZA\user2
GROZA\user3
www.juliobattisti.com.br 684
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
A propriedade User retorna um objeto do tipo IPrincipal, derivado da classe IPrincipal, do namespace
System.Security.Principal. A principal propriedade da classe IPrincipal a propriedade IDentity, a qual uma instncia
da classe IDentity, do namespace System.Security.Principal. Atravs das propriedades da classe IDentity que temos
acesso s informaes do usurio que fez a requisio. Esta classe fornece uma srie de propriedades, conforme
indicado na Tabela 15.3.
Na Tabela 15.3, temos uma descrio das principais propriedades da classe IDentity.
Propriedade Descrio
AuthenticationType Retorna o tipo de autenticao.
IsAuthenticated Retorna true se o usurio foi autenticado com sucesso e false, caso contrrio.
Name Retorna o nome do usurio autenticado.
O tipo de objeto IDentity retornado diferente, para os diferentes tipos de identificao. Para a autenticao Win-
dows, o objeto retornado do tipo WindowsIdentity, derivado da classe de mesmo nome, pertencente ao namespace
System.Security.Principal.
Vamos inicialmente a um exemplo simples, onde retornaremos algumas informaes sobre o usurio autenticado.
Antes de apresentarmos o exemplo, vamos configurar o arquivo Web.Config, para a pasta Chap15, de tal forma que
esteja habilitada a autenticao do tipo Windows. Crie o arquivo Web.Config indicado na Listagem 15.8 e salve-o na
pasta Chap15:
<authorization>
<allow roles=GROZA\Gerentes,GROZA\Funcionrios
users=GROZA\suser1,GROZA\suser2,GROZA\suser3"/>
<deny users=* />
</authorization>
</system.web>
</configuration>
685 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Ao tentar acessar uma pgina da aplicao Web Chap15, o usurio receber uma tela de
logon conforme indicado na Figura 15.12.
IMPORTANTE:No se
esquea de configurar a
pasta Chap15 como uma
aplicao Web. Para maiores
informaes sobre como
tornar uma pasta virtual em
uma aplicao Web, consulte
o Captulo 13.
Figura 15.12: Tela de logon autenticao do tipo Windows habilitada no arquivo Web.Config.
Se o usurio fornecer um nome de logon que no tem permisso de acesso, a tela de logon ser exibida novamente. Isto
feito trs vezes, e aps a terceira tentativa, ser exibida a mensagem de erro indicada na Figura 15.13.
www.juliobattisti.com.br 686
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Se voc clicar no boto Cancelar, na tela de logon, tambm ser emitida a mensagem da Figura 15.1.
Conforme configurado no nosso arquivo Web.Config, somente os usurios suser1, suser2 e suser3,do domnio GROZA
e os participantes dos grupos Gerentes ou os participantes do grupo Funcionrios tm permisso para acessar as
pginas da aplicao Web Chap15. Agora vamos tentar fazer o logon como um dos usurios que tm permisso de
acesso. Vou utilizar o usurio suser1, o qual cadastrei com a senha: abc12345. Vou tentar acessar a pgina
Chap15ex7.aspx, criada anteriormente. Ao acessar esta pgina ser exibida a tela de logon. Digite as informaes de
logon indicadas na Figura 15.14 (senha=abc12345).
Exemplo: Agora vamos a um exemplo mais completo. Criaremos um exemplo chamado Chap15ex8.aspx. Neste exemplo
utilizaremos o objeto Identity e o mtodo IsInRole, para determinar se o usurio pertence ao grupo Gerentes ou ao
grupo Funcionrios. Dependendo do grupo ao qual pertencer o usurio sero exibidas diferentes verses da pgina.
<html>
687 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
f (User.IsInRole(GROZA\\Gerentes))
{
MostraNome.Text = Sr. Gerente: + NomeDoUsuario + , seja bem
vindo!;
MostraTipo.Text = Voc est autenticado usando: + TipoDeAutenticacao;
Mensagem.Text = INFORMAES SOBRE CLIENTES!;
MinhaGrade.DataSource = source ;
MinhaGrade.DataBind();
}
else
{
MostraNome.Text = Prezado Funcionrio: + NomeDoUsuario +
, seja bem vindo!;
MostraTipo.Text = Voc est autenticado usando: + TipoDeAutenticacao;
Mensagem.Text = VOC NO TEM PERMISSO PARA ACESSAR AS
INFORMAES DE CLEINTES!;
}
}
</script>
<body>
www.juliobattisti.com.br 688
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
<asp:Label
id=MostraNome
Text=
Font-Bold=True
BackColor=#c0c0c0"
runat=server
/>
<BR>
<asp:Label
id=MostraTipo
Text=
Font-Bold=True
BackColor=#000000"
ForeColor=#ffffff
runat=server
/>
<BR>
<asp:Label
id=Mensagem
Text=
Font-Bold=True
BackColor=#c0c0c0"
runat=server
/>
<HR>
689 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
MaintainState=false
/>
</body>
</html>
Digite o cdigo da Listagem 15.8 e salve o mesmo em um arquivo chamado chap15ex8.aspx, na pasta chap15, dentro
da pasta wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
Quando for solicitada a tela de logon faa o logon com as seguintes informaes:
Como o usurio suser2 faz parte do grupo Gerentes, voc obter os resultados indicados na Figura 15.15.
www.juliobattisti.com.br 690
CAPTULO 15: CAIXA DE FERRAMENTAS DO ASP.NET
Para garantir que a pgina de logon seja solicitada novamente, feche o navegador, faa o logoff do sistema operacional
(Iniciar -> Desligar -> Efetuar o logoff de...). Faa o logon como administrador e acesse a pgina Chap15ex8.aspx. Na
tela de logon digite as seguintes informaes:
Como o usurio suser3 no pertence ao grupo Gerentes, voc obter os resultados indicados na Figura 15.16.
Observe que, para obter as informaes sobre o cliente autenticado e o tipo de autenticao, simplesmente utilizamos
propriedades do objeto User.Identity:
Para determinar se o usurio pertence ou no ao grupo de gerentes, utilizamos o mtodo IsInRole, para o qual passamos,
como parmetro, o nome do grupo, no formato: DOMNIO\NomeDoGrupo:
if (User.IsInRole(GROZA\\Gerentes))
Concluso
Neste captulo apresentamos uma variedade de assuntos que podem ser teis para a utilizao nas aplicaes Web,
com ASP.NET, que o leitor venha a desenvolver.
691 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Como limitar o controle de uma lista, com base no valor selecionado em outra lista.
Utilizando o controle DataGrid para editar dados.
Um exemplo prtico, no qual estaremos exibindo em uma pgina ASP.NET, dados de uma planilha do Excel.
Em seguida apresentamos o conceito de Code Behind, que uma tcnica utilizada para facilitar a separao entre o
cdigo responsvel pela lgica e o cdigo responsvel pela apresentao da pgina. Com o uso de Code Behind
podemos colocar os mecanismos de herana e reaproveitamento de cdigo em prtica.
Seguindo na apresentao da nossa Caixa de Ferramentas, falamos sobre dois importantes objetos: HttpRequest e
HttpResponse. Com estes objetos podemos ter um controle mais eficaz sobre a requisio que enviada pelo navegador
do cliente e sobre a resposta que enviada de volta pelo servidor.
Depois tratamos sobre as diretivas de pgina. Uma diretiva , geralmente, includa no incio da pgina e utilizada
para instruir o servidor sobre como efetuar o processamento da pgina.
Com este captulo encerramos a nossa longa jornada, em busca do aprendizado do ASP.NET. A seguir coloco alguns
Anexos que apresentam conceitos bsicos, utilizados nos captulos do livro. Recomendo que voc leia os anexos sobre
assuntos nos quais no se sente confiante. Para referncia segue o contedo de cada anexo:
Anexo I Tags bsicas do HTML, utilizadas nos exemplos do livro. Criao de contas de usurios e grupos de
usurios no Windows 2000.
Anexo II O Modelo Relacional de Dados.
Anexo III A linguagem SQL.
Anexo IV Fontes adicionais de informao sobre ASP.NET, na Internet.
www.juliobattisti.com.br 692
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
Introduo CAPTULO
Este captulo no faz parte do livro impresso: ASP.NET: Uma Nova Revoluo
na Construo de Sites e Aplicaes Web. O presente captulo somente estar
16
disponvel na Internet, no formato .pdf, para download.
Para os leitores que adquiriram o livro, este captulo um brinde, uma vez que
so tratados novos assuntos, os quais no foram tratados nos captulos do livro.
Para os interessados em adquirir o livro, este captulo serve para que o leitor
tenha uma idia do estilo do autor.
Tratamento de Erros e
IMPORTANTE: Para o completo entendimento deste captulo, so necessrios os Gerenciamento de Estado
conhecimentos tratados nos Captulos 1, 2, 3, 4, 5, 6, 7, 8 e 9 do livro. Os aspectos
bsicos da linguagem C# e da criao de pginas ASP.NET no sero novamente
detalhados.
693 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
funcionamento o tratamento de erros em pginas ASP.NET. Apresentaremos exemplos onde so tratadas excees
genricas e tambm excees especficas, tais como uma tentativa de conexo com um servidor SQL Server 2000
que no existe.
Para o desenvolvimento de Sites e Aplicaes Web profissionais, baseadas no Framework .NET, mais especificamente
na tecnologia de pginas ASP.NET, o correto tratamento de erros e excees um tpico fundamental. Muitas vezes,
devido a prazos esgotados e presses pela entrega de um aplicativo, o tratamento de erros negligenciado, o que
resulta em programas, no mnimo, deselegantes e instveis, os quais no atendem as necessidades dos usurios.
Determinados erros so possveis de serem tratados. Tratar um erro significa fazer com que um aplicativo ou pgina
ASP.NET comporte-se de uma maneira elegante quando o erro ocorrer. O exemplo clssico o erro que gerado
quando mandamos o aplicativo ler um arquivo no disquete, porm no colocamos um disquete no drive. Uma maneira
deselegante do programa comportar-se seria simplesmente emitir uma mensagem de erro e encerrar o aplicativo.
Uma maneira mais elegante seria detectar que ocorreu um erro e, pelo cdigo do erro, informar que deve ser
inserido um drive no disquete. O usurio coloca o disquete no drive e clica em um boto OK e pronto, o erro foi
contornado sem maiores traumas.
www.juliobattisti.com.br 694
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
A classe Exception faz parte do namespace System System.Exception. Esta classe a classe base, da qual so
derivadas todas as outras classes que fazem o tratamento de excees.
Uma exceo uma resposta do sistema a ocorrncias de condies anormais geradas devido a erros, durante o
processamento de um programa ou pgina ASP.NET. O CLR (Common Language Runtime) nos fornece um modelo
para o tratamento de excees. Este modelo baseado na criao de objetos de exceo baseados na classe Exception
ou nas classes derivadas de Exception. Outro princpio bsico do modelo de tratamento de excees do CLR a
separao entre o cdigo que contm a lgica do programa e o cdigo para o tratamento de excees, atravs da
utilizao das estruturas try...catch...finally, descritas e exemplificadas no Captulo 5.
Quando uma exceo ocorre em um bloco try, o controle de execuo passado para o bloco catch correspondente,
para que seja feito o tratamento da exceo. Se o caminho de execuo possui vrios mtodos, cada um chamando o
outro em seqncia, a exceo ser repassada at que o CLR encontre um tratamento para a exceo. Se nenhum dos
mtodos chamados contiver um tratamento para a exceo, o tratador default ser chamado pelo CLR para exibir o
nome da exceo, uma mensagem de erro e informaes sobre o mtodo onde a exceo foi gerada.
Diversas informaes sobre uma exceo podem ser obtidas a partir das propriedades da classe na qual se baseia o
objeto de exceo que foi criado. Normalmente este objeto baseado na classe Exception.
Propriedade Descrio
HelpLink Define ou retorna um link para um arquivo de ajuda associado com a exceo.
InnerException Obtm uma referncia ao objeto que representa a exceo que ocorreu em primeiro
lugar, ou seja, a primeira exceo gerada na pilha de chamada dos mtodos relacionados
com o erro que disparou a exceo. Conforme descrevemos anteriormente, uma exceo
pode ter sido gerada em um mtodo, porm tratada em um outro mtodo chamado
diretamente pelo mtodo que gerou a exceo ou chamado por um mtodo que foi
chamado pelo mtodo original e assim por diante.
MessageProperty Retorna a mensagem associada com a exceo.
TargetSite Retorna o nome do mtodo original, onde foi inicialmente disparada a exceo.
ToString Retorna o nome completo da exceo, a mensagem de erro, e outras informaes sobre
a exceo.
695 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
NOTA: Veremos
Revisando as Estruturas Try...Catch...Finally
exemplos dos usos destas A seguir coloco, resumidamente, o funcionamento e exemplos dos comandos
propriedades nos Try...Catch...Finally, utilizados para o tratamento estruturado de excees.
exemplos prticos, mais
Tratar excees de fundamental importncia para que um programa no seja encerrado
adiante neste captulo.
inesperadamente. Uma exceo pode acontecer durante o processamento do programa,
quando algo inesperado acontece e deve ser tratado pelo programa, para que este no
seja encerrado sem que o usurio saiba o que est acontecendo.
As excees devem ser detectadas e opes devem ser oferecidas para o usurio do programa. Por exemplo, no
caso do disquete que no est no drive, a exceo deve ser detectada e o programa deve exibir uma mensagem
solicitando que o usurio insira um disquete no drive. Este procedimento muito mais amigvel do que
simplesmente encerrar o programa.
Outra grande vantagem do Framework .NET que o tratamento de excees padronizado, independentemente da
linguagem que est sendo utilizada. Uma exceo gerada em um componente escrito em C++ pode ser tratada em um
cliente escrito em C# e vice-versa.
Vamos apresentar um exemplo onde utilizamos try e catch para fazer o tratamento de excees. O nosso programa
solicita que o usurio digite dois nmeros. Depois o programa faz a diviso dos nmeros e exibe o resultado. Para
forar uma exceo vamos fornecer um valor zero para o segundo nmero, de tal forma que o programa, ao tentar
fazer uma diviso por zero, ir gerar uma exceo.
class ex1cap16
www.juliobattisti.com.br 696
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
{
// Exemplo 1 - Captulo 16.
// Tratamento de excees com try e catch.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
{
// Declarao das variveis.
int divisao;
// Clculo da diviso.
divisao = Convert.ToInt32(Aux1) / Convert.ToInt32(Aux2);
697 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
catch (Exception e)
{
Console.WriteLine(FOI GERADA A SEGUINTE EXCEO: + e.Message);
}
Digite o exemplo da Listagem 16.1 e salve-o em um arquivo chamado ex1cap16.cs, na pasta C:\Meus documentos.
Compile e execute o exemplo da Listagem 16.1. Digite 10 para o numerador e 2 para o denominador. Voc obter os
resultados indicados na Figura 16.1.
Observe que o programa executa normalmente. Agora vamos forar uma exceo, e para isso digitaremos 0 para o
segundo valor, forando uma diviso por zero. Vamos executar novamente o programa. Digite 10 para o primeiro valor
e 0 para o segundo. Voc obter os resultados indicados na Figura 16.2.
Neste segundo caso, ao tentar fazer uma diviso por zero, uma exceo ser gerada. Ao ser gerada a execuo o cdigo
do bloco catch ser executado. O bloco catch recebe um parmetro do tipo Exception. Exception uma classe do
namespace System System.Exception, conforme descrito anteriormente. Uma das propriedades desta classe Mes-
sage, a qual contm a mensagem associada com a exceo, conforme descrito na Tabela 16.1. No nosso exemplo a
mensagem : Attempted to divide by zero, o que confirma a nossa tentativa de fazer uma diviso por zero.
www.juliobattisti.com.br 698
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
Existem classes que tratam excees mais especficas, como por exemplo:
System.OutOfMemoryException
System.OverFlowException
System.NullReferenceException
System.NotSupportedException
System.NotImplementedException
System.NotFiniteNumberException
System.MissingMethodException
System.MissingMemberException
System.MissingFieldException
System.MethodAccessException
System.MemberAccessException
System.InvalidProgramException
System.InvalidOperationException
System.InvalidCastException
System.IndexOutOfRangeException
System.FormatException
System.FieldAccessException
System.ExecutionEngineException
System.EntryPointNotFoundException
System.DuplicateWaitObjectException
System.DllNotFoundException
System.DivideByZeroException
699 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
class ex2cap16
{
// Exemplo 2 - Captulo 16.
// Tratamento de excees com try e finally.
// Por: Jlio Battisti
// MCP, MCP+I, MCSE, MCSE+I, MCSE, MCDBA
try
int divisao;
www.juliobattisti.com.br 700
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
// Clculo da diviso.
finally
{
Console.WriteLine(CDIGO EXECUTADO TENHA OU NO SIDO GERADA UMA EXCEO);
}
Digite o exemplo da Listagem 16.2 e salve-o em um arquivo chamado ex2cap16.cs, na pasta C:Meus documentos.
Compile e execute o exemplo da Listagem 16.2. Digite 10 para o numerador e 2 para o denominador. Voc obter os
resultados indicados na Figura 16.3. Observe que o cdigo do bloco finally foi executado, mesmo sem ter sido gerada
nenhuma exceo.
701 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Agora vamos forar uma exceo; para isso digitaremos 0 para o segundo valor, forando uma diviso por zero.
Vamos executar novamente o programa. Digite 10 para o primeiro valor e 0 para o segundo. Na Figura 16.4 aberta
uma janela indicando que ocorreu uma exceo no programa. Esta janela aberta porque no temos um bloco catch
para fazer o tratamento da exceo.
Neste caso, como no havia um bloco catch, a exceo no foi tratada. Por isso que surgiu a janela indicada na Figura
16.4. D um clique em OK para fechar a janela de aviso e observe que o cdigo do bloco finally foi executado, mesmo
tendo sido gerada uma exceo, conforme indicado pela Figura 16.5:
Com essa breve reviso (os comandos Try...Catch...Finally foram detalhadamente explicados no Captulo 5), podemos
apresentar alguns exemplos de tratamento de excees em pginas ASP.NET.
www.juliobattisti.com.br 702
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
Alm dos blocos para tratar excees especficas, podemos e devemos colocar um bloco
Catch, bem no final, para tratar exceo genrica System.Exception. Desta forma no NOTA: Para uma
corremos o risco de termos uma exceo no tratada, a qual far com que a pgina deixe referncia completa a todos
de ser carregada ou que o programa termine de maneira inesperada. Considere o exemplo os objetos para tratamentos
genrico da Listagem 16.3: de excees disponveis no
Framework .NET, consulte a
Listagem 16.3 Mltiplos blocos Catch. documentao do produto ou
try o site www.msdn.com/net.
Comando 1
Comando 2
...
Comando n
// Bloco Catch para tratar qualquer tipo de exceo, ou seja, uma exceo Genrica.
703 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
// Este bloco tratar qualquer exceo que ocorra neste programa, com exceo das
// Excees dos tipos: OutOfMemoryException e FileNotFoundException, j tratadas
// nos blocos Catch anteriormente.
<html>
try
{
// Crio uma conexo com o banco de dados pubs localizado no servidor local.
// Vamos acessar a instncia SERVIDORXYZ\NETSDK.
// O Servidor: SERVIDORXYZ no existe.
// Isso far com que seja gerada uma exceo do tipo SqlException,
www.juliobattisti.com.br 704
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
// a qual ser tratada em um bloco Catch especfico para o tratamento desta exceo.
String auxPropriedades;
auxPropriedades = Propriedades da conexo:;
ExibePropriedades.Font.Bold=true;
ExibePropriedades.Text=auxPropriedades;
705 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
MinhaConexo.Open();
String auxPropriedades;
auxPropriedades = Propriedades da conexo:;
ExibePropriedades.Font.Bold=true;
ExibePropriedades.Text=auxPropriedades;
www.juliobattisti.com.br 706
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
// Bloco Finally. sempre executado, mesmo que nenhuma exceo tenha sido gerada.
finally
{
</script>
<body>
<h3><font face=Verdana>Classe SqlConnection!!!</font></h3>
<asp:TextBox
runat=server
id=ExibePropriedades
Text=
Rows=10"
Cols=70"
Font_Face=Arial
Font_Size=3"
BackColor=lightblue
TextMode=MultiLine
/>
</body>
</html>
707 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Digite o cdigo da Listagem 16.4 e salve-o em um arquivo chamado chap16ex1.aspx, na pasta chap16, dentro da pasta
wwwroot, conforme descrito no item: Check List para acompanhar os exemplos deste livro, no Captulo 6.
http://localhost/chap16/chap16ex1.aspx
Ao carregar a pgina voc ir obter uma pgina semelhante pgina indicada na Figura 16.6.
No bloco Try tentamos fazer a conexo com um servidor SQL Server 2000 que no existe:
O servidor SERVIDORXYZ no existe. Neste caso ser gerada uma exceo do tipo SqlException, a qual ser tratada
pelo primeiro bloco Catch. Este bloco disparado em resposta a uma exceo do tipo SqlException, que o tipo de
exceo que disparada, quando tentamos conectar com um servidor SQL Server que no existe.
www.juliobattisti.com.br 708
CAPTULO 16: TRATAMENTO DE ERROS E GERENCIAMENTO DE ESTADO
A segunda mensagem retornada a partir do mtodo ToString do objeto SqlEx (que do tipo SqlException). O mtodo
ToString simplesmente retorna um texto descritivo da exceo. A seguir temos o comando que retorna esta mensagem:
Response.Write(SqlEx.ToString() + <p>);
No restante deste primeiro bloco Catch repetimos os comandos para estabelecer uma conexo com o servidor SQL
Server, porm agora utilizamos o nome correto:
Com isso a conexo estabelecida e as propriedades da conexo so exibidas, no corpo da pgina em um Web Server
control do tipo TextBox com mltiplas linhas.
Colocamos um outro bloco Catch, o qual ser disparado em resposta a qualquer exceo
que no seja do tipo SqlException. Por exemplo, se tivssemos uma operao de diviso
NOTA: Para maiores
na pgina e houvesse uma tentativa de diviso por zero (operao no permitida), uma
informaes sobre Web
exceo seria gerada. Como esta exceo no seria do tipo SqlException, ela seria tratada
Server Controls, consulte
pelo bloco Catch para tratamento de excees genricas excees do tipo Exception:
os Captulos 7, 8 e 9.
// Incio do bloco Catch para tratamento da exceo do
tipo Exception.
catch (Exception ex)
{
Response.Write(Tratando uma exceo genrica<p>);
}
O bloco Finally ser sempre executado, independente de ter sido, ou no, gerada alguma exceo.
Concluso
Neste captulo, que um brinde para o amigo leitor, falei sobre os aspectos bsicos do tratamento de erros/excees
em pginas ASP.NET.
Fizemos uma breve reviso das estruturas Try...Catch...Finally e apresentamos alguns exemplos prticos. Com isso
voc tem uma boa idia sobre o tratamento estruturado de excees.
webmaster@juliobattisti.com.br
709 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Introduo ANEXO
Este anexo trata de dois assuntos utilizados nos exemplos do livro:
1
A utilizao da linguagem HTML.
A criao de contas de usurios e grupos no Windows 2000.
<body>
controles e
demais
elementos
da interface
- Server controls
- Web Forms
- etc
</body>
</html>
www.juliobattisti.com.br 710
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
comando1
comando2
...
comandon
</script>
<body>
controles e
demais
elementos
da interface
- Server controls
- Web Forms
- etc
</body>
</html>
Toda pgina ASP.NET tem esta estrutura. Uma parte inicial onde temos o cdigo, responsvel pela lgica da pgina.
Na seo de cdigo, como chamada, podemos colocar comandos para fazer a conexo com um banco de dados, para
realizar clculos, para responder a eventos que acontecem na pgina, como por exemplo um clique do usurio em um
boto, enfim, toda a lgica de programao necessria ao funcionamento da pgina. A seo de cdigo representada
pelo seguinte trecho.
Na segunda parte da pgina, a partir da tag <body>, colocamos os elementos de apresentao da interface. Nesta parte
podemos colocar desde cdigo HTML bsico at controles mais avanados como os disponibilizados pelo ASP.NET.
Aqui a importncia de conhecermos as principais tags da linguagem HTML, uma vez que na seo de apresentao da
pgina podemos utilizar, alm dos controles do ASP.NET, qualquer tag HTML vlida. Em diversos exemplos deste
livro utilizamos as tags HTML para criao de tabelas. Com o uso de tabelas fica mais fcil fazer o alinhamento dos
diversos elementos da pgina.
Tudo o que voc j conhece de HTML pode ser utilizado na seo de apresentao da pgina.
Observe que a estrutura de uma pgina ASP.NET deixa bem clara a separao entre cdigo ASP.NET e cdigo de
apresentao, bem diferente do que acontecia com o ASP 3.0 onde sees de cdigo ASP so intercaladas com sees
de cdigo HTML.
711 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Neste Anexo iremos apresentar e exemplificar as tags mais utilizadas. Para uma referncia completa da linguagem
HTML, voc pode consultar o site: www.w3.org.
www.wdvl.com
www.internet.com
www.htmlgoodies.com
<HTML> e </HTML>. Estas tags marcam o incio e o fim de uma pgina HTML.
<HEAD>...</HEAD>: o cabealho da pgina, onde podemos inserir uma srie de tags que contm informaes
sobre a prpria pgina. A tag mais utilizada na seo de Cabealho <TITLE> </TITLE>, a qual utilizada
para definir o ttulo que exibido na Barra de Ttulos do navegador do cliente.
www.juliobattisti.com.br 712
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
<BODY>...</BODY>: Estas tags definem o corpo da pgina, onde so colocados os elementos que o
navegador interpreta e exibe para o usurio. Nesta seo fica o contedo principal do documento.
Podemos definir uma cor de segundo plano para a pgina, utilizando o atributo bgcolor, para a tag body, conforme o
exemplo a seguir:
<body bgcolor=#808000">
Ao invs de uma cor de segundo plano, poderamos definir uma figura de segundo plano, conforme o exemplho
indicado a seguir:
<body background=http://www.abc.com/imagens/texturas/padrao.jpg>
Na Listagem I.3 temos um exemplo onde so utilizadas as diversas tags de ttulos disponvies.
</body>
</html>
713 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<table>
</table>
<table>
<tr>
</tr>
<tr>
</tr>
<tr>
</tr>
</table>
Neste caso temos uma tabela com trs linhas. O passo final definir quantas colunas teremos em cada linha. No
exemplo a seguir vamos definir duas clulas por linha. O resultado prtico que teremos uma tabela com trs linhas
www.juliobattisti.com.br 714
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
e duas colunas. Para adicionar clulas a uma linha, utilizamos as tags <td>/<td>. Entre estas duas tags colocamos o
contedo da clula. Observe o exemplo da Listagem I.4.
<head>
<title>Exemplo de criao de tabela.</title>
</head>
<body>
<table border=1">
<tr>
<td>Linha 1, Coluna 1</td>
<td>Linha 1, Coluna 2</td>
</tr>
<tr>
<td>Linha 2, Coluna 1</td>
<td>Linha 2, Coluna 2</td>
</tr>
<tr>
<td>Linha 3, Coluna 1</td>
<td>Linha 3, Coluna 2</td>
</tr>
</table>
</body>
</html>
Observe que utilizamos o atributo border, para definir o tamanho das bordas (linhas de grade) da tabela.
Podemos definir que uma tabela deva ocupar uma porcentagem especfica da janela do navegador, tanto na horizontal
quanto na vertical:
715 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Mesmo que o usurio maximize, restaure ou redimensione a janela, o navegador ir manter as propores especificadas
nesta tag.
Para definir uma cor de fundo para a tabela, utilizamos o atributo bgcolor, conforme exemplo a seguir:
Podemos definir a cor de segundo plano, individualmente, para uma nica clula, utilizando o atributo bgcolor para a
tag <td> que define a clula:
<head>
<title>Mesclando linhas e colunas!</title>
</head>
<body>
<table border=1">
<tr>
<td colspan=2">Mesclando duas colunas</td>
</tr>
<tr>
www.juliobattisti.com.br 716
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
<tr>
<td>Linha 3, Coluna 1</td>
</tr>
</table>
</body>
</html>
Neste exemplo criamos uma linha com alinhamento esquerda, com espessura de 5 pixels e de cor vermelha. A tag
<HR>, automaticamente, insere uma quebra de linha.
<head>
717 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<body>
<h2>Formatao de texto:</h2>
</body>
</html>
<B></B>: Negrito
<I></I>: Itlico
<U></U>: Sublinhado
www.juliobattisti.com.br 718
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
Observe que possvel combinar duas ou mais tags para aplicar mltiplas formataes. A tag <P> utilizada para a
definio de pargrafo. Ao fecharmos a tag (</p>) ser feita uma quebra automtica de linha.
Formatao de Fonte
Utilizamos a tag <font> </font> para definir algumas caractersticas da fonte, como por exemplo:
Cor da fonte
Tipo de fonte
Tamanho
<head>
<title>Tags para formatao de fonte!</title>
</head>
<body>
<h2>Formatao de texto:</h2>
<p>
<font face=Arial size=6" color=#FF0000">
Fonte arial, cor vermelha e tamanho 6
</font>
</p>
<p>
<font face=Arial size=4" color=#0000FF>
Fonte arial, cor azul e tamanho 4
</font>
</p>
<p>
<font face=Arial size=3" color=#00FF00">
719 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
<p>
<font face=Arial size=2" color=#FF8000">
Fonte arial, cor laranha e tamanho 2
</font>
</p>
</body>
</html>
A Tag <A></A>
Esta tag utilizada para criar links em uma pgina HTML.
No exemplo da Listagem I.8 utilizamos a tag <A></A> para criar alguns links.
<head>
<title>Criao de links!</title>
</head>
www.juliobattisti.com.br 720
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
<body>
<ul>
<li>
<a href=http://www.juliobattisti.com/livros/windows2000.htm>
Windows 2000 Server
</a>
</li>
<li>
<a href=http://www.juliobattisti.com/livros/asp3.htm>
ASP 3.0
</a>
</li>
<li>
<a href=http://www.juliobattisti.com/livros/sql2000.htm>
SQL Server 2000
</a>
</li>
</ul>
</body>
</html>
721 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
No Windows 2000 Server, podemos limitar os recursos aos quais cada usurio tem acesso, atravs do uso de permisses.
As permisses de acesso podem ser atribudas para um usurio individualmente, ou para um Grupo de Usurios. Para
que possamos atribuir permisses, cada usurio deve ser cadastrado no sistema. Cadastrar o usurio significa criar
uma Conta de Usurio para o mesmo. Com uma conta o usurio pode efetuar o logon e receber permisses para
acessar os mais variados recursos disponibilizados pelo Windows 2000 Server.
Uma conta pode ser criada em um Controlador de Domnio situao em que a conta vlida e reconhecida em todo
o domnio; ou a conta pode ser criada em um Servidor Membro situao em que a conta somente vlida e reconhecida
no Servidor Membro onde ela foi criada.
Contas criadas em um Controlador de Domnio so chamadas de Domain User Ac- NOTA: Para maiores
counts (Contas de Usurios do Domnio). Essas contas permitem que o usurio faa o informaes sobre
logon em qualquer computador do domnio e receba permisses para acessar recursos Domnios, Controladores
em qualquer computador do domnio. Vamos trabalhar e criar contas em um domnio de Domnio e Member
chamado CARUNCHO, com um domnio DNS chamado caruncho.com. Para criar contas Servers, consulte o
em Servidores Membro, o procedimento bastante semelhante, apenas a quantidade de Captulo 4 do livro: Srie
campos de informao de cada conta um pouco menor. Curso Bsico & Rpido
Microsoft Windows 2000
Contas criadas em um Servidor Membro so chamadas de Local User Accounts (Contas Server, de minha
de Usurios Locais). Essas contas somente permitem que o usurio faa o logon e receba autoria, publicado pela
permisses para acessar recursos do computador onde a conta foi criada. Sempre que Axcel Books
possvel evite criar Contas Locais em servidores que fazem parte de um domnio. Utilizar (www.axcel.com.br).
as contas do Domnio, as quais ficam armazenadas no Active Directory, torna a
administrao bem mais fcil.
Outro detalhe que voc deve observar a utilizao de um padro para o nome das contas de usurios. Voc deve
estabelecer um padro para a criao de nomes, pois no podemos ter dois usurios com o mesmo nome de logon
dentro da mesma Unidade Organizacional. Por exemplo se tivermos na mesma Unidade Organizacional, dois Jos da
Silva e os dois resolverem utilizar como logon jsilva, estaremos com um problema. Para isso importante que seja
definido um padro e no caso de nomes iguais deve ser definida uma maneira de diferenci-los. Por exemplo poderamos
usar como padro a primeira letra do nome e o ltimo sobrenome. No caso de nomes iguais, acrescentam-se nmeros.
No nosso exemplo, o primeiro Jos da Silva cadastrado ficaria como jsilva, j o segundo a ser cadastrado ficaria como
jsilva1. Caso no futuro tivssemos mais um Jos da Silva dentro da mesma Unidade Organizacional, este seria o
jsilva2 e assim por diante.
www.juliobattisti.com.br 722
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
Quando formos criar nomes de logon para os usurios, devemos levar em considerao os seguintes fatos:
Nomes de Usurios do Domnio devem ser nicos dentro da Unidade Organizacional onde o usurio for
cadastrado.
Podem ter no mximo 20 caracteres.
Os seguintes caracteres no podem ser utilizados: / \ : ; [ ] | = , + * ? < >
Sempre que voc for cadastrar um usurio tambm deve ser cadastrada uma senha para
o mesmo; alm disso podemos especificar um nmero mnimo de caracteres aceito para IMPORTANTE: Para as
a senha, conforme veremos mais adiante nesta lio. O nmero mximo de caracteres senhas, o Windows 2000
da senha 128. Server distingue letras
maisculas de minsculas.
Vamos praticar um pouco. Vamos criar algumas contas de usurios (lembrando que as Por exemplo a senha
telas de exemplo mostram a criao de contas em um Controlador de Domnio), e depois Abc123 diferente da
vamos alterar algumas propriedades destas contas. senha abc123.
Exemplo:
Ser inicializado o MMC e carregado o Snap-In para Gerenciamento do Diretrio, conforme indicado pela Figura I.7
4. D um clique no sinal de + ao lado de caruncho.com (provavelmente o nome do seu domnio seja diferente, d um
clique no sinal de + ao lado do nome do seu domnio).
723 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
5. D um clique na opo Users (ou Usurios se voc estiver utilizando o Windows 2000 Server em Portugus). No
painel da direita exibida uma listagem com o nome de todos os usurios, conforme indicado na Figura I.8.
6. D um clique, com o boto direito do mouse, sobre a opo Users (ou Usurios se for o caso).
7. No menu que surge, aponte para a opo New (Novo) e no menu que surge d um clique em Usurio. Surge um
assistente para ajud-lo a criar um novo usurio. Digite as informaes para criar o usurio jsilva, conforme
indicado na Figura I.9.
www.juliobattisti.com.br 724
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
IMPORTANTE: Nome de
logon do usurio o
nome que o usurio
utiliza para efetuar o
logon em computadores
com o Windows 2000
Server. J Nome de logon
do usurio (anterior ao
Windows 2000) o nome
que o usurio utiliza para
efetuar o logon em
computadores com
verses mais antigas do
Windows, tais como o
Figura I.9: Criando o usurio jsilva.
Windows NT Server 4.0.
Por simplicidade estes
8. D um clique no boto Avanar para ir para a prxima etapa.
dois nomes devem ser
9. Na prxima tela voc deve digitar a senha do usurio duas vezes, para iguais; observe que
confirmao, conforme indicado na Figura I.10. Digite senha123 nos campos medida que voc digitar o
Senha e Confirmar senha. Observe que medida que voc digita a senha, o primeiro, o segundo ser
Windows 2000 Server exibe apenas asteriscos (*) nos campos Senha e automaticamente
Confirmar senha. preenchido.
725 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
O usurio deve alterar a senha no prximo logon: Se esta opo estiver marcada, na primeira vez que o usurio
fizer o logon, ser solicitado que o mesmo altere a sua senha. Esta opo utilizada para que o usurio possa
colocar uma senha que somente ele conhece, pois na primeira vez que o usurio cadastrado, a senha
digitada pelo Administrador, o qual fica sabendo a senha do usurio. No prximo logon o usurio altera a
senha de tal maneira que somente ele saiba qual a senha para a sua conta.
O usurio no pode alterar a senha: A senha somente pode ser alterada pelo Administrador. Normalmente
utilizada para empregados temporrios e para estagirios.
A senha nunca expira: Independente das polticas de segurana do domnio, se esta opo estiver marcada, o
usurio nunca precisa trocar a sua senha. Caso contrrio, de tempos em tempos (conforme configurado nas
polticas de segurana do domnio), o usurio deve trocar a senha.
A conta est desativada: O Administrador marca esta opo para bloquear a conta de um usurio. Usurios
com a conta bloqueada no podem mais efetuar logon e, conseqentemente, no podem mais acessar recursos
da rede. Esta opo normalmente utilizada para desativar, temporariamente, a conta de empregados que
esto em frias. Quando o empregado retorna ao servio, o Administrador libera a sua conta, simplesmente
desmarcando esta opo.
10. Certifique-se de que as 4 opes acima descritas esto desmarcadas e d um clique no boto Avanar.
11. Surge uma tela informando que um novo objeto ser criado. Lembre-se de que todos os elementos do Active
Directory so chamados de objetos. D um clique no boto Concluir. Feito isso, o usurio Jos da. Silva j
aparece na listagem de usurios, conforme indicado na Figura I.11.
www.juliobattisti.com.br 726
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
Agora vamos efetuar o logoff do usurio Administrador e fazer o logon com a conta jsilva, para verificar se a mesma
est funcionando corretamente.
D um clique em OK e, pronto, voc ter se logado com a conta de usurio jsilva, recm-criada.
727 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
6. D um clique na opo Users (ou Usurios se voc estiver utilizando o Windows 2000 em Portugus). No painel
da direita exibida uma listagem com o nome de todos os usurios cadastrados.
7. Localize o usurio Jos da Silva e d um clique duplo sobre o mesmo para abrir as propriedades da conta deste
usurio. Surge uma janela, com diversas guias, atravs das quais podemos configurar uma srie de propriedades,
conforme indicado na Figura I.12. Ao abrir as propriedades de uma conta de usurio, a guia Geral j vem selecionada
por padro.
8. Digite as informaes para os campos Descrio, Escritrio, Telefone e Correio eletrnico, conforme indicado na
Figura I.12.
9. D um clique no boto OK para fechar a janela de propriedades e salvar as alteraes.
Voc ter voltado janela Usurios e computadores do Active Directory. Observe que a coluna Descrio para o
usurio Jos da Silva j exibe o valor que voc digitou no campo Descrio da guia Geral.
Exemplo: Agora vamos aprender o significado e como alterar algumas propriedades mais avanadas das contas de
usurios. Vamos aprender a limitar as horas em que o usurio pode efetuar o logon, bem como limitar os computadores
nos quais o usurio pode efetuar o logon.
NOTA: Altere as propriedades das contas maria e paulo, criadas anteriormente. Preencha os campos Descrio, Escritrio,
Telefone e Correio eletrnico. Invente valores para esses campos, o objetivo fixar os passos para alterar as propriedades de
uma conta de usurio.
www.juliobattisti.com.br 728
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
4. D um clique no sinal de + ao lado de caruncho.com (provavelmente o nome do seu domnio seja diferente, d um
clique no sinal de + ao lado do nome do seu domnio).
5. Abaixo de caruncho.com surgem diversas opes.
6. D um clique na opo Users. No painel da direita exibida uma listagem com o nome de todos os usurios
cadastrados.
7. Localize o usurio Jos da Silva e d um clique duplo sobre o mesmo para abrir as propriedades da conta deste usurio.
Surge uma janela, com diversas guias, atravs das quais podemos configurar uma srie de propriedades, conforme
indicado na Figura I.12. Ao abrir as propriedades de uma conta de usurio, a guia Geral j vem selecionada por padro.
8. D um clique na guia Endereo. Preencha os campos conforme indicado na Figura I.13.
9. D um clique na guia Conta. Nesta guia voc pode alterar as informaes bsicas sobre a conta do usurio,
conforme indicado pela Figura I.14. Um administrador pode utilizar essa guia, por exemplo, para desativar a
conta de um empregado em frias. Para isso basta marcar a opo A conta est desativada.
729 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
10. Na guia Conta voc tambm pode estipular em que horrio do dia o usurio pode fazer o logon. Por padro o
logon permitido durante as 24 horas do dia, quando a conta criada. Podem existir situaes em que determinados
usurios somente devem ter permisses para se logar durante um certo perodo.
11. Para definir o perodo em que o usurio pode se logar, na guia Conta, d um clique no boto Horrio de logon...,
que ser exibida a janela indicada na Figura I.15.
12. Observe que por padro o logon permitido durante as 24 horas de todos os dias. Vamos alterar essa configurao
de tal forma que o usurio jsilva somente possa se logar das 8 da manh s 18 horas da tarde de segunda sexta-feira.
13. Quadradinho azul indica horrio permitido e quadradinho branco, horrio no permitido.
Para alterar a cor de um quadradinho, basta pressionar o mouse sobre o mesmo, segurar o mouse pressionado e ir
arrastando para marcar um ou mais quadradinhos. medida que voc vai arrastando, os quadradinhos vo sendo
selecionados. Depois de selecionados basta dar um clique na opo desejada: Logon permitido ou Logon negado, e o
Windows 2000 Server altera a cor do quadradinho, conforme a opo escolhida.
14. Utilize a tcnica de arrastar, para configurar os horrios permitidos conforme indicado na Figura I.16, e depois d
um clique no boto OK. Voc estar de volta guia Conta.
www.juliobattisti.com.br 730
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
NOTA: Para selecionar um dia todo, por exemplo Domingo, basta clicar no boto Domingo. Isso muito mais fcil do que
arrastar o mouse sobre todos os quadradinhos do Domingo. O mesmo vlido para o boto das horas. Se voc clicar no boto
8, estar selecionando o quadradinho correspondente s 8 horas de todos os dias.
Figura I.16: Logon permitido somente de segunda sexta-feira, das 8:00 s 18:00 hs.
15. Agora vamos limitar os computadores nos quais o usurio jsilva pode efetuar o logon. Esse procedimento
normalmente adotado com empregados temporrios ou estagirios, de tal forma que o Administrador possa
controlar em quais computadores esses usurios podem efetuar o logon.
731 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
www.juliobattisti.com.br 732
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
733 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
10. D um clique em OK para fechar a janela com as propriedades do usurio e depois feche o console Usurios e
computadores do Active Directory.
11. Efetue o logoff do usurio Administrador.
Faa o logon como jsilva2 e para a senha digite senha123, para testar que o usurio jsilva foi renomeado com sucesso
para jsilva2.
IMPORTANTE: Renomeie
o usurio maria para
maria2 e tente efetuar o
logon como maria2 e para
a senha digite senha123,
para verificar se o usurio
maria foi renomeado com
sucesso para maria2.
Lembre-se que renomear o
usurio alterar o seu
nome de logon.
Estes so apenas alguns exemplos do que chamamos de Account Policies, que nada mais so do que algumas regras
que as senhas devem obedecer.
www.juliobattisti.com.br 734
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
Podemos definir as Account Policies atravs do console Diretivas de segurana de domnio, o qual acessvel
atravs do menu Ferramentas administrativas do menu Programas.
Exemplo: Vamos definir alguns parmetros, utilizando o console Diretivas de segurana do domnio.
735 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
10. Permitir que o usurio deixe a senha em branco no uma boa poltica de segurana. Clicando na setinha para
cima, altere o valor de zero para 8 caracteres, conforme indicado na Figura I.21.
11. D um clique no boto OK para fechar a janela Configurao da diretiva de segurana. Voc estar de volta ao
console Diretiva de segurana do domnio.
12. Localize a opo Enforce password history (Forar histrico de senhas), e d um clique duplo sobre a mesma.
Ser aberta a janela indicada na Figura I.22.
13. Nesta janela voc define o histrico de senhas. Altere o campo Manter histrico de senha: de 1 para 3 e d um
clique no boto OK para fechar a janela. Isso significa que, quando o usurio for alterar a senha, o mesmo no
pode utilizar uma senha igual s ltimas trs utilizadas.
14. Voc estar de volta ao console Diretiva de segurana do domnio.
15. Localize a opo Tempo de vida mximo da senha, e d um clique duplo sobre a mesma. Ser aberta a janela
indicada na Figura I.23.
www.juliobattisti.com.br 736
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
16. Nesta janela voc define durante quantos dias uma senha vlida. Depois de passado
este prazo, ao efetuar o logon o usurio ser avisado de que a senha expirou e que a IMPORTANTE: Com as
mesma deve ser alterada. Observe que por padro o tempo de vida da senha 42 modificaes que fizemos
dias. nesta lio, as senhas devem
ser alteradas de 30 em 30
17. Altere o tempo mximo de vida da senha para 30 dias e d um clique no boto OK.
dias (diretiva Tempo de vida
18. Voc estar de volta ao console Diretiva de segurana do domnio.
mximo de senha) , devem
19. Observe que os novos valores para as diretivas Comprimento mnimo de senha, ter no mnimo 8 caracteres
Enforce password history e Tempo de vida mximo de senha j apresentam os novos (letras, nmeros, e qualquer
valores configurados. um dos caracteres especiais
20. Feche o console Diretiva de segurana do domnio. permitidos) diretiva
Comprimento mnimo de
senha , e ao alterar a
Grupos de Usurios e Tipos de Grupos senha, o usurio no poder
Existentes no Windows 2000 Server repetir uma das trs ltimas
senhas utilizadas (diretiva
Neste tpico vamos ver um pouco de teoria sobre grupos de usurios. Em seguida vamos
Enforce password history).
praticar criando alguns grupos e adicionando alguns membros aos grupos criados.
Um grupo de usurios uma coleo de contas de usurios. Por exemplo, podemos criar
um grupo chamado Contabilidade, do qual faro parte todos os usurios do departamento NOTA: Altere as diretivas
de Contabilidade. de segurana, de tal
maneira que o tamanho
A principal funo dos grupos de usurios facilitar a administrao e a atribuio de mnimo permitido para as
permisses para acesso a recursos, tais como: pastas compartilhadas, impressoras remotas, senhas seja 10, que no
servios diversos, pginas e aplicaes Web etc. seja permitida utilizar uma
senha igual s 4 ltimas e
Ao invs de darmos permisses individualmente, para cada um dos usurios que
que o tempo mximo de
necessitam acessar um determinado recurso, podemos criar um grupo e atribuir
vida seja de 45 dias.
permisses para o grupo. Para que um usurio tenha permisso ao recurso, basta incluir
o usurio no grupo, pois todos os usurios de um determinado grupo herdam as
permisses do grupo.
737 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Quando um usurio troca de seo, por exemplo, basta trocar o usurio de grupo. Vamos supor que o usurio jsilva
trabalhe na seo de contabilidade e pertena ao grupo Contabilidade. Ao ser transferido para a seo de marketing,
basta retirarmos o usurio do grupo Contabilidade e adicion-lo ao grupo Marketing. Com isso o jsilva deixa de ter as
permisses atribudas ao grupo Contabilidade e passa a ter as mesmas permisses que tem o grupo Marketing. Veja o
quanto a utilizao de grupos pode facilitar a atribuio de permisses.
Podemos inclusive ter situaes mais especficas. Vamos supor que exista um sistema chamado SEAT.NET, para o
qual somente um nmero restrito de usurios deva ter acesso, sendo que so usurios de diferentes sees. A maneira
mais simples de solucionar isso criar um grupo chamado Seat.Net e dar permisses de acesso para esse grupo.
Assim, cada usurio que precisar acessar o sistema SEAT.NET deve ser includo no grupo Seat.Net. Quando o usurio
no deve mais ter acesso ao sistema SEAT.NET, basta remov-lo do grupo Seat.Net.
Na Figura I.24 vemos uma ilustrao para o conceito de Grupo de usurios. O Grupo Contabilidade possui direito para
um recurso compartilhado, o qual pode ser acessado atravs da rede. Todos os usurios que pertencem ao grupo
contabilidade tambm possuem permisso para o recurso compartilhado, uma vez que os usurios de um grupo herdam
as permisses do grupo.
Agora vamos dar uma olhada nos tipos de grupos existentes no Windows 2000 Server.
www.juliobattisti.com.br 738
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
Grupos de segurana (Security Groups): Normalmente utilizado para atribuir permisses a recursos da rede. O
Windows 2000 Server somente utiliza Grupos de segurana. Um grupo de segurana tambm pode ser utilizado
como um grupo de distribuio, embora essa no seja uma situao muito comum. Esses grupos, assim como
as contas de usurios, so armazenados no Banco de dados do diretrio.
Grupos de distribuio (Distribution Groups): So utilizados para funes no relacionadas com segurana.
Uma das utilizaes tpicas para um Grupo de distribuio o envio de mensagens de e-mail para um grupo de
usurios de uma s vez. Somente programas que foram programados para trabalhar com o Active Directory
podero utilizar Grupos de distribuio. Provavelmente as novas verses dos principais sistemas de correio
eletrnico estaro habilitadas para trabalhar com o Active Directory. O Exchange Server da Microsoft integrado
com o Active Directory. No podemos utilizar grupos de distribuio para funes relacionadas com segurana.
Quando criamos um grupo de usurios, devemos selecionar um tipo e um escopo. O Escopo permite que o grupo seja
utilizado de diferentes maneiras para a atribuio de permisses. O escopo de um grupo determina em que partes da
rede poderemos usar o grupo para atribuir permisses para o grupo. Existem trs escopos para grupos de usurios,
conforme descrito a seguir:
O Escopo de um grupo tambm determina quem pode ser membro do grupo. Tanto usurios como outros grupos
podem ser membros de um determinado grupo. Considere as seguintes regras para membros de grupos:
Grupo global:
739 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Pode conter: Contas de usurios, grupos universais e grupos globais de qualquer domnio. Grupos locais do
domnio do mesmo domnio.
Pode ser membro de: Grupos locais do domnio do mesmo domnio.
Grupo universal:
Pode conter: Contas de usurios, grupos universais, e grupos globais de qualquer domnio.
Pode ser membro de: Grupos locais do domnio ou grupos universais de qualquer domnio.
www.juliobattisti.com.br 740
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
Para alterar o Grupo1 e adicionar os usurios jsilva2, maria e paulo, a este grupo, faa o seguinte:
741 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
8. Surge a janela Selecione Usurios, Contatos ou Computadores, conforme indicado na Figura I.28. Nesta janela
exibida uma listagem com todos os usurios cadastrados no domnio caruncho.com (ou o nome de domnio que
voc estiver utilizando).
www.juliobattisti.com.br 742
ANEXO 1: PRINCIPAIS TAGS DO HTML E CRIAO DE CONTAS E GRUPOS NO WINDOWS 2000
9. Para adicionar o usurio jsilva (Jos da Silva) localize-o na listagem, d um clique sobre ele para marc-lo e
depois d um clique no boto Adicionar. Voc tambm pode dar um clique duplo sobre o nome do usurio, que o
mesmo ser adicionado.
10. Repita a operao do passo anterior, para os usurios Maria do Socorro e Paulo Pereira.
11. D um clique no boto OK para fechar essa janela e voltar guia Membros.
12. Sua janela deve estar conforme indicado na Figura I.29, a qual indica que os usurios
NOTA: Crie um grupo de
Jos da Silva (jsilva2), Maria do Socorro (maria) e Paulo Pereira (paulo) foram
escopo global, do tipo
adicionados como membros do grupo Grupo1.
segurana, chamado de
13. D um clique em OK para fechar a janela de propriedades do grupo Grupo1.
Contabilidade. Adicione os
14. Feche o console Usurios e Computadores do Active Directory. usurios maria e paulo ao
grupo Contabilidade.
A partir deste momento, qualquer permisso que for atribuda ao grupo Grupo1,
Como descrio coloque:
ser herdada por todos os seus membros, no nosso exemplo, pelos usurios jsilva2,
Grupo para receber
maria e paulo.
permisses seo de
contabilidade.
IMPORTANTE:Existem
algumas contas de usurio
que so criadas no
momento em que o
Windows 2000 Server
instalado. Essas contas so
conhecidas como Built-in
Accounts. A mais
importante delas a conta
Administrador. Essa conta
tem poderes totais sobre o
domnio, no possuindo
nenhuma restrio de
segurana. Muito cuidado
com quem vai usar essa
conta em um ambiente de
produo. Precisa ser uma
Figura I.29: Trs usurios adicionados como membros do grupo Grupo1. pessoa qualificada e que
saiba o que est fazendo. A
Outra conta criada quando da instalao do Windows 2000 Server a conta de usurio
conta Administrador pode
Convidado (Guest). Esta conta normalmente utilizada para acesso de usurios que no
ser renomeada, porm no
possuem uma conta cadastrada no domnio. Por padro esta conta est desabilitada. O
pode ser excluda nem
Administrador pode habilitar a conta Convidado. Porm isso deve ser feito com cuidado.
bloqueada.
743 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Sempre que um usurio precise acessar algum recurso, o ideal cadastrar o usurio e incluir o mesmo no grupo (ou
grupos), que tm permisso para acessar o recurso desejado.
Existem tambm alguns grupos criados quando da instalao do Windows 2000 Server, so os chamados Built-in
Groups. O mais importante de todos o grupo Administradores. Todo membro deste grupo tem plenos poderes no
domnio. No console Usurios e Computadores do Active Directory (Iniciar Programas Ferramentas administrativas
Usurios e computadores do Active Directory), existe uma opo chamada Built-in. Ao clicar nessa opo ser
exibida uma listagem com diversos grupos criados durante a instalao do Windows 2000 Server. Observe, na coluna
tipo, que o tipo destes grupos Grupo de segurana local interno e na coluna descrio podemos ver um resumo das
permisses de cada um dos grupos.
Para maiores informaes sobre o Windows 2000 voc pode consultar um dos seguintes endereos:
www.microsoft.com/technet
www.microsoft.com/windows2000
www.labmice.net
www.2000tutor.com
www.juliobattisti.com.br 744
ANEXO 2: O MODELO DE DADOS RELACIONAL
Introduo ANEXO
Neste Anexo aprenderemos sobre os conceitos bsicos de bancos de dados
relacionais.
Observe que utilizei os verbos sempre no passado. Voc deve estar pensando:
Este cara est maluco, pois ainda hoje muitas aplicaes rodam, e bem, no bom
e velho Mainframe. E eu serei obrigado a concordar com o amigo leitor. Muitas
e importantes so as aplicaes que ainda rodam em Mainframes e duvido que
em um futuro prximo, digamos cinco anos, todas estas aplicaes sejam migradas
para outras plataformas e modelos de desenvolvimento. Mas tambm precisamos
admitir que muito pequeno, para no dizer mnimo, o desenvolvimento de no-
vas aplicaes para o modelo Terminal Mainframe.
Com a expanso cada vez maior das Redes locais de computadores e a utilizao
do modelo Cliente Servidor, a utilizao dos chamados Bancos de dados
Relacionais cresceu bastante. Hoje a grande maioria das novas aplicaes baseada
em Bancos de dados Relacionais.
745 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Server 2000, pelo Microsoft Access, pelo ORACLE, pelo DB2 da IBM e por a vai, conforme indicado pela listagem
a seguir:
O modelo relacional tambm possui suas limitaes, porm bastante adequado para a grande maioria das aplicaes
comerciais atualmente em uso ou sendo desenvolvidas.
Algumas aplicaes especiais que necessitam utilizar dados mais complexos, como por exemplo arquivos multimdia,
dados espaciais e sries temporais, podem se beneficiar mais das caractersticas dos chamados Bancos de dados
orientados a Objetos. Este tipo de Banco de dados ainda no amplamente utilizado, a no ser em situaes especficas.
Devido grande aceitao e utilizao dos Bancos de dados Relacionais que estaremos estudando os princpios
bsicos deste tipo de banco de dados, ao longo deste Anexo. Caso voc queira maiores detalhes sobre este tipo de
banco de dados, existe uma farta Bibliografia, bem como inmeros sites na Internet com informaes sobre o assunto.
Em muitas situaes teremos que conectar nossas aplicaes Web e pginas ASP.NET com bancos de dados j existentes;
neste caso precisamos conhecer os conceitos aqui apresentados, para podermos utilizar o banco de dados de uma
maneira otimizada.
Em outras situaes teremos que criar o banco de dados a ser utilizado pela aplicao que est sendo desenvolvida.
Neste caso, os conceitos apresentados neste captulo auxiliam na criao de um banco de dados melhor estruturado e
otimizado, tanto em termos de espao de armazenamento, quanto da qualidade, confiabilidade e disponibilidade das
informaes nele contidas.
www.juliobattisti.com.br 746
ANEXO 2: O MODELO DE DADOS RELACIONAL
Entidades e Atributos
Toda a informao de um Banco de dados relacional armazenada em Tabelas, as quais tambm so chamadas de
Entidades. Por exemplo, poderamos ter uma Tabela Clientes, onde seriam armazenadas informaes sobre os diversos
clientes, uma tabela Produtos, onde so armazenadas informaes sobre os produtos e assim por diante.
Para cada um dos Clientes poderamos armazenar informaes tais como: Nome, Rua, Bairro, Telefone, CEP, Data de
Nascimento, etc.
Essas diversas caractersticas de cada Cliente so os Atributos do Cliente, muitas vezes chamados de campos da
entidade Cliente, ou, de maneira mais simples: Os campos da tabela Clientes.
O Conjunto de todos os Atributos de um cliente e os valores dos atributos forma o Registro do Cliente. Com isso
teremos a tabela constituda por um conjunto de Registros (uma linha completa com informaes sobre o cliente) e
cada Registro formado por um conjunto de atributos (Nome, Endereo, etc.).
Resumindo:
Considere o Exemplo da Figura 1.1, onde temos uma tabela Clientes com os seus diversos Campos (atributos):
No exemplo da Figura II.1, temos uma entidade: Clientes e seus diversos atributos:
Cdigo do Cliente
Nome da Empresa
Nome do Contato
Cargo do Contato
Endereo
Em cada linha temos um conjunto de atributos e seus valores. Cada linha forma um Registro que identifica um
Cliente. Cada Coluna um atributo da tabela Clientes.
747 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Um dos grandes desafios em se projetar um banco de dados com sucesso a correta determinao das entidades que
existiro no banco de dados, bem como dos atributos de cada entidade. Mais adiante veremos algumas dicas e tcnicas
para determinar as tabelas necessrias, bem como os campos necessrios em cada tabela.
importante lembrar que o que determina quais as tabelas e campos necessrios o escopo do problema que est
sendo abordado. Por exemplo, se estamos desenvolvendo um sistema para acompanhamento do desempenho indi-
vidual de cada funcionrio, com certeza no teremos necessidade de uma tabela de Clientes. Por outro lado, se o
desempenho de cada funcionrio a ser acompanhado estiver ligado ao nmero de clientes atendidos pelo funcionrio
ou ao volume de vendas, a tabela Clientes passa a ter importncia para o problema em questo.
Com isso podemos dizer que o que determina as tabelas e campos necessrios o problema real que o sistema a ser
desenvolvido dever solucionar.
Outro fato importante, e que iremos repetir ao longo deste ANEXO, que cada tabela deve conter dados de SOMENTE
um determinado assunto. No devemos misturar dados de diversos assuntos em uma mesma tabela. Observe o
exemplo da tabela indicada na Figura II.2:
www.juliobattisti.com.br 748
ANEXO 2: O MODELO DE DADOS RELACIONAL
Quando este tipo de situao acontece, temos uma srie de problemas que iro se refletir em todo o sistema que est
sendo desenvolvido. Dentre os principais problemas podemos citar:
Informao repetida: Observe que para cada pedido de um determinado cliente, precisamos informar novamente
os campos: Nome, Endereo e Fone.
Informao inconsistente: Observe que por um erro de digitao, o nome do cliente Jos da Silva est digitado
incorretamente (sem o acento) no segundo registro, e o seu endereo est digitado incorretamente, no terceiro
registro. Isso causa inconsistncias no banco de dados, gerando resultados errados quando forem feitas pesquisas
pelo nome do cliente ou pelo endereo.
Para evitar este tipo de problema, deveramos separar as informaes dos Clientes e dos seus Pedidos em duas tabelas
distintas. Veremos como fazer isso mais adiante neste Anexo.
Ao definirmos um campo como sendo uma Chave Primria, estamos informando ao banco de dados que no podem
existir dois registros com o mesmo valor no campo Chave Primria, ou seja, os valores no campo Chave Primria
precisam ser nicos.
Por exemplo, se defino um campo Nmero da Identidade da tabela Clientes como sendo uma Chave Primria, estou
dizendo ao banco de dados que no podem existir dois clientes com o mesmo valor no campo Nmero da Identidade.
Na prtica estou garantindo que no podem ser cadastrados dois clientes com o mesmo Nmero de Identidade.
Em outras palavras poderamos dizer que o Campo Chave Primria identifica de maneira nica cada registro da
tabela, isto , de posse do valor da Chave Primria somente localizaremos um registro com aquele valor no campo
Chave Primria.
Este um conceito muito importante, pois conforme veremos mais adiante os conceitos de Integridade Referencial e
Normalizao esto diretamente ligados ao conceito de Chave Primria.
Alguns exemplos de campos que podem ser definidos como Chave Primria em suas respectivas tabelas:
749 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Na Figura I.3 vemos um exemplo da tabela Cliente onde o campo Cdigo do Cliente definido como uma Chave
Primria. Observe que no existem dois clientes com o mesmo cdigo.
Um detalhe importante que a Chave Primria pode ser formada pela combinao de Mais do que um campo. Podem
existir casos em que um nico campo no capaz de atuar como Chave Primria, pelo fato de este campo apresentar
valores repetidos. Nestes casos podemos definir uma combinao de dois ou mais campos para ser a nossa Chave
Primria. Alm disso, uma tabela somente pode ter uma Chave Primria, seja ela simples ou composta.
Um cuidado especial que devemos ter quanto ao desempenho das consultas em tabelas que possuem Chave Primria
composta por mais do que um campo. Em muitas situaes, o desempenho das consultas inversamente proporcional
ao tamanho da Chave Primria. Com isso quanto maior o tamanho da Chave Primria, menor o desempenho das
consultas, isto , mais demoradas se tornam as consultas. Na prtica dificilmente teremos uma Chave Primria composta
por mais do que 3 campos. Se voc se deparar com uma situao em que precise de uma Chave Primria composta de
quatro ou mais campos, revise o projeto do banco de dados, porque devem existir alguns problemas.
Clientes
Produtos
www.juliobattisti.com.br 750
ANEXO 2: O MODELO DE DADOS RELACIONAL
Pedidos
Detalhes do Pedido
Fornecedores
Categorias
Funcionrios, etc.
Embora as informaes estejam separadas em cada uma das Tabelas, devemos ter algum mecanismo que nos permita
reunir dados de duas ou mais tabelas em um relatrio ou consulta. Por exemplo, para fazer um relatrio do total de
vendas por funcionrio, precisarei de informaes das seguintes tabelas:
Funcionrios
Pedidos
Detalhes do pedido
O mecanismo que nos permite acessar, de maneira consolidada, dados de diversas tabelas chamado de Relacionamento
entre tabelas.
Por exemplo: Um Pedido feito por um Cliente e neste Pedido podem existir diversos Itens, os quais so armazenados
na tabela Detalhes do Pedido. Alm disso cada Pedido possui um nmero nico, mas um mesmo Cliente pode fazer
diversos pedidos.
Veja que o pargrafo acima descreve relaes do mundo real. Estas relaes do mundo real so o nosso guia, para
definir as relaes entre as diversas tabelas do banco de dados.
Em um banco de dados precisamos de um mecanismo para representar estes relacionamentos da vida Real, em termos
das tabelas e seus atributos. Isto possvel com a utilizao dos Relacionamentos, os quais podem ser de trs tipos:
Um para Um
Um para Vrios
Vrios para Vrios
Vamos imaginar o seguinte exemplo: Imagine uma escola com um cadastro de Alunos na tabela Alunos; destes apenas
uma pequena parte participa da Banda da Escola. Por questes de projeto do banco de dados, podemos optar por criar
uma segunda tabela Alunos da Banda, a qual pode se relacionar com a tabela Alunos atravs de um relacionamento
751 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Um para Um. Cada aluno somente cadastrado uma vez na tabela Alunos e uma nica vez na tabela Alunos da Banda.
Poderamos utilizar o campo Matrcula do Aluno como o Campo que relaciona as duas tabelas.
Na tabela Alunos da Banda poderamos colocar apenas o Nmero da Matrcula do aluno, alm das informaes a
respeito do Instrumento que ele toca, tempo em que est na banda, etc. Quando fosse necessrio buscar as informaes
tais como nome, endereo, etc., as mesmas podem ser recuperadas atravs do relacionamento existente entre as duas
tabelas, evitando, com isso, que a mesma informao (Nome, Endereo, etc.) tenha que ser duplicada nas duas tabelas,
o que diminui a probabilidade de erros de digitao.
Na Figura II.4 vemos o exemplo de um relacionamento do tipo Um para Um entre as tabelas Alunos e Alunos
da Banda.
Considere o exemplo entre a tabela Clientes e a tabela Pedidos. Cada Cliente somente cadastrado uma nica vez (por
isso o campo Cdigo do Cliente uma Chave Primria, indicando que no podem existir dois clientes com o mesmo
cdigo), portanto a tabela Clientes ser o lado um do relacionamento. Porm cada cliente pode fazer diversos pedidos;
por isso que o campo Cdigo do Cliente poder aparecer vrias vezes na tabela Pedidos, tantas vezes quantos forem os
pedidos que o Cliente tenha feito. Por isso que temos um relacionamento do tipo Um para Vrios entre a tabela Clientes
e Pedidos, atravs do campo Cdigo do Cliente, indicando que um mesmo Cliente pode fazer diversos pedidos.
Na Figura II.5 vemos um exemplo de um relacionamento Um para Vrios entre as Tabelas Clientes e Pedidos, atravs
do campo cdigo do cliente.
No lado Um do relacionamento o campo definido como uma Chave Primria (campo CdigoDoCliente na tabela
Clientes) e no lado Vrios no (campo CdigoDoCliente na tabela Pedidos), indicando que no lado vrios o Cdigo
do Cliente pode se repetir, o que faz sentido, uma vez que um mesmo cliente pode fazer diversos pedidos.
www.juliobattisti.com.br 752
ANEXO 2: O MODELO DE DADOS RELACIONAL
753 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Na prtica no temos como implementar um relacionamento deste tipo, devido a uma srie de problemas que este tipo
de relacionamento implicaria.
Para evitar este problema bastante comum quebrarmos um relacionamento do tipo Vrios para Vrios em dois
relacionamentos do tipo Um para Vrios. Isso feito atravs da criao de uma nova tabela, a qual fica com o lado
Vrios dos relacionamentos. No nosso exemplo poderamos criar a tabela Detalhes do Pedido, onde ficam armazenadas
as informaes sobre os diversos itens de cada pedido. Desta forma, ao invs de termos um relacionamento do tipo
Vrios para Vrios, teremos dois relacionamentos do tipo um para vrios, conforme indicado na Figura II.7.
Esta situao em que um relacionamento Vrios para Vrios quebrado em dois relacionamentos do tipo Um para
Vrios bastante comum. Diversas vezes utilizamos esta tcnica para eliminar problemas no banco de dados, tais
como informao repetida e inconsistncia de dados.
Agora que j conhecemos os tipos de relacionamentos existentes, no prximo item veremos o conceito de Integridade
Referencial. O mecanismo da Integridade Referencial utilizado para garantir a consistncia dos dados.
Integridade Referencial
A Integridade Referencial utilizada para garantir a integridade dos dados entre as diversas tabelas relacionadas,
evitando inconsistncias nos dados, bem como repeties desnecessrias.
Por exemplo, existe um relacionamento do tipo Um para Vrios entre a tabela Clientes e a tabela Pedidos (um cliente
pode fazer vrios pedidos). Com a Integridade Referencial, o banco de dados no permite que seja cadastrado um
Pedido para um Cliente que ainda no foi cadastrado na tabela Clientes. Atravs da Integridade Referencial, tambm
podemos garantir o seguinte:
Quando o Cdigo de um cliente for alterado na tabela Clientes, o banco de dados atualiza, automaticamente,
todos os Cdigos do Cliente na tabela Pedidos, de tal maneira que no fiquem registros rfos, isto , registros
de Pedidos com um Cdigo de Cliente que no existe mais na tabela Clientes. Essa ao conhecida como
Propagar atualizao dos campos relacionados ou Propagar atualizaes em cascata.
Quando um cliente for excludo da tabela Clientes, podemos fazer com que o banco de dados exclua, na tabela
Pedidos, todos os Pedidos para o cliente que est sendo excludo. Essa opo conhecida como Propagar
www.juliobattisti.com.br 754
ANEXO 2: O MODELO DE DADOS RELACIONAL
excluso dos registros relacionados ou Propagar excluses em cascata, e pode ser habilitada ou no,
dependendo do projeto do banco de dados. Caso seja necessrio manter todo o histrico de compras do cliente,
por exemplo, esta opo no deve ser habilitada. Com isso, quando o cliente for eliminado da tabela Clientes,
os seus pedidos continuaro gravados na tabela Pedidos.
Essas opes so definidas no momento da criao do banco de dados, quando so criadas as tabelas e definidos os
relacionamentos entre as tabelas.
A opo de Propagar atualizao dos campos relacionados utilizada na maioria das situaes; j a opo de Propagar
excluso dos registros relacionados deve ser estudada caso a caso.
Normalizao de Tabelas
O objetivo da normalizao evitar os problemas provocados por falhas no Projeto do banco de dados, bem como
eliminar a mistura de assuntos e as correspondentes redundncias de dados.
Uma Regra de Ouro que devemos observar quando do projeto de banco de dados a de No Misturar assuntos em
uma mesma Tabela.
Por exemplo na tabela Clientes devemos colocar somente campos relacionados com o assunto Clientes. No devemos
misturar campos relacionados com outros assuntos, tais como Pedidos, Produtos, etc. Essa Mistura de Assuntos em
uma mesma tabela acaba por gerar repetio desnecessria dos dados bem como inconsistncias.
O Processo de Normalizao aplica uma srie de regras sobre as entidades de um banco de dados, para verificar se
estas esto corretamente projetadas. Embora existam 5 formas normais (ou regras de Normalizao), na prtica usamos
um conjunto de trs Formas Normais.
Normalmente, aps a aplicao das regras de Normalizao, algumas tabelas acabam sendo divididas em duas ou
mais tabelas, o que no final acaba gerando um nmero maior de tabelas do que o originalmente existente. Este
processo causa a simplificao dos atributos de uma tabela, colaborando significativamente para a estabilidade do
modelo, reduzindo-se consideravelmente as necessidades de manuteno.
Por isso dissemos que uma tabela que possui Grupos de Repetio no est na Primeira Forma Normal. Considere a
tabela Indicada na Figura II.8:
Podemos notar que uma tabela com esta estrutura apresenta diversos problemas. Por exemplo, se um casal tiver mais
do que um filho, teramos que digitar o Nome do Pai e da Me diversas vezes, tantas quantos forem os filhos. Isso
forma um Grupo de Repetio. Alm do mais pode ser que, por erro de digitao, o nome dos pais no seja digitado
755 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
exatamente igual todas as vezes, o que pode acarretar problemas na hora de fazer pesquisas ou emitir relatrios. Este
problema ocorre porque Misturamos Assuntos em uma mesma tabela. Colocamos as informaes dos Pais e dos
Filhos em uma mesma tabela.
Criamos uma tabela separada para a Informao dos Pais e relacionamos a tabela Pais com a tabela Filhos atravs de
um relacionamento do tipo Um para Vrios, ou seja, Um casal pode ter Vrios filhos.
As duas tabelas resultantes da aplicao da primeira forma normal: Pais e Filhos esto na primeira forma normal; a
tabela original, a qual misturava informaes de Pais e Filhos, no estava na primeira forma normal.
www.juliobattisti.com.br 756
ANEXO 2: O MODELO DE DADOS RELACIONAL
A Chave Primria composta formada pela combinao dos campos NmeroDaMatrcula e CdigoDoCurso. O
campo Avaliao depende tanto do CdigoDoCurso quanto do NmeroDaMatrcula, porm o campo
DescrioDoCurso depende apenas do CdigoDoCurso. Com isso temos um campo que no faz parte da Chave
Primria e depende apenas de um dos campos que compem a Chave Primria. Com isso dizemos que esta tabela
no est na segunda forma normal.
A resoluo para este problema tambm simples: Dividimos a tabela, que no est na segunda forma normal, em
duas outras tabelas, conforme indicado pela Figura II.11, sendo que as duas tabelas resultantes esto na segunda
forma normal.
757 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
A soluo para este caso tambm simples. Novamente basta dividir a tabela em duas outras, conforme indicado pela
Figura II.13. As duas tabelas resultantes esto na terceira forma normal.
www.juliobattisti.com.br 758
ANEXO 2: O MODELO DE DADOS RELACIONAL
Um bom Sistema Gerenciador de Banco de Dados Relacionais (SGBDR) aquele que encontra e nos fornece,
rapidamente, todas as informaes necessrias que nele estejam armazenadas, mesmo em diferentes tabelas. Para que
isto seja possvel necessrio incluir um campo ou conjunto de campos que identifiquem de um modo nico cada
registro de uma tabela. Esta informao chamada Chave Primria, conforme descrito anteriormente. Deve-se ter
certeza de que este campo (ou conjunto de campos) seja sempre diferente para cada registro, por no serem permitidos
valores duplicados em um campo de Chave Primria.
759 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Na Figura II.14 temos um exemplo de um Diagrama Entidade x Relacionamentos. Este diagrama mostra a estrutura
do Banco de dados NorthWind.mdb, o qual fornecido juntamente com o Microsoft Access e tambm como exemplo
na instalao do Microsoft SQL Server 2000. Os campos que so Chave Primria esto indicados em negrito.
Concluso
Os conceitos apresentados neste anexo fornecem as bases necessrias para que voc entenda o modelo de dados
relacional. Sem um correto entendimento deste modelo, fica muito difcil entender e utilizar as classes do Framework
.NET para trabalho com banco de dados.
www.juliobattisti.com.br 760
ANEXO 3: A LINGUAGEM SQL
Introduo ANEXO
Nos exemplos deste livro, utilizamos uma srie de comandos para realizar uma
srie de operaes sobre os dados armazenados, como por exemplo:
Para realizar estas operaes, utilizada uma linguagem conhecida com SQL
Structured Query Language. A linguagem SQL foi desenvolvida pela IBM, porm,
devido ao seu poder e facilidade de utilizao, rapidamente tornou-se um padro
de mercado, sendo hoje utilizada pela maioria dos bancos de dados que seguem o
modelo Relacional.
Conhecendo o SQL
O SQL foi desenvolvido para ser uma linguagem padro para operaes em banco
de dados. A linguagem SQL foi elaborada para ser independente de hardware ou
761 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
software. Ao usar SQL, voc no precisa saber a respeito do software de banco de dados ou do hardware envolvido em
uma operao. Tudo o que voc precisa conhecer o mtodo (instruo) SQL padro para solicitar informaes, que
obrigatoriamente o mesmo (no sejamos to otimistas, digamos que quase o mesmo), em todos os sistemas que
utilizam o SQL.
Obs.: Existem pequenas diferenas nas implementaes do SQL de diferentes fabricantes. Desta forma algumas rotinas
escritas utilizando o SQL Plus do Oracle podem no rodar, sem alteraes no Microsoft SQL ou do Microsoft Access
e vice-versa.
Na listagem a seguir temos um exemplo de uma instruo SQL. Embora a mesma parea complexa, neste primeiro
momento, veremos que a Linguagem SQL bastante simples e de fcil aprendizado.
Uma Instruo SQL descreve o conjunto de dados que voc deseja recuperar (quais campos, de quais tabelas, Critrios
de filtragem, classificao, Expresses Calculadas, etc.).
Todas as instrues SQL so conduzidas com um nico comando que contm uma descrio completa da informao
exigida. Ao escrever uma instruo SQL, voc no deve se preocupar em como os dados so recuperados, mas somente
com o contedo do conjunto de dados. Esse o principal benefcio do mtodo SQL.
Lembre-se de que o SQL um padro de mercado para expresses de consulta em banco de dados. Embora a maior
parte das verses do SQL compartilhe elementos bsicos, elas no so idnticas. O Access SQL usa algumas palavras-
chave que voc no encontra em outras verses do SQL. Tambm existem pequenas diferenas entre o Microsoft
Access e o Microsoft SQL Server.
Veremos atravs de exemplos a utilizao das principais palavras-chaves do SQL para a construo de expresses
SQL para pesquisa em banco de dados.
A Instruo SELECT
Esta com certeza a Instruo SQL mais importante; no existe pesquisa que no utilize esta instruo. Vamos
conhec-la em detalhes.
A Instruo Select utilizada para especificar quais os campos de quais tabelas faro parte da consulta, quais os
critrios de pesquisa que sero utilizados, qual a ordem de classificao, etc.
www.juliobattisti.com.br 762
ANEXO 3: A LINGUAGEM SQL
SELECT
campo1, campo2, campo3
FROM nome_da_tabela
[WHERE condio ]
[GROUP BY nome_do_campo ]
[HAVING ... ]
[ORDER BY... ]
Elemento Descrio
campo1, campo2, ... campon Nome dos campos a serem retornados a partir de uma ou mais tabelas.
nome_da_tabela Nome da tabela a partir da qual os dados devem ser recuperados.
WHERE Permite que sejam especificados critrios de pesquisa.
GROUP BY Podemos agrupar os resultados em torno de um ou mais campos de dados. Por exemplo,
em um relatrio de vendas anuais, posso ter os resultados agrupados por ms, com a
soma das vendas do ms logo aps a listagem de vendas do ms.
HAVING Especifica critrios para serem utilizados juntamente com Group By.
ORDER BY Podemos ordenar os resultados obtidos com base em um ou mais campos de dados. Por
exemplo, podemos ordenar uma listagem de vendas em ordem alfabtica do nome do
cliente ou do nome do vendedor.
Exemplo 1: Criar uma instruo SQL que retorne o campo NmeroDoPedido, o campo DataDoPedido, o campo Frete
e o campo PasDeDestino da tabela Pedidos.
Observe que os nomes dos campos esto separados por vrgula, e alm disso estamos utilizando o nome completo, isto
: Nome_da_tabela.Nome_do_campo. Tambm poderamos utilizar o comando, sem o nome da tabela antes do nome
do campo, conforme indicado no seguinte comando:
763 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Por exemplo, imagine que estejamos escrevendo uma instruo SQL para criar uma
listagem com o Cdigo e o Nome do Cliente, bem como todos os pedidos efetuados
IMPORTANTE: Somente
pelo Cliente. Acontece que o cdigo do Cliente, no nosso exemplo, existe nas duas
obrigatria a utilizao
tabelas: Clientes e Pedidos. Neste caso devemos especificar o nome da tabela, antes do
do nome da tabela antes
nome do campo.
do nome do campo
quando o mesmo campo
Exemplo 2: Alterar a instruo SQL anterior para que os registros sejam classificados existir em duas ou mais
em ordem crescente pelo valor do Frete. tabelas que fazem parte
da instruo Select.
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM
Pedidos
ORDER BY Frete
Observe a utilizao da clusula ORDER BY Frete para classificar os registros em ordem Crescente. A classificao
em ordem crescente o padro . Quando formos classificar em ordem decrescente, precisamos especificar a palavra
DESC, conforme indicado no seguinte comando:
Exemplo 3: Agora vamos inserir condies. Muitas vezes as condies so chamadas de filtro, uma vez estabelecida
uma condio, somente os registros que atendem a condio especificada sero retornados. Desta forma a condio
atua como se fosse um filtro. Neste exemplo vamos alterar a instruo SQL anterior para que sejam exibidos somente
os pedidos cujo PasDeDestino seja Brasil.
Observe a utilizao da Clusula WHERE para filtrar somente os pedidos cujo PasDeDestino seja Brasil. Como o
campo PasDeDestino um campo do tipo texto, o valor do critrio (Brasil) tem que vir entre apstrofes. Vamos
trabalhar um pouco mais com a clusula WHERE.
Exemplo 4: Altere a instruo SQL anterior para que sejam exibidos somente os pedidos para o Brasil ou Alemanha
como PasDeDestino.
Observe a utilizao da clusula OR ligando os dois Critrios. Lembre que a clusula OR retorna um registro se o
PasDeDestino atender um dos dois critrios, isto , se for Brasil ou se for Alemanha, o registro ser selecionado, que
exatamente o que desejamos, ou seja, todos os pedidos para o Brasil ou para a Alemanha.
Exemplo 5: Altere a instruo SQL anterior, retirando o critrio para PasDeDestino. Adicione um critrio para
NmeroDoPedido maior do que 10500, retire a classificao do campo Frete a classifique pelo campo NmeroDoPedido.
www.juliobattisti.com.br 764
ANEXO 3: A LINGUAGEM SQL
Observe a clusula WHERE utilizando o operador de comparao maior do que ( > ) e a classificao atravs da
clusula ORDER BY no campo NmeroDoPedido.
Podemos ver, atravs dos exemplos, que a linguagem SQL no to difcil como pode parecer primeira vista.
Observe que a sintaxe da linguagem bastante intuitiva e orientada extrao de dados atravs das consultas.
Vamos continuar analisando alguns exemplos de aplicao da Linguagem SQL com a utilizao de recursos mais
avanados.
Exemplo 6: Alterar a instruo SQL anterior, e adicionar um critrio de tal maneira que somente sejam exibidos os
pedidos para o Ano de 1995. Tirar o critrio do campo Nmero do Pedido.
Observe a utilizao da funo Year para extrairmos apenas o Ano do campo DataDoPedido a fim de especificarmos
como critrio o Ano=1995. Tambm a clusula Order By foi mantida, classificando a listagem em ordem crescente
pelo nmero do pedido. A utilizao de funes junto com os comando SQL nos fornece inmeras possibilidades de
refinamento em nossas consultas.
Exemplo 7: Alterar a instruo SQL anterior, para que sejam exibidos somente os pedidos no Perodo de 01/01/1995
a 31/07/1995 e que tenham como PasDeDestino Brasil, Argentina, Alemanha ou Canad.
Observe a utilizao de vrios critrios em diferentes campos. Colocamos critrios nos campos DataDoPedido e PasDeDestino.
Os critrios de dois ou mais campos so ligados atravs do operador AND, indicando que um registro deve atender ambos os
critrios para ser selecionado. Tambm temos a utilizao dos operadores Between (Entre) para selecionar as datas dentro de
um determinado intervalo e do operador In (Em) para selecionar o campo PasDeDestino que seja igual a um dos valores
apresentados na lista. Observe, tambm, que os valores de data vm delimitados por apstrofes (). Se voc estiver utilizando
o Microsoft Access, o valor para os campos do tipo Data deve vir entre sinais de #, ao invs do apstrofe.
Exemplo 8: Criar uma instruo SQL que retorne o campo NmeroDoPedido, o campo DataDoPedido, o campo
DataDeEntrega, o campo Frete e o campo PasDeDestino da tabela Pedidos. Criar uma coluna adicional que calcula o
nmero de dias entre a DataDeEntrega e a DataDoPedido. Chamar esta coluna de Dias_Ped_Entr.
765 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Veja que a coluna calculada DataDeEntrega-DataDoPedido est junto com a listagem dos campos no incio da instruo
Select. Alm disso foi utilizada a palavra AS para atribuir um nome (apelido) para esta coluna calculada. Este nome
o que ser utilizado para fazer referncia coluna, em uma pgina ASP.NET ou um programa desenvolvido em Visual
Basic, por exemplo.
Voc tambm pode classificar a listagem em ordem crescente ou decrescente de um campo calculado. Por exemplo, se
voc quisesse classificar a listagem do item anterior, em ordem crescente, do nmero de dias entre a DataDeEntrega
e a DataDoPedido, bastaria utilizar a seguinte instruo SQL:
Exemplo 9: Alterar a instruo SQL anterior, eliminando os critrios para a DataDoPedido e para o PasDeDestino.
Colocar um novo critrio para PasDeDestino, onde sejam exibidos apenas os pedidos cujo PasDeDestino tem a
Primeira Letra na faixa de A at M. Utilize o operador Like.
Observe a utilizao do Operador Like no critrio de Pesquisa para esta consulta. Nunca demais salientar que
a utilizao das instrues SQL juntamente com as funes e operadores como o Like, nos fornece um amplo
conjunto de possibilidades. O caractere % utilizado como um caractere curinga. Por exemplo, se especificarmos
o seguinte critrio:
sero retornados todos os registros para Clientes cujo nome inicia com Joo. O caractere curinga % significa, em
termos simples: qualquer coisa, ou seja, o critrio especifica que o nome inicie com Joo, no importando (qualquer
coisa) o que vier depois.
www.juliobattisti.com.br 766
ANEXO 3: A LINGUAGEM SQL
At agora estivemos trabalhando com Instrues que selecionam registros de uma nica
tabela. Porm bastante comum criarmos instrues SQL baseadas em duas ou mais
IMPORTANTE: Aqui cabe
tabelas. Quando criamos instrues SQL que buscam dados em duas ou mais tabelas,
um aviso importante para
dizemos que est sendo feito um Join entre as duas tabelas.
os usurios do Microsoft
Access. No Microsoft Access,
Normalmente este Join (ou ligao) feito atravs de um campo comum s duas tabelas. o caractere curinga o *, j
Por exemplo, NmeroDoPedido na tabela Pedidos e NmeroDoPedido na tabela Detalhes no Microsoft SQL Server
do Pedido. Outro exemplo, CdigoDoCliente na tabela Pedidos e CdigoDoCliente na tabela 2000, utilizamos como
Clientes. Pode acontecer de termos consultas que trabalham com trs ou mais Tabelas; neste caractere curinga o %, o
caso teremos diversos Joins. O nmero de Joins sempre igual ao nmero de tabelas menos qual tambm utilizado na
um. Por exemplo, se a nossa consulta acessar dados de quatro tabelas, teremos trs joins. construo de pginas
ASP.NET.
Agora passaremos e explorar na Prtica, atravs de exemplos, a construo de Instrues
SQL que trabalham com duas ou mais tabelas.
Exemplo 10: Criar uma instruo SQL que selecione os seguintes campos:
Alm disso, as tabelas Pedidos e Detalhes do Pedido esto relacionadas pelo campo NmeroDoPedido, atravs de um
relacionamento do tipo Um para Vrios.
767 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Primeiro devemos observar que, pelo fato de estarmos tratando com dados de duas tabelas, estamos utilizando a
nomenclatura completa, isto , Nome_da_tabela.Nome_do_campo.
Observe a utilizao da clusula INNER JOIN, ligando as tabelas Pedidos e DetalhesdoPedido, atravs do campo
NmeroDoPedido, conforme especificado na clusula ON, onde temos o seguinte:
ON
Pedidos.NmeroDoPedido = DetalhesdoPedido.NmeroDoPedido
Observe que esta listagem ir trazer vrios registros para cada Pedido, tantos quantos forem os itens de cada pedido.
Mas se, ao invs do CdigoDoProduto, ns quisssemos que fosse exibida a Descrio do Produto?
Em primeiro lugar esta informao encontra-se na tabela Produtos; logo, teremos que adicionar a Tabela Produtos
nossa consulta, a qual ir se ligar tabela Detalhes Do Pedido atravs do campo CdigoDoProduto; logo teremos mais
um Join. Para trs tabelas teremos dois Joins.
Aps adicionar a tabela Produtos e substituir o campo CdigoDoProduto pelo campo NomeDoProduto, a nossa instruo
SQL deve ficar conforme indicado no seguinte comando:
Observe que neste caso temos um INNER JOIN dentro do outro. Dentro do parnteses feita a ligao entre as tabelas
Pedidos e DetalhesdoPedido, atravs do campo NmeroDoPedido, e externamente feita a ligao entre as tabelas
Produtos e DetalhesdoPedido, atravs do campo NmeroDoPedido.
Podemos utilizar diversos nveis de INNER JOIN, embora esta no seja uma prtica recomendada, pois, se aumentarmos
muito os nveis de INNER JOIN, posso ter como resultado pesquisas mais lentas em conseqncia do aumento da
complexidade das consultas. At 3 ou 4 nveis considerado normal, acima disso preciso repensar a maneira de
construir a consulta.
Exemplo 11: Alterar a instruo SQL do item anterior para que somente sejam exibidos os pedidos para os produtos
cujo NomeDoProduto inicie com uma letra na faixa de A at J. Tirar a classificao do campo NmeroDoPedido
e classificar em ordem crescente do campo NomeDoProduto.
www.juliobattisti.com.br 768
ANEXO 3: A LINGUAGEM SQL
Observe, alm dos dois INNER JOIN, a utilizao da clusula WHERE em conjunto com Operador LIKE para
especificar o critrio desejado.
At este momento estivemos construindo Instrues SQL que executam consultas no banco de dados. Especificamos
quais campos sero exibidos, critrios de filtragem para estes campos e uma ordem de classificao. A partir de agora
aprenderemos a utilizar Instrues SQL para a construo de outros tipos de operaes, as quais realizam alteraes e
incluses em tabelas de banco de dados.
A Instruo UPDATE
A instruo UPDATE utilizada para alterar informaes em um banco de dados. Poderamos, por exemplo, criar um
formulrio onde o usurio pode alterar os seus dados cadastrais. Primeiro os dados so recuperados a partir do banco
de dados,e em seguida as alteraes so enviadas de volta para o banco de dados, atravs de uma instruo UPDATE.
Vamos estudar esta instruo atravs de exemplos, assim como fizemos com a instruo SELECT.
Exemplo 1: Criar uma instruo SQL que aumenta o PreoUnitrio em 20 % na tabela DetalhesdoPedido, devido a um
ajuste na moeda e uma desvalorizao em relao ao Dlar.
UPDATE DetalhesdoPedido
SET PreoUnitrio = PreoUnitrio*1.2
Observe a simplicidade da instruo SQL. Utilizamos uma instruo UPTADE, seguida do nome da tabela onde ser
feita a atualizao. Em seguida uma instruo SET com a expresso de atualizao para aumentar em 20 % o
PreoUnitrio em todos os registros da tabela DetalhesdoPedido.
Exemplo 2: Alterar a instruo SQL do item anterior para que somente sejam aumentados em 20%, o campo
PreoUnitrio dos registros cujo PreoUnitrio for maior ou igual a R$ 20,00.
769 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
UPDATE DetalhesdoPedido
SET PreoUnitrio = PreoUnitrio*1.2
WHERE PreoUnitrio>=20
Adicionamos uma clusula WHERE, para atualizar apenas os registros cujo PreoUnitrio seja maior ou igual a R$
20,00.
Exemplo 3: Alterar a instruo SQL do Exemplo anterior para que somente sejam aumentados os registros cujo
PreoUnitrio for maior ou igual a R$ 20,00 e cujo NmeroDoPedido seja menor do que 10500.
UPDATE DetalhesdoPedido
SET PreoUnitrio = PreoUnitrio*1.2
WHERE (PreoUnitrio>=20)
AND
(NmeroDoPedido<10500)
Observe que utilizamos critrios em dois campos (PreoUnitrio e NmeroDoPedido) e que estes critrios esto
ligados por um operador AND, o que significa que um registro somente ser atualizado se ele atender aos dois critrios
ao mesmo tempo (PreoUnitrio maior ou igual a 20 e NmeroDoPedido menor do que 10500). Se o registro atender
apenas uma das condies, o registro no ter o seu PreoUnitrio atualizado.
Vamos refinar um pouco mais a nossa consulta de atualizao. Vamos fazer com que somente sejam atualizados os
Pedidos para o ano da DataDoPedido igual a 1995, e ainda iremos manter os critrios adicionados at agora.
Exemplo 4: Alterar a instruo SQL do Exemplo anterior para incluir um critrio para que o Ano da DataDoPedido
seja 1995. Voc ter que incluir a tabela Pedidos, uma vez que o campo DataDoPedido encontra-se nesta tabela.
UPDATE Pedidos
INNER JOIN
DetalhesdoPedido
ON
Pedidos.NmeroDoPedido = DetalhesdoPedido.NmeroDoPedido
SET DetalhesdoPedido.PreoUnitrio = PreoUnitrio*1.2
WHERE (DetalhesdoPedido.PreoUnitrio>=20)
AND
(DetalhesdoPedido.NmeroDoPedido<10500)
AND
Year(DataDoPedido)=1995)
www.juliobattisti.com.br 770
ANEXO 3: A LINGUAGEM SQL
atualizao. Segundo, temos a utilizao da funo Year para extrair apenas o ano do campo DataDoPedido e
compar-lo com o critrio 1995.
Novamente cabe ressaltar que a utilizao de Operadores e Funes nos fornece uma grande flexibilidade em termos
de construo de nossas consultas.
A Instruo INSERT
A instruo INSERT utilizada para adicionar registros em uma tabela de um banco de dados. Por exemplo, quando
o usurio preenche os dados de um formulrio de cadastro e envia estes dados para o banco de dados, podemos utilizar
a instruo INSERT para inserir os dados em uma tabela do banco de dados.
Nome: Paulo
Sobrenome: Braga
Cargo: Estagirio
Exemplo 2: Este exemplo seleciona todos os estagirios de uma tabela Estagirios que tenham sido contratados h
mais de 30 dias e adiciona os registros selecionados tabela Funcionrios.
Observe que utilizamos a funo Date( ) para capturar a data do Sistema e subtramos 30, para obter apenas os
funcionrios contratados h mais do que 30 dias.
A Instruo DELETE
A instruo DELETE utilizada para excluir registros de um banco de dados. Vamos supor que voc tenha desenvolvido
uma aplicao Web para agenda eletrnica, onde o usurio pode cadastrar contatos, endereos, telefones e compromissos.
Podemos criar uma pgina ASP.NET que permite ao usurio eliminar dados que no sejam mais necessrios na agenda.
Neste caso podemos fazer uso da instruo DELETE. Vamos a um exemplo prtico.
Exemplo 1: Criar uma instruo SQL que elimine todos os Pedidos da tabela Pedidos cujo PasDeDestino seja a
Alemanha.
771 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
DELETE Pedidos.PasDeDestino
FROM Pedidos
WHERE Pedidos.PasDeDestino=Alemanha
A instruo to simples que praticamente dispensa comentrios. A nica recomendao importante que no devemos
utilizar uma instruo DELETE, sem a utilizao de uma clusula WHERE. Utilizar um DELETE sem uma clusula
WHERE significa que estaremos eliminando todos os registros da tabela.
Neste item apresentamos uma breve introduo linguagem SQL, que no Microsoft SQL Server chamada de Trans-
act-SQL. De maneira alguma foram apresentadas todas as instrues e comandos disponveis.
Clientes
Pedidos
Detalhes do Pedido
Para que possamos acessar dados de duas ou mais tabelas, em uma consulta, utilizamos uma clusula JOIN. Um
JOIN uma operao que nos permite acessar dados de duas ou mais tabelas. O JOIN efetuado com base em
uma coluna que seja comum a duas ou mais tabelas. Por exemplo, se fizermos um JOIN entre as tabelas Pedidos
e Detalhes do Pedido, o JOIN ser efetuado atravs da coluna NmeroDoPedido, que a coluna que relaciona as
duas tabelas. Na tabela Detalhes do Pedido, o campo NmeroDoPedido utilizado para indicar a qual pedido
pertence um determinado item.
Exemplo: Escrever um comando SQL que retorne os campos indicados na Tabela III.2.
www.juliobattisti.com.br 772
ANEXO 3: A LINGUAGEM SQL
Campo Tabela
NmeroDoPedido Pedidos
DataDoPedido Pedidos
CdigoDoProduto Detalhes do Pedido
PreoUnitrio Detalhes do Pedido
Quantidade Detalhes do Pedido
Esta listagem ir retornar uma linha para cada item de cada pedido, com os campos indicados na Tabela III.2. Por
exemplo, se um campo tiver 5 itens sero retornadas 5 linhas, com o mesmo valor para o campo NmeroDoPedido e
OrderDate e diferentes valores para os demais campos. Para construir a listagem solicitada, utilizamos o seguinte
comando:
773 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Observe que, para cada pedido, aparecem tantas linhas quantas forem os itens do pedido.
Alm do JOIN ligando as duas tabelas, devemos especificar qual o campo em comum nas duas tabelas. Isto feito
pela clusula ON.
Tipos de JOIN
Existem trs tipos de JOIN, conforme listado a seguir:
INNER JOIN: Este o JOIN padro, isto , se no especificarmos o tipo de JOIN a ser utilizado, ser utilizado
um INNER JOIN. A caracterstica do INNER JOIN que somente so retornados os registros que tm valores
coincidentes nas duas ou mais tabelas. Por exemplo, se tivermos um INNER JOIN ligando as tabelas Clientes
e Pedidos, somente sero retornados os registros para os clientes que tm algum pedido na tabela Pedidos.
Clientes que no efetuaram pedidos (portanto no tm registros coincidentes na tabela Pedidos) no faro
parte do resultado da operao INNER JOIN. A seguir um exemplo de utilizao de um INNER JOIN, entre as
tabelas Clientes e Pedidos:
SELECT [Clientes].[CdigoDoCliente], [Clientes].[NomeDaEmpresa],
[Clientes].[Cidade],[Pedidos].[NmeroDoPedido],
[Pedidos].[DataDoPedido]
FROM [Clientes]
INNER JOIN
[Pedidos]
ON
[Clientes].[CdigoDoCliente]= [Pedidos].[CdigoDoCliente]
Este comando retorna todos os clientes que tm pedidos e os respectivos pedidos. Se um cliente tiver 10 pedidos,
retornaro 10 registros para este cliente, um para cada pedido. Clientes que no tm pedido, no aparecero na listagem.
LEFT OUTER JOIN: Este tipo retorna todos os registros da primeira tabela e os registros relacionados da
segunda tabela. No nosso exemplo, na listagem anterior, se trocarmos o INNER JOIN por um LEFT OUTER
JOIN, sero retornados todos os Clientes e os pedidos relacionados, e tambm os clientes que no possuem
pedidos. Para aqueles clientes que no possuem pedidos, os campos NmeroDoPedido e DataDoPedido tero
o valor Null. A seguir temos o comando que utiliza um LEFT OUTER JOIN:
www.juliobattisti.com.br 774
ANEXO 3: A LINGUAGEM SQL
Na Figura III.1 podemos observar que foram retornados inclusive os clientes que no possuem pedidos, o que
indicado pelos valores NULL nos campos NmeroDoPedido e OrderDate.
RIGHT OUTER JOIN: Este tipo retorna todos os registros da segunda tabela e IMPORTANTE: Se voc
os registros relacionados da primeira tabela. Um exemplo de RIGHT OUTER utilizar o Banco de dados
JOIN: Northwind que vem com o
SELECT [Clientes].[CdigoDoCliente],
[Clientes].[NomeDaEmpresa],
SQL Server 2000, sero
retornados todos os clientes,
[Clientes].[Cidade],[Pedidos].[NmeroDoPedido],
[Pedidos].[DataDoPedido] pois existem pedidos para
FROM [Clientes] todos. Para poder
exemplificar neste exerccio,
RIGHT OUTER JOIN
eu exclu os pedidos para os
[Pedidos]
clientes com os seguintes
ON
cdigos: ALFKI, ANATR,
[Clientes].[CdigoDoCliente]= ANTON, AROUT.\
[Pedidos].[CdigoDoCliente]
ORDER BY [Clientes].[CdigoDoCliente]
Na Figura III.2 podemos observar que foram retornados todos os pedidos da tabela
pedidos, mas apenas os clientes que possuem pedidos, isto , todos os registros da segunda tabela (Pedidos) e apenas
os registros relacionados da primeira tabela (Clientes).
775 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Campo Tabela
CdigoDoCliente Clientes
NomeDaEmpresa Clientes
NmeroDoPedido Pedidos
DataDoPedido Pedidos
TotalPedido ([Quantidade]*[PreoUnitrio])*(1-[Desconto])
Teremos uma listagem com o cdigo e o nome do cliente, o nmero, a data e o total do pedido, sendo que o total
calculado a partir de dados da tabela Detalhes do Pedido. Com isso estamos acessando campos de trs tabelas: Clientes,
Pedidos e Detalhes do Pedido. Trs tabelas = dois joins.
www.juliobattisti.com.br 776
ANEXO 3: A LINGUAGEM SQL
Primeiro vamos considerar o trecho onde feito o JOIN entre as trs tabelas. Na verdade o JOIN feito sempre entre
duas tabelas, dizemos duas a duas, conforme indicado no trecho a seguir:
777 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
ON
[Detalhes do Pedido].[NmeroDoPedido] = [Pedidos].[NmeroDoPedido]
INNER JOIN
[Clientes]
ON
[Pedidos].[CdigoDoCliente] = [Clientes].[CdigoDoCliente]
Primeiro fizemos o JOIN entre as tabelas [Detalhes do Pedido] e [Pedidos], atravs do campo [NmeroDoPedido].
Depois feito o JOIN entre as tabelas [Pedidos] e [Clientes], atravs do campo CdigoDoCliente.
Tambm utilizamos GROUP BY, para agrupar os diversos itens de cada pedido e a funo SUM, para calcular a soma
de todos os itens do pedido. No final ordenamos pelo cdigo do cliente [CdigoDoCliente].
Utilizando Subconsultas
Uma subconsulta um comando SELECT dentro de outro comando SELECT, ou seja, uma consulta dentro da outra.
Uma consulta pode ser utilizada em qualquer local onde uma expresso seja aceita.
Em alguns casos, podemos obter os mesmos resultados utilizando JOINs ao invs de subconsultas. Um detalhe para o
qual devemos estar atentos quando utilizamos subconsultas em relao ao desempenho. De uma forma geral, devemos
utilizar subconsultas quando quisermos dividir uma consulta complexa, em uma srie de passos mais simples, mas
que combinados geram o resultado da consulta complexa.
Exemplo: Criar uma listagem onde so exibidos os campos NmeroDoPedido da tabela Pedidos, o campo DataDoPedido
da tabela Pedidos e o maior preo unitrio dos itens que fazem parte do pedido. Para criar esta consulta, utilizamos o
seguinte comando:
www.juliobattisti.com.br 778
ANEXO 3: A LINGUAGEM SQL
Observe a subconsulta
Esta consulta pesquisa os diversos itens para cada pedido e retorna o maior preo unitrio.
Outro uso tpico de uma subconsulta como parmetro da filtragem da consulta. Considere o comando a seguir:
Este comando retorna os pedidos mais recentes, ou seja, para o valor mximo da data. O valor mximo da data
significa a data mais recente no banco de dados. O resultado desta consulta o seguinte:
A subconsulta determina a data mais recente, data esta que utilizada como critrios para a clusula WHERE. Em
resumo, o resultado retornado pela subconsulta passado para a clusula WHERE.
Se trocarmos o MAX por MIN, teremos uma listagem dos pedidos mais antigos. Execute o seguinte comando:
779 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Temos um tipo especial de subconsulta chamada de Subconsulta correlacionada Correlated subqueries. Neste tipo
de subconsulta a subconsulta utiliza informaes da consulta principal e executada para cada linha retornada pela
consulta externa. Neste tipo de subconsulta que temos que tomar cuidados com o desempenho. Por exemplo, se a
consulta principal retorna 5000 registros, a subconsulta ser executada 5000 vezes.
Mais uma vez vamos utilizar um exemplo para ilustrar este conceito.
Exemplo: Criar uma consulta que liste o nome de todos os funcionrios que fizeram pedidos para o Brazil, em que o
campo DataDoPedido tem o ano de 1997. Para obter esta listagem, utilizamos o seguinte comando:
SELECT
[Funcionrios].[Nome]+ +[Funcionrios].[Sobrenome] As NomeCompleto,
CdigoDoFuncionrio FROM Employees
WHERE EXISTS
(SELECT * FROM [Pedidos]
WHERE
[Funcionrios].[CdigoDoFuncionrio]=[Pedidos].[CdigoDoFuncionrio]
AND Year([DataDoPedido])=1997')
ORDER BY [Funcionrios].[Nome]
1. Os valores obtidos pela consulta externa (primeiro SELECT) so passados para a consulta interna. Lembre que
para cada registro obtido pela consulta externa, a consulta interna executada.
2. A consulta interna (segundo SELECT) utiliza o valor passado pela consulta externa e executa o comando SE-
LECT da subconsulta.
3. Aps a execuo, a subconsulta retorna o seu resultado para a consulta principal.
4. Com base no valor retornado pela subconsulta, em conjunto com a funo EXISTS, o registro retornado pela
consulta externa includo ou descartado do resultado final. O prximo registro retornado pela consulta externa
passado para a consulta interna, a qual executa novamente. E o processo continua, at que todos os registros da
consulta principal tenham sido passados para a consulta interna. Desta maneira vemos que a consulta interna
executada tantas vezes, quantos forem os registros retornados pela consulta externa.
NomeCompleto Cdigo
Andrew Fuller 2
Anne Dodsworth 9
Janet Leverling 3
Laura Callahan 8
Margaret Peacock 4
Michael Suyama 6
www.juliobattisti.com.br 780
ANEXO 3: A LINGUAGEM SQL
Nancy Davolio 1
Robert King 7
Steven Buchanan 5
A correta utilizao de subconsultas pode facilitar a obteno de resultados aparentemente complexos de se obter com
um nico comando SELECT. Porm, mais uma vez, vou ressaltar o cuidado em relao ao desempenho, quando
tratamos com subconsultas.
Concluso
Neste anexo apresentamos uma noo bsica da Linguagem SQL.
Utilizao de JOIN
Subconsultas
781 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Introduo ANEXO
Neste antexo apresento uma lista de sites com informaes sobre .NET, C# e
ASP.NET. Nestes sites voc encontrar informaes tais como:
Artigos.
Exemplos de cdigo.
Componentes e Web Services gratuitos.
Componentes e Web Services pagos.
4
Na Tabela IV.1 temos a lista de sites indicados. Sites Sobre ASP.NET, C# e
XML
Tabela IV.1 Sites sobre ASP.NET.
Site Descrio
msdn.microsoft.com/net Site oficial da Microsoft sobre o .NET. Aqui voc
encontra link para fazer o Download do Framework .NET,
link para encomendar os CDs de avaliao do Visual
Studio .NET. Tambm est disponvel a documentao
atualizada para todas as linguagens e tecnologias do
.NET. , sem dvida, referncia obrigatria para quem
est iniciando os estudos de .NET. Eu recomendo.
www.asp.net Um portal de informaes sobre ASP.NET, C# e
tecnologias .NET em geral. Contm links para outros
excelentes sites. Referncia obrigatria. Simplesmente
fantstico. Eu recomendo.
www.123aspx.com Excelente site, com links para artigos, classificados por
categoria: Banco de dados, segurana, Web Services, etc.
Contm links para diversos sites especializados em
ASP.NET. Eu recomendo.
www.aspnextgen.com timo site com lies gratuitas sobre os aspectos
bsicos do ASP.NET.
www.asptoday.com Site pago. A assinatura anual custa U$ 50,00. Contm uma
grande quantidade de artigos e tutoriais sobre ASP.NET.
www.aspfree.com Link para artigos, sites, componentes. Links para
assuntos diversos como SOAP, PHP, XML, C# e .NET em
geral.
www.aspnextgen.com timo site com lies gratuitas sobre os aspectos bsicos
do ASP.NET.
www.juliobattisti.com.br 782
ANEXO 4: SITES SOBRE ASP.NET, C# E XML
Site Descrio
www.4guysfromrolla.com Um grande nmero de artigos com o cdigo disponvel. Links para outros sites. Trata
de assuntos tais como: ASP, ASP.NET, C#. Fantstico, eu recomendo.
www.411asp.net O mais completo portal sobre ASP.NET. Centenas de links divididos por categorias:
Aplicaes, Exemplos e Tutoriais, Cdigos, Componentes, Comunidades, Hospedagem
com suporte a ASP.NET, etc. Excelente, eu recomendo.
www.developersdex.com Bom site com informaes sobre ASP, ASP.NET, C#
(melhor rea do site), XML, SOAP, ADSI e VB.
www.dotnetexperts.com Uma comunidade de especialistas em .NET, onde so publicados artigos sobre
ASP.NET, XML, SOAP, C#, alm de links para diversos outros sites relacionados.
www.plusasp.com Site interessante com diversos exemplos prticos.
Cdigo dos exemplos disponvel. Explicaes
detalhadas sobre cada exemplo.
www.superexpert.com Site com tutoriais, artigos e links sobre ASP, ASP.NET e Web Services.
www.superexpert.com Excelente site. Com muitos artigos, links e informaes sobre: ASP, ASP.NET, PHP,
Java, Java Script e CGI. Eu recomendo.
www.aspx101.net Maravilhoso. Artigos, Revistas, links, tutoriais. Tudo muito bem organizado e fcil de
localizar. Destaque para informaes sobre Web Services. Eu recomendo.
www.asp101.com/aspplus Bom site. Com links para artigos divididos por
categoria. Tambm contm links para outros sites
sobre ASP.NET.
www.aspwire.com Bom site. Com artigos, dicas e tutoriais. Bom design e navegao intuitiva.
www.15seconds.com/focus/.NET.htm Lista com diversos artigos gratuitos sobre ASP.NET, XML, Web Services, ADSI e outros
assuntos relacionados.
www.devasp.net/net Site simplesmente fantstico. Links para artigos,tutoriais, cdigo gratuito. Trata de
VB.NET, ASP.NET, C#, XML, SOAP, Download de Componentes. Um dos melhores sites
de .NET que eu conheo. Eu recomendo.
www.aspnetpro.com Revista sobre ASP.NET com links para grupos de discusso.
Site Descrio
www.csharp.net Excelente portal sobre C#. Links para artigos, tutoriais, cdigos gratuitos e outros sites
com informaes sobre C#. Excelente site. Eu recomendo.
783 www.juliobattisti.com.br
ASP.NET: UMA REVOLUO NA CONSTRUO DE SITES E APLICAES WEB
Site Descrio
www.csharptoday.com Site pago. A assinatura anual custa U$ 50,00. Contm uma grande quantidade de artigos
e tutoriais sobre C#.
www.mastercsharp.com Bom site. Com artigos, e links para C#, ADO.NET, VB.NET e demais tecnologias .NET.
www.csharpindex.com Excelente. Tutoriais, links para outros sites sobre C#. Exemplos divididos por categorias,
componentes, Web Services, XML, SOAP e .NET em geral. Eu recomendo.
www.devdex.com/csharp Excelente. Tutoriais, links para outros sites sobre C#. Exemplos divididos por categorias,
componentes, Web Services, XML, SOAP e .NET em geral. Eu recomendo.
www.csharphelp.com timo. Suporte a dvidas, cdigo, exemplos, tutoriais, Base de Conhecimentos sobre C#,
links para outros sites e novidades sobre .NET. Eu recomendo.
www.c-sharpcorner.com timo. Site gratuito para desenvolvedores .NET que utilizam C#. Contm artigos, cdigo-
fonte, tutoriais e grupos de discusso.
www.csharp-station.com Contm links e tutoriais. Bom site.
www.csharp.com
www.csharpfree.com
www.csharpgoodies.com
www.c-sharpcenter.com
www.easycsharp.com/
pages.zoom.co.uk/seesharp/
ManyQuestions.com
www.hitmill.com
Site Descrio
www.xml.org Excelente portal sobre XML. Links para artigos, tutoriais e outros sites sobre XML. Eu
recomendo.
www.vbxml.com Bom site. Links, artigos, tutoriais e muita informao para programadores VB e ASP/
ASP.NET, que trabalham com XML.
www.wdvl.com Excelente site sobre uma variedade de tecnologias para desenvolvimento Web. Excelentes
artigos e tutoriais sobre XML.
www.juliobattisti.com.br 784
ANEXO 4: SITES SOBRE ASP.NET, C# E XML
Site Descrio
www.hotwired.com/webmonkey/xml/ Links, artigos e timos tutoriais. Ideal para quem est iniciando no estudo do XML.
www.w3.org/XML Site com a especificao oficial para o XML. Eu recomendo.
www.xml.com Um portal com grande quantidade de informaes sobre XML. Excelente. Eu
recomendo.
www.xmlpitstop.com Outro excelente portal com grande quantidade de informaes sobre XML. Eu
recomendo.
msdn.microsoft.com/xml/default.asp Site da Microsoft sobre XML. Eu recomendo.
Concluso
Com o contedo apresentado neste livro, mais as referncias deste Anexo, o leitor tem condies de entender este
novo conceito que est agitando a indstria de desenvolvimento de Software: .NET.
Se voc tem sugestes sobre assuntos que gostaria de ver em futuras edies deste livro, ou publicados no site da
editora, por favor entre em contato pelo e-mail: webmaster@juliobattisti.com.br
O cdigo com os exemplos deste livro, est disponvel para download no seguinte endereo: www.axcel.com.br.
No site do autor voc encontrar artigos sobre ASP.NET, C#, Certificaes Microsoft, Matemtica para Concursos e
cursos gratuitos: www.juliobattisti.com.br
785 www.juliobattisti.com.br