Você está na página 1de 72

Curso Bsico

ASP.NET 3.5 (C#)

2009

Carlos Jnior
contato@devcursos.com.br
www.devcursos.com.br

PARTE I INTRODUO AO .NET......................................................................3


CAPITULO 1 O .NET FRAMEWORK...............................................................................3
CAPITULO 2 A LINGUAGEM C#...................................................................................6

PARTE II DESENVOLVENDO APLICAES ASP.NET..............................................18


CAPITULO 3 VISUAL STUDIO 2008..............................................................................18
CAPITULO 4 FUNDAMENTOS WEB FORM......................................................................24
CAPITULO 5 WEB CONTROLS...................................................................................32
CAPITULO 6 STATE MANAGEMENT.............................................................................35
CAPITULO 7 TRATAMENTO DE ERRO, LOG E TRACE.........................................................36
CAPITULO 8 VALIDAES.......................................................................................40
CAPITULO 9 USER CONTROLS..................................................................................44
CAPITULO 10 ESTILOS E MASTER PAGES......................................................................45
CAPITULO 11 WEB SITE NAVIGATION.........................................................................51

PARTE III TRABALHANDO COM DADOS............................................................53


CAPITULO
CAPITULO
CAPITULO
CAPITULO

12
13
14
15

FUNDAMENTOS DO ADO.NET...................................................................53
DATA CONTROLS.................................................................................63
FILES E STREAMS.................................................................................66
XML................................................................................................68

PARTE IV ASP.NET + AJAX..........................................................................70


CAPITULO 16 CRIANDO APLICAES COM INTERFACES RICAS SEM REFRESH..........................70

............................................................................................................. 70
PARTE V BOAS PRTICAS DE DESENVOLVIMENTO...............................................71
CAPITULO 17 DESENVOLVIMENTO DE SISTEMAS EM CAMADAS.............................................71

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,
Windows, Mbile (SmartPhone), WebServices, 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. Pode ser baixada em seu site e faz parte das
verses mais novas 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 de aplicativos em qualquer plataforma".
O produto incorpora as linguagens Visual Basic .NET, Visual C++ e Visual C# (CSharp).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-intime (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.
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

Descrio

byte

Inteiro de 1 bit sem sinal (0 a 255)

Sbyte

Inteiro com sinal de 8 bits (-127 a 128)

int

Inteiro de 32 bits com sinal (-2.147.483.648 a 2.147.483.147)

uint

Inteiro de 32 bits sem sinal (0 a 4.294.967.295)

long

Inteiro com sinal de 64 bits (-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807)

ulong

Inteiro sem sinal de 64 bits (0 a 18.446.744.073.709.551.615)

short

Inteiro com sinal de 16 bits (-32.768 a 32.767)

ushort

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

Descrio

bool

true ou false

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

Descrio

char

Um nico caractere Unicode de 16 bits.

Exemplos:
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

Descrio

string

Unicode com at 1 gigabyte de caractere.

Exemplos:
string VarNome = Carlos Jnior;
string VarEmail = carlos.junior@brainiac.com.br;
string VarConcatenar = VarNome + VarEMail;
As strings so compostas por caracteres e podem conter caracteres literais. Veja a representao dos literais strings:
Tipo

Descrio

Apstrofo

Aspas

\\

Barra invertida

\0

Zero binrio ou nulo

\a

Alerta

\b

Retrocesso

\f

Avano de pgina

\n

Salto de linha

\r

Retorno de carro

\t

Tabulao horizontal

\v

Tabulao vertical

\uNNNN

NNNN o cdigo em hexadecimal

Uma representao importante das 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];
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;
}
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;
}
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
A tabela abaixo mostra-nos os caracteres de formatao que so utilizados na funo ToString( ):
Caractere

Descrio

C ou c

Representam valores monetrios

D ou d

Formatao Decimal. Apenas para nmeros Inteiros.

E ou e

Formato de Notao Cientifica

F ou f

Representam o formato de Ponto Fixo

G ou g

Formato Geral dos nmeros

N ou n

Representao Numrica

P ou p

Formato de porcentagem

R ou r

Assegura que um nmero convertido para string, ter o mesmo formato se convertido de volta para
nmero.

X ou x

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

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

Descrio

Exemplo

Exibe o dia do ms sem o zero

1, 2, 6, 12, 31

dd

Exibe o dia do ms com o zero

01, 02, 06, 12, 31

ddd

Exibe o nome abreviado do dia

Seg, Ter, Qua

dddd

Exibe o nome completo do dia

Segunda-feira

Exibe o ms sem o zero

1, 2, 6, 12

MM

Exibe o ms com o zero

