Professional Documents
Culture Documents
2009
Carlos Jnior
contato@devcursos.com.br
www.devcursos.com.br
12
13
14
15
FUNDAMENTOS DO ADO.NET...................................................................53
DATA CONTROLS.................................................................................63
FILES E STREAMS.................................................................................66
XML................................................................................................68
............................................................................................................. 70
PARTE V BOAS PRTICAS DE DESENVOLVIMENTO...............................................71
CAPITULO 17 DESENVOLVIMENTO DE SISTEMAS EM CAMADAS.............................................71
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
Sbyte
int
uint
long
ulong
short
ushort
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
Exemplos:
char VarChar = a;
Descrio
Ponto flutuante binrio de 8 bytes
Este tipo tem uma preciso de 15 casas decimais.
float
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;
Descrio
string
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
\a
Alerta
\b
Retrocesso
\f
Avano de pgina
\n
Salto de linha
\r
Retorno de carro
\t
Tabulao horizontal
\v
Tabulao vertical
\uNNNN
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.
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;
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
D ou d
E ou e
F ou f
G ou g
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
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
1, 2, 6, 12, 31
dd
ddd
dddd
Segunda-feira
1, 2, 6, 12
MM
MMM
MMMM
Janeiro, Dezembro
1, 2, 6, 99
yy
yyyy
hh
HH
1, 2, 6, 12
01, 02, 06, 12
1, 2, 9, 13, 15
01, 02, 09, 13, 15
1, 2, 6, 12, 58
mm
1, 2, 3, 16, 59
ss
Separador de tempo
13: 49: 52
Separador de data
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.
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.
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
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).
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
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
App_WebReferences
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.
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:
<input type="text" />
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:
<input type="text" />
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:
<input type="text" ID=textBoxValor runat=server />
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:
<input type="text" ID=textBoxConverter runat=server />
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
Session
Coleo de informaes de um nico usurio e poder ser utilizado por diversas pginas.
Request
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");
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.
Elemento HTML
Label
<span>
Button
TextBox
CheckBox
<input type="checkbox">
RadioButton
<input type="radio">
Hyperlink
<a>
LinkButton
ImageButton
<input type="image">
Image
<img>
ListBox
DropDownList
<select>
CheckBoxList
RadioButtonList
BulletedList
Panel
<div>
Table, TableRow e
TableCell
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.
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
RangeValidator
CompareValidator
RegularExpressionValidator
CustomValidator
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.
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:
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 " />
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:
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.
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.
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:
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
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
System.Data.Odbc
Contm as classes de conexo e execuo de uma base atravs dos ODBC Drives, como
OdbcConnection, OdbcCommand.
Connection
Command
DataReader
DataAdapter
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.
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();
}
}
} finally {
con.Close();
}
} 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);
}
GridView1.DataSource = ds;
GridView1.DataBind();
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}" />
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; }
}
}
Responsabilidades
Apresentao
Negcio
Modelo
Dados
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