Vous êtes sur la page 1sur 78

Curso Bsico ASP.NET 3.

5 (C#)

2012

PARTE I INTRODUO AO .NET.................................................................................3 CAPITULO 1 O .NET FRAMEWORK..............................................................................3 CAPITULO 2 A LINGUAGEM C#..................................................................................6 PARTE II DESENVOLVENDO APLICAES ASP.NET.........................................................19 CAPITULO 3 VISUAL STUDIO...................................................................................19 CAPITULO 4 FUNDAMENTOS WEB FORM......................................................................25 CAPITULO 5 WEB CONTROLS..................................................................................34 CAPITULO 6 STATE MANAGEMENT............................................................................38 CAPITULO 7 TRATAMENTO DE ERRO, LOG E TRACE.........................................................40 CAPITULO 8 VALIDAES......................................................................................45 CAPITULO 9 USER CONTROLS.................................................................................49 CAPITULO 10 ESTILOS E MASTER PAGES..................................................................... 50 CAPITULO 11 WEB SITE NAVIGATION........................................................................56 PARTE III TRABALHANDO COM DADOS.......................................................................58 CAPITULO 12 CAPITULO 13 CAPITULO 14 CAPITULO 15 CAPITULO 16 FUNDAMENTOS DO ADO.NET..................................................................58 DATA CONTROLS................................................................................68 FILES E STREAMS................................................................................71 XML..............................................................................................73 WEB SERVICES.................................................................................. 75

PARTE IV BOAS PRTICAS DE DESENVOLVIMENTO.........................................................77 CAPITULO 17 DESENVOLVIMENTO DE SISTEMAS EM CAMADAS............................................. 77

PARTE I INTRODUO AO .NET


CAPITULO 1 O .NET FRAMEWORK A Plataforma Microsoft.NET oferece uma alternativa de ambiente para produzir e executar aplicaes web, rodando-as em PCs, micros de mo e outros dispositivos, como telefones celulares. O plano da Microsoft tornar a infra-estrutura dessa plataforma amplamente disponvel. Tanto que ela j pode ser baixada em seu site e dever fazer parte das prximas verses do Windows. A Plataforma .NET tambm a principal arma com a qual a Microsoft tenta marcar posio no concorridssimo mercado dos Servios Web (Web Services) - nome dado a programas ou componentes que devem ser utilizados na Internet. Estes servios on-line so a pedra de toque da Internet, tal como os estrategistas das grandes empresas a imaginam num futuro prximo. Por meio de servios web, empresas trocaro informaes e faro negcios. Aplicaes que rodam num local podero usar mdulos localizados num servidor remoto, consolidando um modelo de computao distribuda. Residentes em servidores web, esses servios podem fornecer produtos finais - por exemplo, documentos e informaes - ou desempenhar tarefas especficas, como realizar clculos e autenticar transaes. Espera-se, assim, que os sites operem de forma integrada, gerando benefcios para empresas e indivduos. Na essncia, essa viso dos servios web hoje compartilhada por grandes nomes como IBM, Sun e Oracle, e todos tm iniciativas nessa rea. Uma caracterstica central da Plataforma .NET aderir aos padres da Internet sem abrir mo de procedimentos j consagrados no Windows. Para isso conta com o Visual Studio.NET, sute de programao definida pela Microsoft como "especialmente voltada para a rpida construo e integrao de Web Services". O produto incorpora as linguagens Visual Basic, Visual C++ e Visual C# ("CSharp), todas com sobrenome .NET.

NOTA: Em nosso curso usaremos a verso 3.5 do .NET FRAMEWORK e verso 3.5 da linguagem C# em nossos exemplos.

TERMOS DA PLATAFORMA CLR - Sigla de Common Language Runtime. Base comum a todas as linguagens .NET, o CLR o ambiente que gerencia a execuo de cdigo escrito em qualquer linguagem. Faz parte do Framework. FRAMEWORK - o modelo da plataforma .NET para construir, instalar e rodar qualquer aplicao, no desktop ou na Internet. Para executar um programa .NET, preciso ter o Framework instalado. IDE COMPARTILHADO - Ambiente integrado de programao (Integrated Development Environment) do Visual Studio.NET. Diferentes linguagens usam o mesmo editor de cdigo e depurador e compilam executveis na linguagem MSIL. Alm das linguagens da Microsoft, j h mais de 20 outras (Perl, Cobol, Pascal, etc) que podem usar esse ambiente. MSIL - Microsoft Intermediate Language. Quando se compila uma aplicao .NET, ela convertida para uma linguagem intermediria, a MSIL, um conjunto de instrues independentes de CPU. Na hora de executar o programa, um novo compilador, chamado Just-in-time (JIT) Compiler, o converte para o cdigo nativo, ou seja, especfico para o processador da mquina. MANAGED CODE - Cdigo administrado, ou seja, cdigo escrito para rodar com o runtime do VS.NET. No VS.NET, somente o C++ produz programas que no dependem do runtime, o chamado Unmanaged code. SOAP - Sigla de Simple Objetc Access Protocol, ou protocolo simples de acesso a objetos. O SOAP um padro aberto, baseado em XML, criado pela Microsoft, Ariba e IBM para padronizar a transferncia de dados entre aplicaes. Pode ser usado em combinao com vrios outros protocolos comuns da Internet, como HTTP e SMTP. UDDI - Iniciais de Universal Description, Discovery and Integration, uma espcie de pginas amarelas para web services. Na UDDI, empresas expem seus servios para que outras possam utiliz-los. WEB SERVICES - programa completo ou componente de software residente num servidor web. XML - Sigla de Extensible Markup Language, o XML uma linguagem baseada em tags semelhante ao HTML. Sua principal caracterstica a extensibilidade. Quem emite um documento XML pode criar tags personalizadas, que so explicadas num documento anexo, que tem extenso XSD. 4

XSD - Sigla de XML Schema Definition. Arquivo associado a um documento XML que descreve e valida aos dados no documento. Assim como as linguagens de programao, os XSDs aceitam dados de diferentes tipos, como nmeros, data e moeda. XML WEB SERVICES - Blocos fundamentais para a criao de sistemas de computao distribuda na Internet. Um servio web uma poro de cdigo localizada num servidor web e que pode ser utilizada por uma aplicao qualquer. O web service pode produzir documentos ou procedimentos. Uma das caractersticas centrais dos web services serem baseados em padres abertos. WSDL - Web Service Description Language. Submetida W3C - o rgo padronizador da Internet - . A linguagem WSDL define regras baseadas em XML para descrever servios web. Como o .NET FRAMEWORK Funciona:

CAPITULO 2 A LINGUAGEM C# Variveis na linguagem C# Na linguagem C# as variveis esto agrupadas em algumas categorias como: Static: Existe apenas uma nica cpia desta varivel para todas as instancias de uma classe. Uma varivel static comea a existir quando um programa comea a executar, e deixa de existir quando o programa terminar. Instance: existe uma cpia para cada instancia de uma classe. Uma varivel Instance comea a existir quando uma instancia daquele tipo criado, e deixa de existir quando no houver nenhuma referncia quela instancia ou quando e mtodo Finalize executado. Array: uma matriz que criada em tempo de execuo. Tipos Podemos armazenar muitos tipos de informaes diferentes dentro de uma varivel, como nmeros, datas, e strings. Nesta linguagem, seus tipos podem ter dois tipos: Por Valor: os valores so gerenciados diretamente na memria. Por Referencia: os valores so passados por meio de um ponteiro. Inteiros (por valor) Este tipo um numero inteiro sem frao ou parte decimal. Por exemplo, o nmero 1058 um numero inteiro. O tipo inteiro subdividido em alguns subtipos. Veja a tabela que mostra estes tipos de inteiro. Tamanho byte Sbyte int uint long ulong short ushort Descrio Inteiro de 1 bit sem sinal (0 a 255) Inteiro com sinal de 8 bits (-127 a 128) Inteiro de 32 bits com sinal (-2.147.483.648 a 2.147.483.147) Inteiro de 32 bits sem sinal (0 a 4.294.967.295) Inteiro com sinal de 64 bits (-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807) Inteiro sem sinal de 64 bits (0 a 18.446.744.073.709.551.615) Inteiro com sinal de 16 bits (-32.768 a 32.767) Inteiro sem sinal de 16 bits (0 a 65.535)

Exemplos: byte VarIdade = 25; int VarValor = 1.542; long VarValor = 5.684.548.520; short VarInd = 25.620; Lgicos (por valor) Esses tipos so usados para comparao. Portanto esses tipos s podem assumir os valores verdadeiro ou falso. Tipo bool Exemplos: bool VarDesativado = false; bool VarCondicao = true; Caracteres (por valor) Este tipo armazenado em 16 bits, representa um caractere de uma string. Essas variveis so armazenadas no padro Unicode. Tipo char Descrio Um nico caractere Unicode de 16 bits. Descrio true ou false

Exemplos de forma de representao: char VarChar = a;


Representa um caractere literal.

char VarChar = \x0025;


Representa um caractere hexadecimal.

char VarChar = \u0025;


Representa um caractere Unicode.

char VarChar = (char)25;


Retorna o caractere correspondente na Tabela ASCII.

Ponto Flutuante (por valor) As variveis com este tipo possuem nmeros com ponto flutuante utilizando o padro IEEE de 4 a 8 bytes. Tipo double Descrio Ponto flutuante binrio de 8 bytes Este tipo tem uma preciso de 15 casas decimais. float Ponto flutuante binrio de 4 bytes Este tipo tem uma preciso de 7 casas decimais. As operaes com este tipo no geram erros, mas h alguns ressaltos que devemos saber: Se o valor retornado para a varivel conter um nmero muito pequeno, este valor torna-se zero. Uma diviso por zero no causa um erro, mas produzido um valor infinito. Operaes de ponto flutuante devolvem NaN (Not a Number) para sinalizar que aquele resultado da operao indefinido. Portanto se um dos operadores for NaN o resultado retornado ser NaN. Exemplos: float VarIndice = 3.1356F; double VarCorrecao = 5.12D; Decimal (por valor) O tipo decimal representa com mais preciso nmeros no inteiros e com um valor muito alto. Tipo decimal Descrio Ponto flutuante decimal de 128 bytes Este tipo tem uma preciso de 28 casas decimais. Exemplos: decimal VarIndice = 560.5m; decimal VarCorrecao = 545.2m;

String (por referncia) Este tipo pode conter at 1 gigabyte de caractere e alocado dinamicamente, por isso dizemos que este tipo por referncia. Tipo string Exemplos: string VarNome = Luiz Maia; string VarEmail = luiz@cvsistemas.com.br; string VarConcatenar = VarNome + VarEMail; As strings so compostas por caracteres e podem conter literais caracteres. Veja a representao dos literais strings: Tipo \ \ \\ \0 \a \b \f \n \r \t \v \uNNNN Descrio Apstrofo Aspas Barra invertida Zero binrio ou nulo Alerta Retrocesso Avano de pgina Salto de linha Retorno de carro Tabulao horizontal Tabulao vertical NNNN o cdigo em hexadecimal Descrio Unicode com at 1 gigabyte de caractere.

Uma representao importante da string a arroba ( @ ), utilizada para especificar nomes de arquivos e pastas. Exemplos: string VarLinha = Pula Linha \n; string VarCaminho = @c:\temp\oledb.txt;
Neste caso com o uso da arroba ( @ ) a representao dos caracteres de barra invertida ( \ ) no feita dentro da string.

Enum (por valor) O tipo enum usado para declarar uma enumerao, um tipo distinto que consiste em um jogo de constantes nomeadas chamadas a lista de enumerados. Exemplos:
enum DiasDaSemana { Domingo = 1, Segunda = 2, Terca = 3, Quarta = 4, Quinta = 5, Sexta = 6 }

Arrays Um tipo array uma matriz de valores do mesmo tipo, que criada em tempo de execuo, podendo ser acessada por meio de um ndice. A declarao do array sempre faz o uso de um colchete( [ ] ) depois do tipo da varivel. O uso da instruo new sempre deve ser utilizado, pois obrigatrio. O tipo array pode ter diversas dimenses, o tamanho desta definido pelo desenvolvedor, mas devemos saber que o primeiro ndice sempre zero. No tipo array devemos sempre inicializar seus elementos, pois obrigatrio tambm. Veja abaixo a forma de sintaxe para a declarao de arrays: TIPO[ ] nomeDoArray = new TIPO[tamanho do array]; Float[ ] nomeDoArray = new Float[5]; String[ ] nomeDoArray = new String[5];

10

Estruturas de deciso As estruturas de deciso ou tambm chamada de lgica condicional, permite especificar qual cdigo deve ser executado dependendo das condies satisfeitas. Este recurso torna-se necessrio para qualquer lgica implementada. Instruo if a forma mais simples de se aplicar lgica condicional.A instruo if simples. Se a condio for satisfeita ento o cdigo executado. Vamos ver a forma de sintaxe para esta instruo ( if ).
If ( condio ) { //Instrues; } A instruo else opcional e indica a instruo que o aplicativo deve executar se a condio imposta pelo if no for satisfatria. Temos tambm a instruo else if que permite testar outras condies. If ( condio ) { //Instrues; } else if ( condio ) { //Instrues; } else { //Instrues; }

Instruo switch A instruo switch utilizada em situaes em que houver a necessidade de diversos testes condicionais. So basicamente uma combinao de instruo if com oraes de else if. Estas instrues examinam uma condio e especifica qual bloco de cdigo deve ser executado. Vamos examinar a sintaxe da instruo switch.
switch ( condio ) { case condio 1 : //Instrues; break; case condio 2 : //Instrues; break; case condio N : //Instrues; break; default: //instrues default; }

11

Estruturas de Repetio
As estruturas de repetio so utilizadas em situaes onde preciso executar um conjunto de instrues determinadas vezes, at que a condio imposta para o fim da repetio for satisfeita.

Instruo For Esta estrutura de repetio utilizada quando o desenvolvedor sabe quantas vezes o cdigo deve ser executado. Por isso devemos definir as faixas inicial e final. Esse loop incrementa um contador para dizer quando encerrar a execuo desta repetio. Vamos acompanhar abaixo a sintaxe desta instruo ( for ). for ( varivel; condio; incremento ) { Instrues; } Uma variao desta instruo o foreach...in. A diferena desta instruo que o desenvolvedor no precisa especificar as faixas inicial e final. utilizado para percorrer uma coleo ou um array por exemplo. Vamos acompanhar a sintaxe da instruo.
foreach ( tipo varivel in coleo/array ) { //instrues; }

Instruo While Esta instruo executa um loop enquanto uma determinada condio de execuo for satisfatria. While significa enquanto, portanto enquanto a condio for verdade sero executas as instrues. Acompanhe a sintaxe abaixo:
while ( condio ) { //Instrucoes; }

12

Instruo Do While O loop do while tem a mesma funo da instruo While, a nica diferena que a condio testada no final da instruo. Com isso podemos assegurar em alguns casos na linguagem C# que o loop seja realizado pelo menos uma nica vez. Acompanhe a sintaxe abaixo:
do { //Instrucoes; } while ( condio );

Formatao A formatao muito utilizada pelos desenvolvedores em suas aplicaes. Este processo busca uma forma de apresentao mais inteligvel e funcional, em funo das configuraes de cada pas, principalmente na formatao de valores monetrios e datas. Para isso a plataforma .Net traz muitas funes para a linguagens C#. Formatao de Nmeros essencial a formatao de nmeros nas aplicaes desenvolvidas. A linguagem C# trabalha bem com estas formataes. Para isso destacaremos a funo ToString: ToString( ): retorna a formatao padro dos tipos numricos. Este mtodo disponvel para os tipos numricos. Aceita uma string de formatao para os tipos como valores monetrios, decimal, ponto fixo, dentre outros, e uma referncia para uma cultura. Acompanhe abaixo a sintaxe do mtodo:
VariavelNumerica.ToString(StringFormatao, ReferenciaCultural);

Exemplo:
VarValor.ToString(c, new CultureInfo(pt-BR)); // Exemplo do resultado da formatao acima: R$ 15.680,12

13

A tabela abaixo mostra-nos os caracteres de formatao que so utilizados na funo ToString( ): Caractere C ou c D ou d E ou e F ou f G ou g N ou n P ou p R ou r X ou x Descrio Representam valores monetrios Formatao Decimal. Apenas para nmeros Inteiros. Formato de Notao Cientifica Representam o formato de Ponto Fixo Formato Geral dos nmeros Representao Numrica Formato de porcentagem Assegura que um nmero convertido para string, ter o mesmo formato se convertido de volta para nmero. Formatao para Hexadecimal

Formatao de Datas e Horas Para um aplicativo que utilizado em vrios paises, devemos ter o cuidado para o tratamento de datas e horas. necessria a formatao para as aplicaes que necessitam das informaes de datas e horas para executar determinadas funes. A linguagem C# sabendo da importncia do tratamento de datas e horas, dispe de duas classes para isso: DateTime e TimeSpan. Vejamos abaixo a sintaxe do mtodo ToString( ) para a formatao de datas:
VariavelDateTime.ToString(StringFormatao, ReferenciaCultural);

Exemplo:
VariavelDateTime.ToString(dd/MM/yyyy); // Exemplo do resultado da formatao acima: 01/01/2008

14

Como visto acima, o mtodo ToString( ) possui como parmetros: uma string de formatao e uma expresso para a referencia Cultural. Acompanhe na tabela abaixo os caracteres de formatao correspondente para a manipulao de datas e horas. Caractere
d dd ddd dddd M MM MMM MMMM y yy yyyy h hh H HH m mm s ss : /

Descrio
Exibe o dia do ms sem o zero Exibe o dia do ms com o zero Exibe o nome abreviado do dia Exibe o nome completo do dia Exibe o ms sem o zero Exibe o ms com o zero Exibe o nome abreviado do ms Exibe o nome completo do ms Exibe os dois ltimos dgitos do ano sem o zero Exibe os dois ltimos dgitos do ano com o zero Exibe os quatro dgitos do ano Exibe as horas sem o zero para horas de 1 a 9. Apresenta formato de 12 horas. Exibe as horas com o zero para horas de 1 a 9. Apresenta formato de 12 horas. Exibe as horas sem o zero para horas de 1 a 9. Apresenta formato de 24 horas. Exibe as horas com o zero para horas de 1 a 9. Apresenta formato de 24 horas. Exibe os minutos sem o zero para minutos de 1 a 9. Exibe os minutos com o zero para minutos de 1 a 9. Exibe os segundos sem o zero para seg. de 1 a 9. Exibe os segundos com o zero para seg. de 1 a 9. Separador de tempo Separador de data

Exemplo
1, 2, 6, 12, 31 01, 02, 06, 12, 31 Seg, Ter, Qua Segunda-feira 1, 2, 6, 12 01, 02, 06, 12 Jan, Mar, Dez Janeiro, Dezembro 1, 2, 6, 99 01, 02, 06, 99 2008, 2006, 1999 1, 2, 6, 12 01, 02, 06, 12 1, 2, 9, 13, 15 01, 02, 09, 13, 15 1, 2, 6, 12, 58 01, 02, 06, 12, 58 1, 2, 3, 16, 59 01, 02, 03, 16, 59 13: 49: 52 13/ 01/ 2002

15

Converso de Valores Converter um tipo de dado em nmero ou em literal comum em situaes de programao. Quando esta aplicao for destinada a Web com intervenes de internautas, esse recurso utilizado com mais freqncia ainda. comum o internauta testar a aplicao para ter certeza que o desenvolvedor se preocupou com as devidas converses de valores. Devemos considerar alguns aspectos para a converso de nmeros: Como existem diversos tipos de nmeros, inteiros, ponto flutuante ou decimal, os valores so convertidos sempre para o tipo de maior faixa de valores. Por exemplo, o tipo long convertido para o ponto flutuante, mais importante ressaltar que o contrario causa um erro. Os tipos de menor faixa so convertidos para os de maior faixa. Por exemplo, o tipo int pode ser convertido para: long, float, double ou decimal. A converso dos tipos de ponto flutuante(float, double) para decimal causa erro. A converso entre os tipos com sinal e sem sinal de valores inteiros com o mesmo tamanho causa erro. Por exemplo, entre o tipo int e unit. Caso precise forar uma converso mesmo que haja perda de informaes, a linguagem disponibiliza um operador com este recurso. Exemplos:
int VarValor = (int)8544555L; Neste caso a varivel inteira vai receber o quanto poder suportar do tipo long. Neste caso a varivel inteira do tipo long suportar o quanto for possvel do nmero no inteiro.

long VarValor = (long)29.145;

Em alguns casos os tipos de converso no precisam ser especificados pelo desenvolvedor, essa converso feita automaticamente. Exemplos:
int VarInteiro = 32450; long VarLong = VarInteiro; float VarFloat = VarLong; double VarDouble = VarFloat; decimal VarDecimal = VarLong;

16

Operadores Operadores so smbolos utilizados para efetuar alguma ao. Veja a tabela de operadores que o C# suporta. Tipo aritmticos lgicos concatenao Incremento e decremento relacional Igualdade atribuio condicional Mtodos Mtodos so implementados para executar alguma ao e podem ser declarados em um objeto ou classe. Static Methods (Mtodos Estticos) so mtodos que podem ser acessados atravs de suas classes e ou objetos sem a necessidade de instanciar os mesmos, j Instance Methods (Instncia de mtodos) somente podem ser acessados atravs da instncia de sua classe e ou objeto. Os mtodos possuem uma lista de parmetros (pode ou no conter parmetros) que representam valores ou variveis referenciadas, podendo tambm retornar algum tipo de dado. A assinatura de um mtodo deve ser nica na classe em que foi declarada. A assinatura de um mtodo consiste no nome do mtodo, e sua lista de parmetros, os tipos dos parmetros informados, e tipo de dado caso a mesma retorne algum dado. Value Parameter: usado como parmetro de entrada apenas (Input). A modificao do valor deste parmetro dentro do mtodo no refletida fora do escopo do mtodo. Reference Parameter: usado como parmetro de entrada/sada (Input/Output). A modificao do valor deste parmetro refletida fora do escopo do mtodo. Operador + ! + ++ < == = ? > != *= /= += : [if inline ou ternrio] <= >= && * / ||

17

Exemplo: (Static Method)


static void RegistrarAcesso(Int32 codigoPedido) { // Cdigo do mtodo. }

Exemplo: (Instance Method)


void RegistrarAcesso (Int32 codigoPedido) { // Cdigo do mtodo. }

Exemplo: (Reference Parameter)


void RegistrarAcesso (ref Int32 codigoPedido) { // Cdigo do mtodo. }

Exemplo: (Retornando valores)


decimal CalcularPedido(ref Int32 codigoPedido) { // Cdigo do mtodo. }

18

PARTE II DESENVOLVENDO APLICAES ASP.NET


CAPITULO 3 VISUAL STUDIO Quando o Visual Studio .Net aberto pela primeira vez, exibia a pgina inicial (Start Page, veja imagem abaixo). A pgina inicial exibe uma lista de projetos utilizados recentemente.Voc poder clicar no link de algum projeto para voltar a trabalhar com o mesmo. A pgina inicial exibe tambm uma lista de links de contedos online do site da Microsoft MSDN.

19

Criando Aplicao Web Para criar sua primeira aplicao no Visual Studio, siga os seguintes passos: 1. Selecione File New Web Site do menu do Visual Studio. A caixa de dilogo New Web Site ser aberta, veja a imagem abaixo:

20

2. Escolha o tipo da aplicao. Selecione o template ASP.NET Web Site. Outros templates iro auxili-lo na criao de web sites mais especficos, adicionando arquivos adicionais ou configuraes especficas. 3. Selecione a verso do .NET FRAMEWORK que voc desejo utilizar. Normalmente voc ir utilizar o .NET FRAMEWORK 3.5, porm voc poder utilizar o Visual Studio para criao de aplicaes web utilizando verses antigas do .NET FRAMEWORK.

21

4. Escolha uma localizao para o Website. A localizao especfica onde os arquivos do Webiste ficaro armazenados. Normalmente escolhemos File System e ento usamos as pastas do computador local. Voc poder informar o diretrio manualmente na caixa de texto da localizao ou poder clicar no boto Browse onde a caixa de dilogo Choose Location ser exibida (veja imagem abaixo):

5. Clique no boto OK para criar o website. Neste ponto o Visual Studio ir criar o novo website com apenas trs arquivos. Um arquivo chamado Default.aspx que a pgina inicial do website, outro arquivo chamado Default.aspx.cs que o cdigo fonte da pgina. O terceiro arquivo o arquivo de configurao do website chamado web.config (Iremos explorar este arquivo mais tarde). Neste momento voc esta pronto para comear a criao do seu website. Veja agora como adicionar novos itens ao website e tambm como alterar o design de suas pginas web.

22

Solution Explorer A Solution Explorer reflete tudo que est no diretrio da sua aplicao, nenhum arquivo ficar escondido, pois se voc atravs do Windows Explorer adicionar arquivos HTML, imagens, e diretrios, e na prxima vez que voc atualizar a Solution Explorer voc ver os novos contedos adicionados.

Adicionando WebForms Como voc est criando um website, voc precisar adicionar novas pginas web entre outros itens. Para adicionar estes itens, Na Solution Explorer, clique com o boto direito do mouse sobre o website criado e escolha a opo Add New Item, a caixa de dilogo Add New Item ser aberta, veja tela abaixo:

23

Voc poder adicionar vrios outros tipos de arquivos, como arquivos de configurao, Style Sheets, Imagens, Arquivos HTML, Arquivos de cdigo e muito mais. Para adicionar um web form, escolha Web Form na caixa de dilogo, voc ver duas novas opes Place code in separate file, deixando esta opo desmarcada o visual studio ir criar apenas um arquivo, e voc dever colocar o cdigo fonte da pgina na mesma pgina que voc ir colocar o HTML da mesma, marcando tal opo um arquivo distinto ser criado para conter o cdigo fonte da pgina separando o cdigo HTML do cdigo fonte (recomendvel). A outra opo Select Master Pager onde voc poder criar sua pgina selecionando uma pgina padro, iremos explorar esta opo mais tarde. Clique em Add para adicionar o Web Form, dois arquivos sero adicionados na Solution Explorer, um arquivo com extenso .aspx (que o cdigo HTML) e outra arquivo .aspx.cs (que cdigo fonte da pgina).

24

CAPITULO 4 FUNDAMENTOS WEB FORM Tipos de Arquivos ASP.NET (ASP.NET Files Type) As aplicaes Asp.Net podem inlcuir vrios tipos de arquivos. A tabela abaixo descreve os principais tipos de arquivos: Nome do Arquivo Final com .aspx Descrio Estes arquivos so arquivos de pginas ASP.NET, estes arquivos contem a interface do usurio e opcionalmente o cdigo fonte da mesma. Estes arquivos so os ASP.NET User controls, so similares a uma Final com .ascx pgina web, porm eles no podem ser acessados diretamente, devem estar dentro de uma pgina web (.aspx). User controls permite voc criar pequenas pedaos interfaces inseridos em diversos web forms. Este um arquivo baseado em XML com as configuraes da sua Web.config aplicao ASP.NET. Neste arquivo esto inclusos configuraes de segurana, gerenciamente de estado (state management) e muito mais. Este um arquivo global da aplicao. Voc pode usar este arquivo Global.asax para definir variveis globais (variveis que podem ser acessadas por qualquer pgina da aplicao) e tambm usar eventos como quando a aplicao inicializada. Estes so os arquivos com o cdigo fonte (Code-Behind) que contm os Final com .cs cdigos C#. Eles permitem que voc separe a interface do usurio da lgica da pgina. Adicionalmente, sua aplicao web poder conter outros recursos que no so arquivos especiais do ASP.NET, por exemplo seu diretrio virtual poder conter imagens, arquivos HTML, ou arquivos CSS. Estes recursos podero ser utilizados pelas suas pginas ASP.NET ou usados independente. Um Website normalmente combina pginas estticas (HTML) com pginas dinmicas (pginas ASP.NET). ASP.NET Application Directories (Diretrios ASP.NET) Toda aplicao web deveria ter uma estrutura de diretrio bem planejada. Por exemplo, voc provavelmente ir querer separar a pasta de armazenamento de imagens diferente de suas pginas web. Voc poder colocar suas pginas ASP.NET em um pasta pblica e restringir o acesso a outras pastas. Alm das pastas que voc criou, o ASP.NET usa alguns subdiretrios especiais, algumas delas esto listadas abaixo: 25

Diretrio Bin

Descrio Contm todos os componentes .NET compilados (DLLs) que o ASP.NET esta utilizando. Por exemplo, se voc criar um componente especfico, voc dever coloca-lo nesta pasta. Contm arquivos de cdigo fonte que so dinamicamente compilados para serem usados pela aplicao. Armazena as referncias aos web services utilizados pela aplicao. Armazenamento de dados, incluindo arquivos de banco de dados como SQL Server 2005 Express Edition, arquivos XML. Claro que voc poder armazenar tais arquivos em qualquer outro diretrio. Armazena os esquemas (Themes) que sero utilizados pela sua aplicao web.

App_Code App_WebReferences App_Data

App_Themes

Introduo a Server Controls O ASP.NET inova trazendo um novo modelo de criao de pginas web. O desenvolvimento de pginas web de antigamente, programadores tinha que saber o mximo de HTML antes da criao de suas pginas web dinmicas. ASP.NET resolveu este problema com o modelo autonvel de controles do lado servidor (server controls). Estes controles so criados e configurados como objetos. Eles rodam do lado servidor (web server) e seus HTML so automaticamente gerados. HTML Server Controls: Estes controles so baseados no servidor (server-based), porm so equivalente aos elementos HTML padro. Web Controls: So controles similares ao HTML Server Controls, porm possuem rico modelo de objeto contendo uma variedade de propriedades para estilo, detalhes de formatao. Alm de prover vrios eventos do lado servidor. HTML Server Controls HTML server controls so objetos de interface para os elementos padres do HTML. Eles possuem trs caractersticas: Gerao de sua prpria interface: Voc poder setar as propriedades atravs do cdigo e o HTML final ser gerado automaticamente quando sua pgina for renderizada e enviada para o cliente. Manter o estado dos objetos: Por causa da perda de estado na web, pginas web precisam fazer muito trabalho para manter o estado das informaes entre uma requisio e outra. Os controles HTML Server Controls fazem esta tarefa automaticamente para voc. 26

Execuo de eventos do lado servidor: Por exemplo, botes executam um evento quando clicados, caixas de textos executam um evento quando seu contedo modificado, entre outros. Seu cdigo poder responder a estes eventos. Exerccios 1. Criar uma pgina web esttica que faa a converso de real para dlar americano, em seguida converte-l para uma pgina ASP.NET, implementando a funcionalidade de converso. <html> <head> <title>Conversor de Valores</title> </head> <body> <form method="post"> <div> Converter:&nbsp; <input type="text" /> &nbsp;Reais para U.S. dollars. <br /><br /> <input type="submit" value="OK" /> </div> </form> </body> </html> A pgina web acima apenas uma pgina HTML esttica sem nenhuma funcionalidade. Uma pgina web HTML por si s no um web form. A forma mais fcil para converter a pgina web Conversor de Valores para pginas ASP.NET, voc dever criar um novo formulrio no visual studio. Para isto selecione o Website em seguida adicione um novo item. Na caixa de dilogo que ser aberta, selecione a opo Web Form, digite um novo para o nova pgina (como ConversorDeValores.aspx), e clique em Add para criar a nova pgina. Como novo web form aberto, exclua todo o contedo do arquivo .aspx exceto a diretiva da pgina (page directive). A diretiva das pginas ASP.NET trazem informaes bsicas sobre como o compilador ir compilar a pgina. Nesta diretiva voc indicar qual linguagem de programao ser usada. Se voc estiver usando um arquivo diferente para armazenar o cdigo fonte da pgina (Code-Behind), voc dever indicar o local de armazenamento do cdigo de fonte e tambm o nome da classe da pgina (Page class name). Finalmente, copie o contedo HTML da pgina esttica e no web form abaixo da diretiva do arquivo. Segue abaixo verso nova do arquivo com a diretiva arquivo em negrito. <%@ Page Language="C#" CodeFile="ConversorDeValores.aspx.cs" Inherits="ConversorDeValores" %> <html> 27

<head> <title>Conversor de Valores</title> </head> <body> <form method="post"> <div> Converter:&nbsp; <input type="text" /> &nbsp;Reais para U.S. dollars. <br /><br /> <input type="submit" value="Converter" /> </div> </form> </body> </html> Agora iremos colocar o atributo runat=server em todas as tags que iremos transformar em um controle HTML Server Control, desta forma precisaremos informar tambm informar um ID nico para os objetos que desejarmos acessar atravs do cdigo. Em nossa pgina precisaremos incluir os atributos informados acima apenas no input textbox e tambm no boto submit. Adicionalmente a tag <form> ser processada do lado do servidor para habilitar que o ASP.NET possa acessar os objetos contidos na pgina. Segue abaixo cdigo completo:

28

<%@ Page Language="C#" CodeFile="ConversorDeValores.aspx.cs" Inherits="ConversorDeValores" %> <html> <head> <title>Conversor de Valores</title> </head> <body> <form method="post" runat=server> <div> Converter:&nbsp; <input type="text" ID=textBoxValor runat=server /> &nbsp;Reais para U.S. dollars. <br /><br /> <input type="submit" value="Converter" runat=Server ID=buttonConverter /> </div> </form> </body> </html> Aps incluso dos atributos Runat e ID nos elementos HTML, conseguiremos acessar tais controles atravs do cdigo fonte da pgina, basta digitarmos o identificador informado no elemento HTML (Veja imagem abaixo).

29

Eventos Quando o usurio clica no boto Converter e a pgina enviada novamente para o servidor web, o ASP.NET precisa saber exatamente qual cdigo voc deseja executar. Para criar a relao entre eventos e mtodos, voc precisa adicionar um atributo na Tag do controle. Por exemplo, se voc deseja executar algum cdigo quando o usurio clicar no boto, voc deve informar a propriedade OnServerClick com o nome do evento a ser executado:
<input type="submit" value="Converter" ID="buttonConverter" OnServerClick="Converter_ServerClick" runat="server">

O ASP.NET permite que voc atravs do cdigo fonte da pgina, associe eventos aos controles da mesma, veja o exemplo abaixo:
buttonConverter.ServerClick += new EventHandler(buttonConverter_ServerClick);

Os HTML server controls permite apenas dois tipos de eventos, ServerClick e ServerChange. Veja abaixo a sintaxe de um mtodo associado a um evento:
protected void buttonConverter_ServerClick(Object sender, EventArgs e)

Onde o argumento (Object) o objeto que gerou o evento e o argumento (e) inclu informaes adicionais sobre o evento. ViewState Aps rodarmos uma aplico ASP.NET, a primeira coisa que voc ir identificar que existem apenas pequenas alteraes no HTML esttico original. A primeira diferena a existncia do atributo runat=server, a segunda diferena e muito importante, que o ASP.NET gera automaticamente um objeto do tipo HiddenField. Segue abaixo cdigo:
<%@ Page Language="C#" CodeFile="ConversorDeValores.aspx.cs" Inherits="ConversorDeValores" %> <html> <head> <title>Conversor de Valores</title> </head> <body> <form method="post" runat=server> <div> <input type="hidden" ID="__VIEWSTATE" name="__VIEWSTATE" <div> <div> Converter:&nbsp; <input type="text" ID=textBoxConverter runat=server /> &nbsp;Reais para U.S. dollars. <br /><br /> <input type="submit" value="OK" runat=Server ID=buttonOk /> </div> </form> </body> </html>

value="dDw3NDg2NTI5MDg7Oz4=" />

30

O controle Hidden Field armazena todas informaes dos controles contidos na pgina, estas informaes esto armazenadas em um formato de compresso (compressed format). Desta forma voc poder manipular as propriedades dos controles no cdigo fonte da pgina e persistir as informaes entre vrios posts em sua pgina. Classe Page Toda pgina web (web form) uma pagina customizada que tem como base a classe System.Web.UI.Page. A herana desta pgina faz com que seu web form adquire inmeras propriedades e mtodos. Veja tabela abaixo as propriedades fundamentas de uma pgina. Propriedade IsPostBack EnableViewState Application Session Request Response Server Descrio Propriedade (Boolean) indicativa de carregamento inicial da tela ou se a mesma esta sendo enviada novamente ao servidor (post). Indica se o formulrio ir manter ou no as informaes dos controles da pgina, esta propriedade sobrescreve as propriedades dos controles. Coleo de informaes compartilhadas entre todos os usurios do site. Coleo de informaes de um nico usurio e poder ser utilizado por diversas pginas. Referncia para o objeto HttpRequest que contm todas as informaes da requsio atual da pgina. Referncia ao objeto HttpResponse que representa a resposta ASP.NET que ser enviada ao browser do usurio. Referncia ao objeto HttpServerUtility, este objeto permite que voc faa algumas tarefas como mapear o caminho do servidor entre outros.

Voc poder usar estas propriedades em todo seu cdigo, veja abaixo um exemplo onde iremos redirecionar o usurio para uma nova pgina. Response.Redirect("novapagina.aspx");

31

Application Events (Eventos de aplicao) Application Events no so to importantes quanto os eventos que encontramos em nossos Server Controls, porm a casos em que necesitamos executar alguma tarefa adicional. Exemplo: Usando Application Events voc poder gravar fcilmente um log sempre que uma requisio for recebida. Para capturarmos Application Events precisaremos usar o arquivo Global.asax Arquivo Glogal.asax O arquivo global.asax permite que voc escreva cdigos de resposta a eventos globais da aplicao. Este eventos so chamados em vrios pontos durante o ciclo de vida de uma aplicao web. O arquivo globo.asax parecido com o arquivo .aspx com exceo de que ele no contm nenhum HTML or ASP.NET tags, por outro lado contm declaraes de eventos. O seguinte arquivo global.asax ir reagir ao evento: Application.EndRequest, que acontecer antes de da pgina ser enviada para o usurio.
<%@ Application Language="C#" %> <script language="c#" runat="server"> protected void Application_OnEndRequest() { Response.Write("<hr />Esta pgina foi processada s " + DateTime.Now.ToString()); } </script>

Veja abaixo lista de eventos adicionais do arquivo Global.asax Application_Start; Application_End; Application_BeginRequest; Application_EndRequest; Session_Start; Session_End; Application_Erro;

32

ASP.NET Configuration Toda aplicao web possu um arquivo web.config para setar configuraes fundamentais de seu funcionamento. Configuraes como Custom Erros (erros customizados), configuraes de segurana, entre outros. O web.config possu algumas vantagens, veja abaixo: No h necessidade de parar a aplicao para alterar alguma configurao. Fcil acesso ao arquivo e replicao, uma vez que voc possu permisso de acesso ao servidor, voc poder remotamente alterar as configuraes ou at mesmo copiar o web.config de uma aplicao para outra. Configuraes de fcil entendimento humano, no h a necessidade de uma ferramenta especial para edio ou entendimento de seu contedo. O arquivo Web.Config O arquivo Web.Config usa o formato XML. Todo contedo deste arquivo esta dentro do elemento raiz (root) <configuration>. Dentro deste elemento existe vrios outras sub-sees. Veja abaixo a estrutura bsica de um arquivo web.Config com as trs sees mais importantes:
<?xml version="1.0" ?> <configuration> <appSettings>...</appSettings> <connectionStrings>...</connectionStrings> <system.web>...</system.web> </configuration>

Configuraes Customizadas O ASP.NET permite que voc adicione no web.config configuraes customizadas no elemento <appSettings>, veja abaixo a estrutura bsica para adicionar configuraes customizadas:
<?xml version="1.0" ?> <configuration> <appSettings> <add key=DiretorioImagens value=C:\Luiz\Imagens </appSettings> </configuration>

Para ler a configurao acima em seu cdigo veja o cdigo abaixo:


WebConfigurationManager.AppSettings["DiretorioImagens"]

NOTA: Existe uma ferramenta grfica para edio do web.config, para acessa-l basta selecionar o web site no solution explorer, clicar sobre a aplicao web e em seguida ir para o menu WebSiste >> ASP.NET Configuration.

33

CAPITULO 5 WEB CONTROLS Os HTML controls so muito limitados em relao aos web controls, por exemplo, uma HTML control corresponde a uma tag HTML enquanto um web control no possu tal limitao. Por exemplo um nico objeto como TextBox poder assumir um entre trs elementos: <input type=text>, <textarea>, <input type=password>. Veja abaixo uma lista de Web Controls Bsicos:` ASP.NET Control Label TextBox TextBox TextMode=MultiLine TextBox TextMode=Password Button LinkButton ImageButton HyperLink DropDownList ListBox ListItem CheckBox RadioButton RadioButtonList Image ImageMap CircleHotSpot PolygonHotSpot RectangleHotSpot Table TableHeaderRow TableRow TableFooterRow TableHeaderCell HTML Element span input type=text textarea input type=password input type=submit a href=javascript:__doPostBack(LinkButton1,) input type=image a select select size=4 gives you 4 rows option input type=checkbox input type=radio seguido de um label para apresentar o texto um table com tr e td, sendo um td para cada item da lista. Em cada td, h um conjunto de controles equivalente ao RadioButton img img and a map tag holding one or more of the following 3: area shape=circle area shape=poly area shape=rect table tr tr tr th 34

TableCell BulletedList ListItem HiddenField Literal Calendar AdRotator FileUpload Wizard Xml MultiView Panel PlaceHolder Substitution Localize Validation controls

td ul with each list item: li input type=hidden Sem html correspondente. table complexa a input type=file uma table complexa. Isso se o estilo padro for mantido. possvel definir templates customizados para os passos do Wizard, deixa no layout mais amigvel a padronizado, facilitando a aplicao de estilos. <?xml version=1.0 encoding=utf-8?> MultiView no gera elementos html diretamente. Apenas seu contedo e controles so gerados. div Placeholder no possui elemento html correspondente. O que ser renderizado referente aos controles que nele forem adicionados atravs do mtodo PlaceHolder.Controls.Add() no sequncia em que forem adicionados. Sem html correspondente Sem html correspondente. O contedo exibido diretamente span

bom lembrar que a partir da verso 2.0, o ASP.NET dispem do recurso de Themes. Este permite um mapeamento entre WebControls e classes CSS, o que em teoria despreocupa os Designers, j que no mais necessrio saber o que ser gerado no HTML final. O desenvolvedor mapeia atravs de um arquivo .skin os controles e as respectivas classes CSS que sero aplicadas e estes. Como sugesto, pela experincia que tive, vale a pena gastar um tempo explicando para os Designers como funciona o arquivo .skin para que a partir da, ele tenha controle total da aplicao de estilos em pginas aspx baseadas em WebForms.

35

Uma Tag Web Control As tags ASP.NET possuem um formato especial, elas sempre comeam com o prefixo: asp: seguido do nome da classe. Se a mesma no possuir uma tag de fechamento a mesma finalizada com />. Todos os atributos da tag podero ser processados no servidor com exceo do atributo runat=server. Veja o exemplo de um ASP.NET TextBox:
<asp:TextBox ID="txt" runat="server" />

Quando um cliente requista uma pgina .aspx, o seguinte HTML retornado:


<input type="text" ID="txt" name="txt" />

WebControl base class A maioria dos web controls so derivados da classe WebControl. Esta classe define funcionalidade essenciais como data binding e inclu propriedades que so usadas pela maioria dos web controls. Veja algumas propriedades abaixo: AccessKey; Font; BackColor, ForeColor, BorderColor; Height e Width; BorderWidth; Page; BorderStyle; Parent; Controls; TabIndex; Enabled; ToolTip; EnabledViewState Visible;

36

Events e AutoPostBack Muitos eventos como o Click ocorrem imediatamente, pois quando clicados eles o boto realiza o post back na pgina, o que uma convenso bsica nos HTML forms, porm outras aes podem causar a chamada de um evento mas no podem realizar um post back. Por exemplo, quando o usurio altera um texto de um TextBox ou escolhe um item em uma lista, voc deseja responder aos eventos ocorridos porem sem um post back isto no ser possvel. Voc poder usar o automatic post back para forar que um controle execute um post back imediatamente quando detectar alguma ao do usurio.

37

CAPITULO 6 STATE MANAGEMENT Uma das maiores diferenas entre os modelos de programao para web e o modelo de programao para desktop o state management (armazenamento de estado). Como voc ir armazenar as informaes no ciclo de vida de uma aplicao. Informaes simples como nome do usurio, ou informaes mais complexas como carrinho de compras de um e-commerce. ViewState Uma forma comum de armazenar informaes o view state. View state usa o elemento HTML hidden field, que o ASP.NET insere automaticamente no final da renderizao da pgina. Anteriormente estudamos que os HTML server controls e web controls utilizam o view state para manter seus valores, porm o view state no limitado a apenas web controls. Sua pgina poder adicionar informaes diretamente no view state da pgina e poder recuperar tais informaes quando a pgina for carregada novamente (post back). ViewState Collection A propriedade da pgina ViewState contm as informaes do view state corrente da pgina. Esta propriedade uma instncia da classe StateBag. State Bag um tipo de coleo chamado dictornary, neste tipo de coleo os itens so identificados por nome. Exemplo:
this.ViewState[Contador] = 1;

Veja abaixo, o cdigo para recuperar o valor da variavel contador do view state,
Int32 contador = (Int32)this.ViewState[Contador];

Cross-Page Posting Cross-Page postback uma extenso do mecanismo postback que permite enviar o usurio para outra pgina, enviando todas as informaes. Para isto o ASP.NET tem uma nova propriedade chamada PostBackUrl, que esta definida na interface IButtonControl, os controles ImageButton, LinkButton e Button implementam esta interface. Exemplo:
<asp:Button runat="server" ID="cmdPost" PostBackUrl="CrossPage2.aspx" Text="Cross-Page Postback" />

Na pgina CorssPage2.aspx voc poder recuperar as informaes da pgina que enviou o usurio atravs da propriedade PreviousPage da classe Page. Esta propriedade uma instncia da classe Page, desta forma se precisarmos de informaes simples como titulo da pgina poderemos faze-l diretamente, porm para recuperar informaes mais detalhas como um valor de um TextBox precisaremos fazer um cast para a pgina que enviou o usurio. Veja o exemplo abaixo:

38

protected void Page_Load(object sender, EventArgs e) { CrossPage1 prevPage = PreviousPage as CrossPage1; if (prevPage != null) { // Cdigo de leitura das informaes do web form. } }

Voc tambm poder associar o tipo da propriedade da seguinte forma:


<%@ PreviousPageType VirtualPath="~/CrossPage1.aspx" %>

39

CAPITULO 7 TRATAMENTO DE ERRO, LOG E TRACE Nenhum software executa livre de erros, aplicaes web tambm no. Seu cdigo poder ser interrompido a qualquer momento, seja por um dado invlido, alguma circunstncia no tratada at mesmo um erro de hardware. Erros Comuns Um erro pode ocorrer em vrias situaes, vrias situaes comuns como, a diviso por zero, a conexo com algum arquivo ou banco de dados. Um tipo de erro muito comum o erro de null reference excpetion, que ocorre quando tentamos acessar um objeto ainda no instanciado. Quando um erro ocorre em seu cdigo o .NET verifica se existe algum tratamento de erro no escopo da execuo do seu cdigo (error handlers), caso nenhum tratamento de erro for encontrado, ento a execuo do seu cdigo abortada e uma pgina de erro exibida no browser. Exception Handling A maioria das linguagens .NET possuem um formato para recuperar uma exceo (structured exception handling). Quando um erro ocorre na sua aplicao, o .NET Framework cria uma exceo (exception), objeto quer ir representar o erro. Toda exceo derivada da classe Exception, esta classe possu propriedades com informaes do erro ocorrido, por exemplo se tentarmos acessar um objeto que ainda no foi instanciado, a propriedade Message ter o seguinte contedo: Object reference not set to an instance of an object. Quando recuperarmos um erro no ASP.NET poderemos recuperar excees genricas ou excees especificas, por exemplo se quisermos recuperar apenas erro de diviso por zero, poderemos verificar se a execeo ocorrida foi uma exceo do tipo DivideByZeroException. Para recuperarmos um erro com .NET, veja a sintaxe abaixo:
try { // Cdigo fonte. } catch { // Cdigo de tratamento do erro. } finally { // Cdigo a ser executado mesmo que um erro tenha ocorrido. }

40

Recuperando erros especficos:


catch ( NullReferenceException erro) { // Cdigo de tratamento do erro. } catch ( Exception erro) { // Cdigo de tratamento do erro. }

Voc poder criar suas prprias excees, basta criar uma instncia do objeto Exception. Veja o cdigo abaixo:
private decimal DividirNumeros(decimal numero, decimal divisor) { if (divisor == 0) { CustomDivideByZeroException erro = new CustomDivideByZeroException(); erro.DividingNumber = numero; throw erro; } else { return numero/divisor; } }

Log de Excees Em muitos casos necessitamos gravar logs, no s quando alguma exceo detectada. O .NET possu vrias formas de gravao, seja enviando um e-mail, adicionando um registro em uma base de dados ou criar um arquivo. Atravs do .NET podemos gravar logs tambm no Event Viewer do windows (que disponvel para qualquer aplicao). Escrevendo um Log de Evento Com o ASP.NET, poderemos criar facilmente Logs de Eventos, basta utilizarmos as classes do namespace System.Diagnostics. Primeiramente devemos importar tal namespace no inicio do cdigo fonte.
using System.Diagnostics;

41

O seguinte cdigo ir gravar um log usando o Event Log:


public partial class ErrorTestLog : Page { protected void cmdCompute_Click(Object sender, EventArgs e) { try { decimal a, b, result; a = Decimal.Parse(txtA.Text); b = Decimal.Parse(txtB.Text); result = a / b; lblResult.Text = result.ToString(); lblResult.ForeColor = System.Drawing.Color.Black; } catch (Exception err) { lblResult.Text = "<b>Message:</b> " + err.Message + "<br /><br />"; lblResult.Text += "<b>Source:</b> " + err.Source + "<br /><br />"; lblResult.Text += "<b>Stack Trace:</b> " + err.StackTrace; lblResult.ForeColor = System.Drawing.Color.Red; // Escrevendo as informaes no Log de evento do windows. EventLog log = new EventLog(); log.Source = "DivisionPage"; log.WriteEntry(err.Message, EventLogEntryType.Error); } } }

O cdigo acima ir gravar um log de evento no log chamada Application pois no informamos ao ASP.NET qual log o mesmo deveria gravar. NOTA: As aplicaes web utilizam a conta de usurio ASPNET para realizar algumas tarefas no servidor, por exemplo, gravao de log no Event Viewer, e para que a gravao seja realizada com sucesso ser necessrio conceder permisso de gravao e leitura no Event Viewer para o usurio ASPNET ou grupo que o mesmo pertence, para isto basta conceder as devidas permisses na seguinte chave de registro (regedit.exe): HKEY_Local_Machine\SYSTEM\CurrentControlSet\Services\EventLog

42

Log Customizados Voc poder criar seus prprios event log, por exemplo, se voc quiser criar um log com o nome da sua empresa ou at mesmo o nome do sistema. Para isto veja o exemplo abaixo:
if (!EventLog.SourceExists("CVSistemas")) { EventLog.CreateEventSource("Log de Eventos", "CVSistemas"); } EventLog log = new EventLog("CVSistemas"); log.Source = "Log de Eventos"; log.WriteEntry(erro.ToString(), EventLogEntryType.Error);

Trace As vezes precisamos recuperar as informaes para verificarmos como nossa aplicao esta executando algum pedao de cdigo ou verificarmos suas regras de negcio. ASP.NET tem uma funcionalidade chamada Tracing, que nos trs um relatrio com o diagnstico da execuo das pginas web. Habilitando Tracing Para usarmos o tracing, precisamos habilitar explicitamente. Existe duas maneiras de habilitarmos o trancing em pginas ASP.NET:
<%@ Page Trace="true" ... %>

Ou atravs do cdigo fonte da pgina


protected void Page_Load(Object sender, EventArgs e) { Trace.IsEnabled = true; }

O ASP.NET permite que voc habilite o tracing para toda aplicao para isto basta utilizarmos o web.config, veja o exemplo abaixo:
<configuration> <system.web> <trace enabled="true" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" /> </system.web> </configuration>

Com o visual studio, conseguimos depurar nossas aplicaes e verificarmos as regras de negcio sem a necessidade do trancing, desta forma o tracing maior utilizado quando publicamos uma aplicao ASP.NET.

43

Escrevendo informaes no Tracing Para escrever uma mensagem no tracing, use o mtodo Write(), mtodo Warn() atravs do objeto Trace. Este mtodos so equivalente com apenas uma diferena, o mtodo Warn() escreve os logs com cor vermelha. Veja o exemplo abaixo:
private void ExibirDataHora() { Trace.Write("Setando a data e hora do sistema."); Try { String data = textBoxDataHora.Text; labelDataHora.Text = Convert.ToDateTime(data).ToString("dd/MM/yyyy HH:mm"); } catch (Exception erro) { Trace.Warn(erro.Message); } }

44

CAPITULO 8 VALIDAES No desenvolvimento de aplicao se faz necessrio a realizao de validaes nos campos de entradas informados pelo usurio. O ASP.NET possu alguns controles de validaes so eles: Controle RequiredFieldValidator RangeValidator CompareValidator RegularExpressionValidator CustomValidator Descrio Verifica se o usurio informou ou no um controle de entrada. Verifica se o usurio informou ou no um valor contido no conjunto de nmero, caracteres ou datas. Verifica se o usurio informou ou no um valor de um controle igual ao valor de outro controle. Valida se o usurio informou um valor de acordo com a expresso regular informada. A validao realizada pelo cdigo definido pelo usurio.

Voc poder associar a um nico controle de entrada (web control) um ou mais controles de validaes. Validao do lado do servidor (Server-Side Validation) Uma prtica comum realizar a validao do envio de uma pgina manualmente em seu cdigo fonte. Quando voc utiliza validao automtica, a pgina iniciada normalmente e o usurio informa os dados dos controles da pgina, quando o usurio clica em algum boto para enviar a pgina para o servidor (submit form). Todos os botes da pgina possuem a propriedade CausesValidation, que pode assumir True ou False. O que acontece quando o usurio clica no boto: Se a propriedade CausesValidation for False, o APS.NET ignora os controles de validao e a pgina enviada (posted back) Se a propriedade for True, o ASP.NET automaticamente ir validar a pgina quando o usurio clicar em algum boto. Se algum controle de validao encontrar algum erro, a pgina retornada para o usurio com informaes do erro.

Validao do lado do cliente (Client-Side Validation) Esta validao a mais comum, o ASP.NET adiciona automaticamente codigos JavaScript do lado cliente para realizao das validaes. Neste caso, se algum controle de validao encontrar um erro, o usurio receber uma mensagem na tela e a pgina no ser enviada para o servidor.

45

Classe BaseValidator Todo controle de validao so derivados da classe BaseValidor. Esta classe define as funcionalidades bsicas dos controles de validaes. Veja abaixo suas principais propriedades: ControleToValidate ForeColor IsValid EnabledClientScript Validao Simples Para voc melhor entender como os controles de validao funcionam, vamos criar uma pgina simples que ir usar um web controle Button e dois controles TextBox e usaremos os control RangeValidator para validar o primeiro TextBox, se a validao falhar uma mensagem ser exibida para o usurio. Veja imagem abaixo: ErroMessage Display Enabled

A declarao do RangeValidator deve ser igual ao seguinte exemplo:


<asp:RangeValidator id="rangeValidator" runat="server" ErrorMessage="*Digite um nmero entre 1 e 10" ControlToValidate="textBoxNumero" MaximumValue="10" MinimumValue="1" Type="Integer" />

Voc poder verificar em seu cdigo fonte se a validao falhou ou no, para isto veja o exemplo abaixo:
protected void cmdEnviar_Click(object sender, EventArgs e) { if (rangeValidator.IsValid) { labelSucesso.Text = "Validao realizada com sucesso!"; } }

46

Outras formas de exibio O ASP.NET permite que voc exiba as mensagens de erros em um outro local, por exemplo se voc deseja exibir uma lista com todos os erros encontrados voc poder utilizar o controle ValidationSummary. Este objeto ir exibir a lista de erros encontrados na pgina. Voc deve setar a propriedade Display dos controles de validao para None. Veja a declarao de um controle ValidationSummary:
<asp:ValidationSummary id="listaErros" runat="server" />

Veja imagem abaixo:

Validaes Customizadas Com o controle CustomValidator voc poder realizar validaes especficas de acordo com a regra de negcio da sua pgina. Por exemplo se voc quiser validar o cdigo do pedido de uma loja virutal, voc poder utilizar o CustomValidator e no cdigo fonte de sua pgina voc dever criar o mtodo que ir realizar as validaes necessrias. Veja declarao do mtodo de validao e atente para o argumento do tipo ServerValidateEventArgs. Veja o cdigo abaixo com a delcarao do mtodo de validao do lado do servidor:

47

protected void customValidator_ServerValidate(Object sender, ServerValidateEventArgs e) { try { e.IsValid = (e.Value == 10); } catch { e.IsValid = false; } }

Esta validao tambm poder ser feita do lado do client utilizando JavaScript, basta declarar o mtodo de validao no JavaScript da seguinte forma:
<script type="text/javascript"> function ValidarPedido(objeto, argumentos) { var numero = argumentos.Value; if (numero == 10) { argumentos.IsValid = true; } else { argumentos.IsValid = false; } } </script>

A declarao da tag do Custom Validator ficar da seguinte forma:


<asp:CustomValidator id="customValidator" runat="server" ErrorMessage="Cdigo do pedido invlido" ControlToValidate="textBoxCodigoPedido" OnServerValidate=" customValidator_ServerValidate " ClientValidationFunction=" ValidarPedido " />

48

CAPITULO 9 USER CONTROLS Para aperfeioar o desenvolvimento de pginas web, o ASP.NET possu o User Control, que um eficiente modo de reutilizarmos pedaos da interface do usurio. User Control se parece muito com web forms com algumas diferenas, so elas: Extenso do arquivo, os user controls possuem a extenso .ascx; O arquivo .ascx comea com a diretiva <%@Control%> ao contrrio de uma pgina que comea com < %@Page%>; User Controls no podem ser requisitados pelo web browser, deve ser includos dentre de uma pgina web.

Veja abaixo um exemplo de um User Control


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Menu.ascx.cs" Inherits="Menu" %> <div> <!-- Aqui vem o HTML do controle --> </div>

Para utilizar um User Control dentro de um web form voc precisa registrar o controle no web form desejado. Para registrar um User Control dentro do seu web form use o <%@Register %> no inicio de sua pgina. Veja exemplo abaixo:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Inicio.aspx.cs" Inherits="Inicio"%> <%@ Register TagPrefix=" CVSistemas" TagName="Menu" Src="menu.ascx" %>

49

CAPITULO 10 ESTILOS E MASTER PAGES Estilos (Style) No desenvolvimento de pginas web, designer formatam seus documentos utilizando recursos de formatao do HTML, os recursos formatao do HTML as vezes so limitadas, inconsistentes. Uma tima soluo o padro CSS suportado pela maioria dos browsers hoje em dia. CSS possui inmeras propriedades de formataes consistentes para qualquer elemento HTML. Estilos como borda, fonte, cores entre vrias outras. Tipos de Estilos Uma pgina web pode usar trs tipos de formatao: Inline style: So estilos aplicados diretamente na tag do elemento HTML; <p style="background: Blue">Este um fundo azul.</p> Internal Style sheet: So uma coleo de estilos que so colocados dentro da tag <head>; External Style sheet: So uma coleo de estilos similar ao internal com uma diferena, os stilos so armazenados em um arquivo separado com extenso .css;

Themes (Tema) Com a convenso do CSS Styles atualmente, os CSS rules so limitados por serem fixos. Os controles ASP.NET como Calendar, CheckBoxList por serem controles mais complexos no conseguem exibir as formataes corretamente, desta forma se quisermos colocar algum stilo nestes controles necessitamos coloca-los manualmente. O ASP.NET traz um novo recuso para resolver este problema, este recursos se chama Theme (tema). Como Themes Funcionam Todos os temas so aplicaes especficas. Para utilizar um tema em sua aplicao web voc dever criar uma pasta para o mesmo. Esta pasta dever ficar armazenada na pasta especial App_Themes, que dever estar na raiz da sua aplicao web. Sua aplicao poder conter vrios temas, e todos eles devero estar armazenados dentro da pasta App_Themes, porm cada um com sua prpria pasta. Apenas um tema poder esta ativo na pgina. Para criar seu tema, voc deve criar um skin dentro de sua pasta, Um arquivo skin um arquivo texto com a extenso .skin. Um arquivo skin basicamente uma lista de tags de um controle. As tags de um controle dentro do arquivo de skin no precisa estar definitivamente completa, basta setar apenas as propriedades que voc deseja padronizar (um tema pode conter mais de um skin). Por exemplo, se quiser padronizar as cores da fonte de um controle e o fundo do controle dentro atravs de um arquivo skin, use a seguinte sintaxe:
<asp:ListBox runat="server" ForeColor="White" BackColor="Orange"/>

Na declarao acima apenas a propriedade runa=server obrigatria o restante opcional.

50

Para aplicar um tema na sua pgina web, basta setar a propriedade Theme da diretiva de pgina com o nome da pasta do seu tema.
<%@ Page Language="C#" AutoEventWireup="true" ... Theme="AzulTheme" %>

Quando voc aplica um tema em uma pgina web, o tema ser aplicado a todos os controles da sua pgina web, de acordo com as configuraes indicadas no arquivo de skin. Veja o exemplo abaixo:

51

Master Page Muitas vezes no desenvolvimento de web sites, existem partes de uma pgina que desejamos adicion-la em todas as pginas do site. Por exemplo, o menu de uma aplicao web, informaes do usurio logado, entre outros. Para resolvermos este problema sem a necessidade de duplicao de cdigo, devemos utilizar a nova ferramenta Master Page do ASP.NET, Master Pages permiti que voc defina uma estrutura bsica para o web site, desta forma voc poder utiliza-lo em toda sua aplicao. Uma Master Page similar a uma pgina ASP.NET, voc poder incluir elementos HTML, web controls e cdigos. Master pages possuem a extenso .master, uma master page no pode ser exibida diretamente no browser. Uma master page dever utilizar outras pginas, que so conhecidas como content pages. Uma master page define a estrutura do site e as content pages definem a estrutura e contedo a ser exibido. Criando uma Master Page Aps criar uma master page utilizando o visual studio, voc ver uma pgina em branco que possu um controle chamado ContentPlaceHolder. ContentPlaceHolder uma parte da sua master page que poder ser alterada, todo o restante do contedo no poder ser alterado. Veja imagem abaixo:

Utilizando uma MasterPage Definir a(s) pgina(s) de contedo simples e pode ser feito de quatro maneiras diferentes: 52

Durante a criao da pgina, na caixa de dialogo Add New Item, marque a opo Select Master Page

Ser exibida a caixa de dialogo Master Page, que exibe as Master Pages disponveis no projeto:

A segunda atravs da prpria pagina Master, selecionando a opo Add Content Page. Ser criada uma pgina de contedo em branco. Voc no poder escolher o nome da pgina no momento da sua criao. 53

A terceira de forma manual. Crie um Web Form normalmente, remova todo o HTML gerado, com exceo da diretiva de pgina. Adicione na diretiva de pgina o atributo MasterPageFile, que indica que esta uma pgina de contedo que utiliza a Master Page especificada no atributo. Finalmente, a quarta e ltima, em tempo de execuo:
protected void Page_PreInit(object sender, EventArgs e) { Page.MasterPageFile = "~/MasterUm.master"; }

A defninio de uma pagina Master em tempo de execuo deve ser feito no evento PreInit da pgina. Obviamente que esta ltima forma nos priva dos benefcios da herana visual. Trabalhando com uma Master Page Nesta sesso vamos demonstrar de maneira prtica como tirar proveito da utilizao de uma Master Page. Crie uma nova aplicao ASP.NET; Crie uma nova Master Page; Defina o layout da Master Page de acordo com a figura abaixo:

Detalhes do layout: Cor do fundo do Titulo: #FF9933 / Cor do fundo menu: #00CC66 Fonte do titulo: Trebuchet MS, tamanho: 25px, cor da fonte: #333333 Fonte do menu: Verdana, tamanho: 12px, cor da fonte: #333333

Para o titulo Loja Virtual CVSistemas voc dever criar um controle do tipo label, para o resumos dos pedidos do usurio voc dever criar um web user control, para o menu, criar quarto quatro controles, que devero funcionar como HyperLinks, utilize controles do tipo HyperLinks, defina a propriedade text de cada um como home, produtos, cadastro e pedido. A propriedade NavigateUrl de cada um deve ser definida pelo mesmo contedo da propriedade text mais a exteso aspx, por exemplo: produtos.aspx.

54

Master Page e mltiplos Content Regions (ContentPlaceHolder) Master pages no so limitadas a apenas um ContentPlaceHolder, voc poder adicionar vrios outros pontos onde a pgina ser dividida. Veja o exemplo abaixo:
<form id="form1" runat="server"> <img src="ImagemTopo.jpg" /><br /> <asp:ContentPlaceHolder id="ConteudoPrincipal" runat="server"></asp:ContentPlaceHolder> <i> <div style="..."><b>Outros Links</b><br /> <asp:ContentPlaceHolder id="OutrosLinks" runat="server"></asp:ContentPlaceHolder> </div> Curso ASP.NET Bsico CVSistemas Traning. </i> </form>

55

CAPITULO 11 WEB SITE NAVIGATION O ASP.NET traz na caixa de ferramentas (Toolbox) um novo controle destinados a navegao: SiteMap. O SiteMapPath possibilita criar de maneira muito simples um mapa de navegao do site, bastando cadastrar as urls e automaticamente ele j vai indicando em que url o usurio se encontra.

O primeiro passo adicionar um arquivo Web.Sitemap, para isso v ao Solution Explorer , projeto e depois Add New Item e escolha o template Site Map conforme abaixo. Esse template vai gerar o arquivo no formato XML que contm todos links do site que sero utilizados na navegao.

Confira o contedo do arquivo:


<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="" title="" description=""> <siteMapNode url="" title="" description="" /> <siteMapNode url="" title="" description="" /> </siteMapNode> </siteMap>

Voc deve incluir na pgina o controle SiteMapDataSource, este objeto estar visvel na parte de Design de sua pgina porm ele no ser exibido na tela do usurio. Em seguida voc dever adicionar o controle SiteMapPath (que esta na ToolBox de navegao (Navigation)) que estar ligado ao controle SiteMapDataSource criado anteriormente. Aps incluso do objeto, voc poder configur-lo da forma que bem entender, veja algumas propriedades como fonte, cor, tamanho da fonte, separador de pginas entre outros.

56

Se voc executar sua aplicao, ver uma trilha contendo a navegao do usurio em seu sistema, cada pgina exibida na trilha tem o seu link relativo, podendo o usurio clicar no nvel que deseja navegar. Veja imagem abaixo:

57

PARTE III TRABALHANDO COM DADOS


CAPITULO 12 FUNDAMENTOS DO ADO.NET O ADO.NET confia suas funcionalidades a um pequeno conjunto de classe, que podem ser dividas em dois gurpos, algumas usadas para controlar e armazenar dados, como DataSet, DataTable ou DataRows). E aqueles que so usados para conectar a uma fonte de dados especficas, tais como Connection, Command e DataReader. As classes de controle e armazenamento so genricas, no importa qua fonte de dados voc ir utilizar em sua aplicao, uma vez que voc extraiu os dados, os mesmos podero ser armazenados nos diversos controles de armazenamento, especialmente em um DataSet. A idia de um DataSet manter a estrutura de um banco de dados porm em memria, podendo incluir tabelas, linhas, colunas. O segundo grupo de classes existe em diversos fatores diferente. O conjunto de classes de interao com uma base de dados chamado de ADO.NET data provider. Os data providers so customizados de modo que cada um execute as interaes com a fonte de dados especfica. Por exemplo: SQL Data Provider foi criado para trabalhar com base SQL Server 7.0 ou superior, para se trabalhar com Oracle, existe o Oracle Provider e assim por diante. As classes de provider so derivadas de uma mesma classe base, implementam a mesmas interfaces que expem mtodos e propriedades comuns. O .NET possu os seguintes Data Providers: SQL Server Provider OLE DB Provider ORACLE Provider ODBC Provider

58

Para um melhor entendimento, veja a imagem abaixo para entender como o ADO.NET trabalha.

59

Data Namespaces Veja a tabela abaixo com os namespaces do ADO.NET: Namespaces System.Data System.Data.OleDb System.Data.SqlClient Funes Contm classes fundamentais de compe as funcionalidades do ADO.NET como DataSet, DataTable e etc. Contm as classes de conexo e execuo de uma base de dados atravs do OLE DB, como OleDbConnection, OleDbCommand. Contm as classes de conexo e execuo de uma base do SQL Server verso 7.0 ou superior, como SQLConnection, SQLCommand. Contm estrutura dos tipos de dados de uma base SQL Server, desta System.Data.SqlTypes forma quando for trabalhar com este tipo de banco, use os tipos deste namespace. System.Data.OracleClient System.Data.Odbc Contm as classes de conexo e execuo de uma base do Oracle, como OracleConnection, OracleCommand. Contm as classes de conexo e execuo de uma base atravs dos ODBC Drives, como OdbcConnection, OdbcCommand.

Veja abaixo lista de classe do ADO.NET Data Providers Connection (SQLConnection, OracleConnection, OleDbConnection, OdbcConnection) Command (SQLCommand, OracleCommand, OledDbCommand, OdbcCommand) DataReader (SQLDataReader, OracleDataReader, OleDbDataReader, OdbcDataReader) DataAdapter (SQLDataAdapter, OracleDataAdapter, OleDbDataAdapter, OdbcDataAdapter) Em todos os nossos exemplos utilizaremos uma base SQL Server, portanto importem o namespace da seguinte forma: using System.Data; using System.Data.SqlClient; Criando uma conexo Para criar uma conexo com o banco de dados SQL Server utilize o objeto SqlConnection, atravs da propriedade ConnectionString, a ConnectionString deve conter os seguintes parmetros: Data source: Indica o nome do servidor do banco de dados. Initial Catalog: Indica o nome do banco de dados a ser utilizado. User Id: Indica qual usurio ser utilizada para acessar o banco de dados. Password: Indica a senha do usurio; 60

ConnectionTimeout: Determina quanto tempo seu cdigo ir esperar (em segundos) para abrir uma conexo com o banco e dados, quando este tempo for alcanado uma exceo ser lanada. Veja abaixo um exemplo de uma ConnectionString: Data Source=Servidor; Initial Catalog=Banco de dados; User Id=Usurio; Password=Senha Voc poder utilizar o web.config para armazenar a string de conxo com o banco de dados a ser utilizado pela sua aplicao web, veja o cdigo abaixo:
<configuration> <connectionStrings> <add name="Northwind" connectionString= "Data Source=localhost;Initial Catalog=Northwind;User Id=Teste Password=entrar"/> </connectionStrings> </configuration>

Para recuperar a string de conexo armazenada no arquivo de configurao da sua aplicao, veja o cdigo abaixo:
String connectionString = WebConfigurationManager.ConnectionStrings["Pubs"].ConnectionString;

Para realizar a conexo com a base de dados utilize a classe SqlConnection, configure a string de conexo a ser utilizada e utilize o mtodo Open() para abrir a conexo com a base de dados. Veja o cdigo abaixo:
SqlConnection sqlConnection = new SqlConnection(connectionString); try { sqlConnection.Open(); lblInfo.Text = "<b>Verso Servidor:</b> " + sqlConnection.ServerVersion; lblInfo.Text += "<br /><b>A Conexo esta:</b> " + sqlConnection.State.ToString(); } catch (Exception erro) { lblInfo.Text = "Erro ao abrir conexo com a base de dados!"; lblInfo.Text += erro.Message; } finally { sqlConnection.Close(); lblInfo.Text += "<br /><b>Agora a conexo esta:</b> "; lblInfo.Text += sqlConnection.State.ToString(); }

61

Comando Select O objeto de conexo possu propriedades bsicas para apenas conectar com uma base de dados, para recuperarmos informaes da base de dados necessitaremos dos seguintes itens: Comando SQL para recuperao das informaes da base; Objeto Command para executar o comando SQL; Um objeto DataReader ou DataSet para acessar os registros retornados; Um Objeto Command representa um comando SQL. Para usar um objeto Command, voc dever informar o comando SQL a ser executado uma conexo disponvel e ento execute o comando. Veja o exemplo abaixo:
SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = sqlConnection; sqlCommand.CommandText = "SELECT * FROM Authors ORDER BY au_lname ";

OBS.: Voc poder usar o construtor do objeto Command para informar as propriedades visualizadas acima. Usando um DataReader Uma vez que seu objeto Command foi definido, voc precisa decidir como voc deseja recuperar as informaes, a forma mais simples o uso de um DataReader. Um DataReader mantm a conexo com a base de dados aberta enquanto l os registros da base, ao finalizar a leitura dos registros voc dever fechar a conexo com a base caso contrrio a mesma ficar aberta. Antes de voc usar um objeto DataReader assegur-se que sua conexo com a base de dados esteja aberta. Para criar um objeto DataRader use o mtodo ExecuteReader() de um objeto Command. Veja o exemplo abaixo: SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); Com o objeto DataReader preenchido, voc dever utilizar o mtodo Read() para recuperar um nico registro do objeto.
sqlDataReader.Read()

Voc poder acessar os valores do registro corrente atravs de um campo especfico, Veja o exemplo abaixo:
lstNomes.Items.Add( sqlDataReader[au_lname]);

62

Para mover para o prximo registro voc dever utilizar o mtod Read() novamente. Se este mtodo retornar True, quer dizer que ainda existem um registro em seu DataReader, caso contrrio no h mais dados no objeto. Assim que voc terminar a utilizao do objeto DataRader voc dever fechar o objeto quanto o objeto de conexo. Veja agora como percorrer os registros de um DataReader: private void CarregarListBoxAutores() {
String connectionString = WebConfigurationManager.ConnectionStrings["Pubs"].ConnectionString; SqlConnection sqlConnection = new SqlConnection(connectionString); sqlConnection.Open(); sqlCommand sqlCommand = new SqlCommand(SELECT * FROM Authors ORDER BY au_lname, sqlConnection); SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { ListItem newItem = new ListItem(); newItem.Text = sqlDataReader ["au_lname"] + ", " + sqlDataReader ["au_fname"]; newItem.Value = sqlDataReader ["au_id"].ToString(); lstAuthor.Items.Add(newItem); // Onde lstAuthor e um controle do tipo asp:ListBox } sqlDataReader.Close(); sqlConnection.Close(); }

63

Adicionando, Atualizando e Excluindo Dados Agora que j sabemos como recuperar informaes da base de dados, iremos aprender como adicionar, atualizar e excluir dados. Para todas estas operaes (Insert, Update e Delete) utilizaremos o objeto Command para executalas, devemos utilizar o mtodo ExecuteNonQuery(). Este mtodo retorna o nmero de linhas (rows) afetadas pelo comando. Adicionando um Registro (Insert) Para adicionar um registro veja o cdigo exemplo abaixo:
private String GetConnectionString() { return ConfigurationManager.ConnectionStrings["dbLoja"].ConnectionString; } private void AdicionarRegistro() { String insertSQL; insertSQL = String.Format("INSERT INTO Cliente (Nome, Email) VALUES ('{0}', '{1}')", txtNome.Text, txtEmail.Text); SqlConnection con = new SqlConnection(GetConnectionString()); SqlCommand cmd = new SqlCommand(insertSQL, con); int adicionados = 0; try { con.Open(); adicionados = cmd.ExecuteNonQuery(); lblResultado.Text = adicionados.ToString() + " registro(s) adicionado(s)."; } catch (Exception err) { lblResultado.Text = "Erro adicionando um registro. "; lblResultado.Text += err.Message; } finally { con.Close(); } }

64

O cdigo acima adicionar um registro na base de dados corretamente, porm no o mtodo mais seguro, como podem ver se o usurio adicionar um apostrofo na caixa de texto de entrada um erro de sintaxe ser lanado ou at permitir que usurios alterem dados da sua base atravs de SQL Injection Attack. Para resolver isto devemos utilizar um comando parametrizado, veja abaixo como criar um comando parametrizado.
private void AdicionarRegistro() { String insertSQL; insertSQL = "INSERT INTO Cliente (Nome, Email) VALUES (@Nome, @Email)"; SqlConnection con = new SqlConnection(GetConnectionString()); SqlCommand cmd = new SqlCommand(insertSQL, con); cmd.Parameters.AddWithValue("@Nome", txtNome.Text); cmd.Parameters.AddWithValue("@Email", txtEmail); int adicionados = 0; try { con.Open(); adicionados = cmd.ExecuteNonQuery(); lblResultado.Text = adicionados.ToString() + " registro(s) adicionado(s)."; } catch (Exception err) { lblResultado.Text = "Erro adicionando um registro. "; lblResultado.Text += err.Message; } finally { con.Close(); } }

65

Atualizando um Registro (Update)


Para atualizar um registro veja o cdigo exemplo abaixo: private void AtualizandoRegistro(Int16 codigoCliente) { String updateSQL; updateSQL = "UPDATE Cliente SET Nome = @Nome, Email = @Email WHERE CodCliente = @CodCliente"; SqlConnection con = new SqlConnection(GetConnectionString()); SqlCommand cmd = new SqlCommand(updateSQL, con); cmd.Parameters.AddWithValue("@Nome", txtNome.Text); cmd.Parameters.AddWithValue("@Email", txtEmail.Text); cmd.Parameters.AddWithValue("@CodCliente", codigoCliente); int atualizados = 0; try { con.Open(); atualizados = cmd.ExecuteNonQuery(); lblResultado.Text = atualizados.ToString() + " registro(s) atualizado(s)."; } catch (Exception err) { lblResultado.Text = "Erro adicionando um registro. "; lblResultado.Text += err.Message; } finally { con.Close(); } }

Excluindo um Registro (Delete)


Para excluir um registro veja o cdigo exemplo abaixo: private void ExcluindoRegistro(Int16 codigoCliente) { String deleteSQL; deleteSQL = "DELETE FROM Cliente WHERE CodCliente = @CodCliente"; SqlConnection con = new SqlConnection(GetConnectionString()); SqlCommand cmd = new SqlCommand(deleteSQL, con); cmd.Parameters.AddWithValue("@CodCliente", codigoCliente); int excluidos = 0; try { con.Open(); excluidos = cmd.ExecuteNonQuery(); lblResultado.Text = excluidos.ToString() + " registro(s) excluido(s)."; } catch (Exception err) { lblResultado.Text = "Erro excluindo um registro. "; lblResultado.Text += err.Message; } finally { con.Close(); } }

66

Acesso Desconectado Quando voc trabalha com acesso ao banco de dados desconectado, uma cpia dos dados armazenada na memria atravs de um DataSet. Voc conecta a base, recupera as informaes desejadas, preenche um DataSet e a conexo fechada imediatamente. Para preencher um DataSet voc dever utilizar o objeto DataAdapter, para isto vamos utilizar o mtodo Fill(), este mtodo ir inserir um DataTable no DataSet com os dados recuperados pela query. Veja o exemplo de cdigo abaixo:
String connectionString = WebConfigurationManager.ConnectionStrings["Pubs"].ConnectionString; SqlConnection sqlConnection = new SqlConnection(connectionString); sqlCommand sqlCommand = new SqlCommand(SELECT * FROM Cliente ORDER BY Nome, sqlConnection); SqlDataAdapter adapter = new SqlDataAdapter(sqlCommand); DataSet dsLoja = new DataSet(); Try { sqlConnection.Open(); adapter.Fill(dsLoja, Clientes); } finally { sqlConnection.Close(); } foreach (DataRow row in dsLoja.Tables["Cliente"].Rows) { ListItem newItem = new ListItem(); newItem.Text = row["nome"].ToString(); newItem.Value = row["codcliente"].ToString(); lstCliente.Items.Add(newItem); }

67

CAPITULO 13 DATA CONTROLS O ASP.NET possu uma srie de controles que possibilitam a insero automtica de valores nos web controls. Iremos aprender neste capitulo sobre os controles GridView. GridView O controle GridView um controle flexvel para exibir uma ou vrias linhas / colunas em uma tabela. Cada coluna de um registro uma coluna no grid. O GridView possu uma propriedade DataSource para guardar os objetos de dados que voc deseja exibir. Uma vez que voc j tenha informado tal propriedade, voc dever executar o mtodo DataBind() para que os dados sejam exibidos pelo controle. O controle GridView no possu as propriedades DataTextField e DataValueField (Os web controls comuns como ListBox, DropDownList possuem tais propriedades), o controle cria as colunas do grid automaticamente de acordo com o objeto de dados passado para a propriedade DataSource. Para desabilitar esta funcionalidade, voc dever informar o valor False para a propriedade do grid chamada AutoGenerateColumns. Veja abaixo a criao de um grid: <asp:GridView ID=GridView1 runat=server /> Uma vez que voc j tenha adicionado o controle GridView em sua pgina web, voc poder recuperar as informaes da base de dados e utilizar o controle criado para exibio dos dados. Veja o cdigo de exemplo abaixo:
protected void Page_Load(object sender, EventArgs e) { string connectionString = WebConfigurationManager.ConnectionStrings["dbLoja"].ConnectionString; string selectSQL = "SELECT CodCliente, Nome, Email FROM Cliente"; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); adapter.Fill(ds, "Products"); GridView1.DataSource = ds; GridView1.DataBind(); }

68

Selecionando um Item do GridView Para selecionar um item do GridView voc dever definir uma coluna do tipo <asp:Command> em seu GridView, configurando as seguintes propriedades: ShowSelectedButton = (True/False) para exibio do boto de seleo, neste caso informe True; ButtonType = (Image/Button/Link) para definir o tipo de boto, podendo ser link, texto ou imagem; SelectText = Informe o texto a ser exibido caso o tipo de boto seja Link ou Button; SelectImageUrl = Informe o caminho relativo da imagem a ser exibida. Aps adicionar tal coluna voc poder recuperar as informaes da linha selecionada atravs do evento SelectedIndexChange, veja o cdigo abaixo:
void GridView1_SelectedIndexChanged(object sender, EventArgs e) { if (GridView1.SelectedIndex > -1) { Response.Write(GridView1.SelectedRow.Cells[1].Text); } }

Ordenando um GridView Para ordenar um GridView voc deve adicionar as colunas do grid manualmente, e ento configurar a propriedade SortExpression da coluna. Veja exemplo abaixo:
<asp:BoundField DataField="NomeCliente" HeaderText="Nome" SortExpression="NomeCliente" />

Paginao O controle GridView possu uma eficiente forma de paginar os dados recuperados, para habilitar a paginao do seu grid, configure as seguintes propriedades: AllowPaging = (True/False) para habilitar ou desabilitar a paginao do seu grid, em nosso caso informe True; PageSize = (Int32) tamanho da sua pagina de dados (quantos registros sero exibidos na tela do usurio); Veja o exemplo abaixo:
<asp:GridView ID="GridView1" runat="server" DataSourceID="sourceProducts" PageSize="10" AllowPaging="True" ...> ... </asp:GridView>

69

Coluna Template At agora utilizamos colunas que recuperam dados informando uma propriedade referente ao nome do campo que desejamos utilizar para a coluna, porm a casos em que necessitamos colocar em uma mesma coluna algum outro campo ou at mesmo o prprio campo em objetos diferente dentro da coluna, para resolver este problema o GridView possui uma coluna do tipo template, veja abaixo como devemos criar e utilizar a mesma para recuperar e apresentar os dados ao usurio.

<asp:TemplateField HeaderText="Status"> <ItemTemplate> <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="statuspic.gif" CommandName="StatusClick" CommandArgument='<%# Eval("CodigoProduto") %>' /> </ItemTemplate> </asp:TemplateField>

Formatando Valores de Colunas do GridView Para formatar valores de uma coluna do grid, voc deve utilizar a propriedade chamada DataFormatString, onde a sintaxe de formatao deve iniciar com {0:[Formatao]} onde 0: indica o valor a ser formatado. Veja abaixo alguns exemplos de formataes:
<asp:BoundField DataField="Preo" HeaderText="Preo" DataFormatString="{0:C}" />

No exemplo acima o caractere C indica que uma formatao de valores monetrios, se o valor do campo for 5000.00 ser exibido para o usurio o valor R$ 5.000,00 Exemplo de formatao de um campo de data, ser exibido para o usurio a data no formato DD/MM/YYYY
<asp:BoundField DataField="dataNascimento" HeaderText="Dt. Nascimento" DataFormatString="{0:dd/MM/yyyy}" />

70

CAPITULO 14 FILES E STREAMS File System O .NET possui classes bsicas para recuperao de informaes de todo sistema de arquivos, como pastas e arquivos. Estas classes esto dentro do namespace System.IO. As classes Directory e File, contm mtodo estticos para recuperao de informaes de pastas e arquivos visveis no seu serivdor. As classes DirectoryInfo e FileInfo, possui mtodo de instncia e propriedades para recuperar as informaes de pastas e arquivos. A classe DriveInfo, possui mtodo estticos para recuperar informaes dos discos, parties e tambm um somatrio do espao disponvel em disco. Veja abaixo um exemplo de como listar os arquivos de uma determinada pasta:
DirectoryInfo dirInfo = new DirectoryInfo(@C:\Windows); lstArquivos.DataSource = dirInfo.GetFiles(); lstArquivos.DataMember = "Name"; lstArquivos.DataBind();

STREAMS Criao de Arquivos de Texto Com .NET ficou muito fcil a criao de arquivos de texto simples (flat) ou arquivos binrios. Diferente de um banco de dados, estes arquivos no possuem uma estrutura interna (por isto se chama flat). Voc poder escrever em um arquivo usando as classes StreamWriter e StremReader para criar ou ler um arquivo poderemos utilizar os mtodos CreateText(), ou OpenText() do classe File. Veja exemplo abaixo:
StreamWriter streamWriter = File.CreateText(@C:\meuArquivo.txt);

Quando chamamos o mtodo CreateText(), o arquivo de texto criado e o mtodo retorna um objeto do tipo StreamWriter. Neste ponto poderemo escrever os dados no arquivo de texto e assim que possvel fechar o mesmo. Usando o StreamWrite, poderemos chamar o mtodo WriteLine() para adicionarmos informaes no arquivo. Veja o exemplo abaixo:
streamWriter.WriteLine("Este arquivo foi craido pelo ASP.NET"); streamWriter.WriteLine(1000);

71

Quando voc finalizar o trabalho com o arquivo, voc dever fech-lo. Caso contrrio as informaes adicionadas no sero gravadas no disco e o arquivo ficar bloqueado. Para gravar as informaes no disco de tempos em tempos voc poder chamar o mtodo Flush(). Veja o exemplo abaixo:
streamWriter.Flush(); streamWriter.Close();

Para ler informaes de um arquivo, voc dever utilizar a classe StreamReader, voc poder utilizar o mtodo ReadLine() para recuperar as prximas informaes do arquivo (linha a linha), este mtodo retorna null caso no exista mais informaes no arquivo. Veja o exemplo abaixo: StreamReader reader = File.OpenText(@"c:\meuArquivo.txt"); string linha;
do { linha = reader.ReadLine(); if (linha != null) { Response.WriteLine(linha); } } while (linha != null); reader.Close();

72

CAPITULO 15 XML Com o ASP.NET podemos facilmente ler ou gravar arquivos XML, o .NET possui diversas classes para manipulao de XML e esto referenciadas dentro no namespace System.Xml. Vamos aprender a utilizar a classe XmlDocument para ler arquivos no formato .xml XmlDocument Com a classe XmlDocument, poderemos facilmente navegar em todo xml, poderemos ler, incluir, remover nodos em qualquer parte do arquivo xml. Para ler informaes de um XML voc dever criar um objeto XmlDocument e usar o mtodo Load(). Uma vez que o objeto XmlDocument esteja criado na memria voc poder extrair todo seu contedo percorrendo a coleo de objetos do tipo XmlElement. Veja o cdigo abaixo: 1 - Criar o arquivo Xml abaixo, salvar com o nome Agenda.xml:
<?xml version="1.0"?> <Agenda> <contato nome="Luiz"> <telefone>(31) 8888-8888</telefone> <email>luiz@cvsistemas.com.br</email> </contato> <contato nome="Maia"> <telefone>(31) 9999-9999</telefone> <email>maia@cvsistemas.com.br</email> </contato> </Agenda>

2 - Criar a classe abaixo:


public class Contato { private String nome; private String telefone; private String email; public String Nome { get { return nome; } set { nome = value; } } public String Telefone { get { return telefone; } set { telefone = value; } } public String Email { get { return email; } set { email = value; } } }

73

3 Cdigo de leitura do Xml: // Criando o XmlDocument XmlDocument doc = new XmlDocument(); doc.Load(@"C:\Agenda.xml"); // Criando a lista que ser preenchida com as informaes do XML. List<Contato> agenda = new List<Contato>(); foreach (XmlElement element in doc.DocumentElement.ChildNodes) { Contato contato = new Contato(); contato.Nome = element.GetAttribute("Nome"); contato.Telefone = element.SelectSingleNode("telefone").InnerText; contato.Email = element.SelectSingleNode("email").InnerText; agenda.Add(contato); } // Exibindo o resultado gridAgenda.DataSource = agenda; gridAgenda.DataBind();

74

CAPITULO 16 WEB SERVICES Acompanhando a evoluo e padronizao da internet como mais um meio de comunicao, sugiram no mercado novas ferramentas de desenvolvimento como o ASP.NET da Microsoft e novos padres como o WebService. O WebService veio preencher uma lacuna no mercado que era a necessidade de integrao entre os mais diversos ambientes existentes que no se falavam entre si por falta de um "Padro" e fortalecer o desenvolvimento distribudo de forma a trabalhar em conjunto com os novos recursos de comunicao da internet. Os WebServices funcionam de forma semelhante a um componente que voc instala na maquina local. Porm esse componente pode ficar residente em qualquer maquina, seja ela na sua empresa, na empresa de terceiros ou at na "China". isso mesmo, at na "China". Ento usando a internet e o XML (Extensible Markup Language) para troca de informaes voc executa um mtodo desse componente que dispara o processamento no servidor remoto e voc recebe a resposta na sua aplicao. A principal diferena em relao aos componentes atuais a padronizao do XML para troca de informaes, fazendo com que a comunicao do mesmo ultrapasse as barreiras dos Firewall impostos para segurana de nossas redes. Pois a unica coisa que trafega o XML e usando a porta 80 (Padro) em conjunto com o j conhecido HTTP e o SOAP(Sabo) que cuida do transporte dos dados. Para troca de informao entre a aplicao e o WebService necessrio que essa aplicao conhea o funcionamento do mesmo, isso feito por meio da leitura do WSDL. Nada mais que um documento ou "contrato" em xml que contm todas as regras do WebService. Ainda temos mais uma sigla a falar que o UDDI, uma espcie de paginas amarelas de WebService, cujo objetivo encontrar facilmente os links para os componentes. Ao contrrio do que muitos pensam, o padro WebService no proprietrio da Microsoft, pelo contrrio definido por um consrcio de diversas empresas WS-I de forma a manter a integrao entre todas as plataformas que venham a utilizar esse padro, permitindo assim a perfeita comunicao e troca de informaes. O que aconteceu que a Microsoft acreditou desde cedo no XML e investiu muito em todos os seus produtos, principalmente na plataforma .NET, permitindo assim a fcil e rpida integrao com seus produtos.

O XML foi adotado por j ser um padro da indstria e ser independente da plataforma adotada, sendo ainda controlado pelo World Wide Web Consortium (W3c). Facilmente voc consegue transformar o mesmo em outro formato independente da aplicao entender o XML.

SEM XML 75

APRENDA ASP.NET, LUIZ MAIA , R$ 10,00 COM XML <Livro> <Descricao> APRENDA ASP.NET </Descricao> <Autor> Luiz Maia </Autor> <Preco> R$ 10,00 </Preco> </Livro> Na plataforma .NET essa implementao bastante simples, consiste de duas partes: - Criar um WebServices (Para ser utilizado por terceiros) - Consumir um WebServices (Desenvolvido por terceiros) Ento para criar um WebServices voc pode adicionar pelo Visual Studio um arquivo do tipo *.asmx a um projeto ASP.NET ou conforme esse exemplo iniciar um novo projeto especifico para WebServices. WebService um dos assuntos mais tratados no momento pela facilidade de integrao entre ambientes diferentes, e por que est seguindo uma linha de padronizao permitindo a total integrao. Sendo assim esse WebService que voc implementou pode ser utilizado por outra plataforma no .NET e vice-versa. O diferencial que voc vai encontrar aqui a facilidade de implementao. Isso realmente indiscutvel e tem trazido grande mercado para plataforma .NET.

76

PARTE IV BOAS PRTICAS DE DESENVOLVIMENTO


CAPITULO 17 DESENVOLVIMENTO DE SISTEMAS EM CAMADAS A maioria das pessoas que desenvolve sistemas em algum momento j percebeu como o cdigo pode ficar uma grande desordem e muito difcil de ler e dar manuteno. Seja pelo fator da perda de desempenho devido dificuldade de releitura ou pela prpria falta de organizao que aplicaes assim demonstram. Uma tima e talvez a melhor forma de evitar esses e outros problemas a programao em camadas. Na programao em camadas, interface, negcio e dados so separados como forma de organizar e garantir facilidade no entendimento. A diviso muito simples. Numa linguagem como Asp.Net dizemos que o script .aspx a camada de interface, o script .aspx.cs a camada de negocio(C#.Net), e as classes so a camada de dados. Dessa forma conseguimos desenvolver cdigos muito bem organizados e de fcil re-implementao. Camada Apresentao Domnio / Negcio Dados Responsabilidades Provisionamento de servios, exibio de informaes Lgica particular ao sistema Comunicao com bancos de dados, sistemas de mensagens, monitores de transao

77

Referncias bibliogrficas Beginning ASP.NET 3.5 in C# 2008 - Second Edition - Matthew MacDonald (Apress) MSDN ASP.NET Developer Center (acesso em 10/03/2009) Link: http://msdn.microsoft.com/en-us/asp.net/default.aspx

78