01, 02, 06, 12

MMM

Exibe o nome abreviado do ms

Jan, Mar, Dez

MMMM

Exibe o nome completo do ms

Janeiro, Dezembro

Exibe os dois ltimos dgitos do ano sem o zero

1, 2, 6, 99

yy

Exibe os dois ltimos dgitos do ano com o zero

01, 02, 06, 99

yyyy

Exibe os quatro dgitos do ano

2008, 2006, 1999

Exibe as horas sem o zero para horas de 1 a 9.


h

Apresenta formato de 12 horas.


Exibe as horas com o zero para horas de 1 a 9.

hh

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.

HH

Apresenta formato de 24 horas.

1, 2, 6, 12
01, 02, 06, 12
1, 2, 9, 13, 15
01, 02, 09, 13, 15

Exibe os minutos sem o zero para minutos de 1 a 9.

1, 2, 6, 12, 58

mm

Exibe os minutos com o zero para minutos de 1 a 9.

01, 02, 06, 12, 58

Exibe os segundos sem o zero para seg. de 1 a 9.

1, 2, 3, 16, 59

ss

Exibe os segundos com o zero para seg. de 1 a 9.

01, 02, 03, 16, 59

Separador de tempo

13: 49: 52

Separador de data

13/ 01/ 2002

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.

long VarValor = (long)29.145;

Neste caso a varivel inteira do tipo long suportar o quanto for possvel do nmero no inteiro.

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;

Operadores
Operadores so smbolos utilizados para efetuar alguma ao.
Veja a tabela de operadores que o C# suporta.
Tipo

Operador

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.

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.
}

PARTE II DESENVOLVENDO APLICAES ASP.NET


CAPITULO 3 VISUAL STUDIO 2008
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 on-line do site da Microsoft MSDN.

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:

2.

Escolha o tipo da aplicao. Selecione o template ASP.NET Web Site. Outros templates iro auxili-lo na criao de aplicaes
Web, Webservices e sites mais especficos, adicionando arquivos adicionais ou configuraes especficas.

3.

Selecione a verso do .NET FRAMEWORK que voc deseja 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.

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.

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:

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).

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
Extenso .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 pgina web, porm

Extenso .ascx

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 aplicao ASP.NET.

Web.config

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 para definir

Global.asax

variveis globais (variveis que podem ser acessadas por qualquer pgina da
aplicao) e tambm usar eventos como quando a aplicao inicializada.

Extenso .cs

Estes so os arquivos com o cdigo fonte (Code-Behind) que contm os 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:
Diretrio

Descrio
Contm todos os componentes .NET compilados (DLLs) que o ASP.NET esta utilizando.

Bin

Por exemplo, se voc criar um componente especfico, voc dever coloca-lo nesta
pasta.

App_Code

Contm arquivos de cdigo fonte que so dinamicamente compilados para serem


usados pela aplicao.

App_WebReferences

Armazena as referncias aos web services utilizados pela aplicao.


Armazenamento de dados, incluindo arquivos de banco de dados como SQL Server

App_Data

2005 Express Edition, arquivos XML. Claro que voc poder armazenar tais arquivos
em qualquer outro diretrio.

App_Themes

Armazena os esquemas (Themes) que sero utilizados pela sua aplicao web.

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.

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-la 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 (CodeBehind), 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>
<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:
<%@ 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).

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 aplicao 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"

value="dDw3NDg2NTI5MDg7Oz4=" />

<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>
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

Descrio
Propriedade (Boolean) indicativa de carregamento inicial da tela ou se a mesma esta
sendo enviada novamente ao servidor (post).

EnableViewState

Indica se o formulrio ir manter ou no as informaes dos controles da pgina, esta

propriedade sobrescreve as propriedades dos controles.


Application

Coleo de informaes compartilhadas entre todos os usurios do site.

Session

Coleo de informaes de um nico usurio e poder ser utilizado por diversas pginas.

Request

Referncia para o objeto HttpRequest que contm todas as informaes da requsio


atual da pgina.

Response

Referncia ao objeto HttpResponse que representa a resposta ASP.NET que ser enviada
ao browser do usurio.

Server

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");

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;

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 para 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:\Stefanini\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.

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:`
Control Class

Elemento HTML

Label

<span>

Button

<input type="submit"> ou <input type="button">

TextBox

<input type="text">, <input type="password">, ou <textarea>

CheckBox

<input type="checkbox">

RadioButton

<input type="radio">

Hyperlink

<a>

LinkButton

<a> contm uma tag <img>

ImageButton

<input type="image">

Image

<img>

ListBox

<select size="X"> onde X o nmero de linhas visveis

DropDownList

<select>

CheckBoxList

Uma lista ou <table> com multiplos <input type="checkbox"> tags

RadioButtonList

Uma lista ou <table> com multiplos <input type="radio"> tags

BulletedList

<ol> lista enumerada ou <ul> lista no enumeradas (bulleted)

Panel

<div>

Table, TableRow e
TableCell

<table>, <tr>, e <td> ou <th>

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 requisita 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;

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.

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 estamos anteriormente, voc poder enviar o usurio para outra
pgina, enviando todas as informaes para a outra pgina. 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:
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" %>

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 momentos, 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.
}
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 o namespace no cdigo fonte: using System.Diagnostics;
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
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("Stefanini")) {
EventLog.CreateEventSource("Log de Eventos", "Stefanini");
}
EventLog log = new EventLog("Stefanini");
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.
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);
}

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

Descrio

RequiredFieldValidator

Verifica se o usurio informou ou no um controle de entrada.

RangeValidator

Verifica se o usurio informou ou no um valor contido no conjunto de nmero,


caracteres ou datas.

CompareValidator

Verifica se o usurio informou ou no um valor de um controle igual ao valor de outro


controle.

RegularExpressionValidator

Valida se o usurio informou um valor de acordo com a expresso regular informada.

CustomValidator

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.

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

ErroMessage
Display
Enabled

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:

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!";
}
}

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:
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 " />

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="stefanini" TagName="Menu" Src="menu.ascx" %>

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.
Para aplicar um tema na sua pgina Web, basta ajustar 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:

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:
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.
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 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.

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.
</i>
</form>

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.

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:

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

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

Data Namespaces
Veja a tabela abaixo com os namespaces do ADO.NET:
Namespaces

Funes
Contm classes fundamentais de compe as funcionalidades do ADO.NET como

System.Data

DataSet, DataTable e etc.


System.Data.OleDb

Contm as classes de conexo e execuo de uma base de dados atravs do OLE DB,
como OleDbConnection, OleDbCommand.

System.Data.SqlClient

Contm as classes de conexo e execuo de uma base do SQL Server verso 7.0 ou
superior, como SQLConnection, SQLCommand.

System.Data.SqlTypes

Contm estrutura dos tipos de dados de uma base SQL Server, desta forma quando for
trabalhar com este tipo de banco, use os tipos deste namespace.

System.Data.OracleClient

Contm as classes de conexo e execuo de uma base do Oracle, como


OracleConnection, OracleCommand.

System.Data.Odbc

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
Command
DataReader
DataAdapter

(SQLConnection, OracleConnection, OleDbConnection, OdbcConnection)


(SQLCommand, OracleCommand, OledDbCommand, OdbcCommand)
(SQLDataReader, OracleDataReader, OleDbDataReader, OdbcDataReader)
(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;
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();
}

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]);
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();
}
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 executa-las, 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();
}
}

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();
}
}

Atualizando um Registro (Insert)


Para adicionar um registro veja o cdigo exemplo abaixo:
private void AtualizandoRegistro(Int16 codigoCliente) {
String insertSQL;
insertSQL = "UPDATE Cliente SET Nome = @Nome, Email = @Email WHERE CodCliente = @CodCliente";
SqlConnection con = new SqlConnection(GetConnectionString());
SqlCommand cmd = new SqlCommand(insertSQL, 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();
}

Atualizando um Registro (Insert)


Para adicionar um registro veja o cdigo exemplo abaixo:
private void ExcluindoRegistro(Int16 codigoCliente) {
String insertSQL;
insertSQL = "DELETE FROM Cliente WHERE CodCliente = @CodCliente";
SqlConnection con = new SqlConnection(GetConnectionString());
SqlCommand cmd = new SqlCommand(insertSQL, 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();
}

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);
}

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();

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;
PageSite = (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>

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}" />

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);

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();

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="Carlos">
<telefone>(31) 8888-8888</telefone>
<email>carlosjunior@brainiac.com.br</email>
</contato>
<contato nome="Jnior">
<telefone>(31) 9999-9999</telefone>
<email>junior@brainiac.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; }
}
}

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();

PARTE IV ASP.NET + AJAX


CAPITULO 16 CRIANDO APLICAES COM INTERFACES RICAS SEM REFRESH

PARTE V 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

Responsabilidades

Apresentao

Provisionamento de servios, exibio de informaes

Negcio

Lgica particular ao sistema

Modelo

Mapeamento lgico das tabelas do banco de dados

Dados

Comunicao com bancos de dados, sistemas de mensagens, monitores de transao

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
Para se manter atualizado com o Mercado e aprender sempre mais acesse :
http://www.devcursos.com.br

Você também pode gostar