Você está na página 1de 42

Apostila

ASP.NET 2.0

com C#

Adenzio Carlos Pereira


adenizio@yahoo.com.br
Sumrio

1 - Conceitos fundamentais sobre Microsoft .NET


O que .NET
.NET Framework
Common Language Runtime (CLR)
Linguagem Intermediria
Jit Compiler
Garbage Collection
Programando sobre HTTP
HTTP Request
GET e POST
ViewState
Estrutura de uma pgina ASP.NET

2 - Viso Geral do VisualStudio 2005


Properties
Solution Explorer
ToolBox
3 - Interface Grfica
Introduo
Propriedades de controles
Manipulao de eventos
Master Pages
Menus
Label, TextoBox, Button, GroupBox e Panel
CheckBox e CheckBoxList
RadioButtonList, ListBox e DropDownListBox
Calendar
4 - Controles de Validao
RequiredFieldValidator
RangeValidator
RegularExpressionValidator
CompareValidator
CustomValidator
ValidationSummary
5 Trabalhando com temas (themes)
Conceito
Criando Skin File
6 - Introduo a linguagem C#
Viso geral
Variveis e Constantes
Tipos de dados
Operadores
Estruturas de controle
7 Programao Orientada a Objetos em C#
Classes
Mtodos
Modificadores de Acesso
Herana
Classe abstrata
Interface
Sobrecarga (Overload)
Sobrescrita (Override)
Encapsulamento
8 - Strings
Join, Split e Length
Remove, Replace, Substring e Concat
Insert, Compare, ToUpper, ToLower
9 - ADO.NET
DataProvider(Sql, OleDb e Oracle)
DbConnection(Sql, OleDb e Oracle)
DbCommand(Sql, OleDb e Oracle)
Insero, atualizao e deleo
Stored Procedures
DataReader
DataAdapter
DataSet
DataView
10 - Formulrios e Controles Web
Cookie
Application e Session
Web.Config
Global.asax
11 - WebServices
O que so
Criando um WebService
Consumindo um WebService
Introduo
O objetivo deste treinamento fornecer um contedo para que voc possa desenvolver
aplicaes em ASP.NET 2.0 com a linguagem C#.
Iremos aprender conceitos e aplic-los em exerccios objetivos para que a partir deste
conhecimento voc possa ter condies de desenvolver habilidades avanadas e posteriormente
construir aplicaes com todos os recursos que o ASP.NET e a linguagem C# oferecem.

Captulo 1

Conceitos fundamentais sobre Microsoft .NET

O que .NET: a tecnologia da Microsoft para conectar informao, pessoas, sistemas, e


dispositivos atravs de software. Integrada atravs da plataforma Microsoft, a tecnologia .NET fornece
a habilidade de rapidamente construir, instalar, gerenciar e conectar solues com segurana em
servios Web. As solues .NET permitem negcios para integrar seus sistemas mais rapidamente e
de uma maneira mais gil ajudar a realizar a promessa da informao, em qualquer lugar, a qualquer
momento e em qualquer dispositivo.

impossvel falar em .Net sem falar em SOA. (Service Oriented Architecture) ou


(Arquitetura orientada a servio). A idia da Microsoft exatamente unir vrias linguagens de
programao em uma mesma plataforma. Todo o design da aplicao feito usando-se recursos da
Framework e independente de linguagem. As regras de negcio so definidas ento em uma
linguagem compatvel com a Framework.

.NET Framework: O .Net Framework uma infra-estrutura para toda a plataforma .NET. Isto
inclui bibliotecas de classe base, como ADO.NET e ASP.NET, assim como a CLR.
um ambiente para construo, implantao e execuo de aplicaes. O ASP.NET faz parte
deste ambiente e utilizado para desenvolvimento de aplicaes Web. O ASP.NET gera cdigo HTML
e Javascript que so adaptados para serem visualizados em todos os browsers.
O .NET Framework se divide em 3 partes: CLR(Common Language Runtime, as classes
Framework, FCL(Framework Class Library) e ASP.NET.

Common Language Runtime (CLR): o mecanismo responsvel pela execuo das


aplicaes .NET Framework. Para que voc possa desenvolver em uma linguagem usando os
recursos do .NET Framework, esta linguagem dever suportar a CLR pois o compilador gerar um
cdigo para o suporte CLR. Este cdigo chamado cdigo gerenciado.
Veja algumas funes da CLR:
Gerenciamento automtico de memria;
Verificao de segurana de tipos;
Gerenciamento de excees;
Acesso a Metadados.

Linguagem Intermediria: O compilador no gera cdigo nativo, mas Linguagem


Intermediria (IL).
IL independente de plataforma, assim s precisamos de um compilador para converter cdigo
IL em cdigo nativo na mquina-alvo.
JIT Compiler: Compila o IL em cdigo nativo na primeira vez que o cdigo executado.
importante citar que a compilao no acontece em todo a classe mas sim no mtodo que chamado.
Sendo assim, se for chamado apenas um mtodo em uma classe de 50 mtodos, somente este
mtodo ser compilado. Da prxima vez que o mtodo for chamado, j estar compilado em cdigo
nativo desta forma a aplicao ser executada mais rapidamente. Este o grande diferencial entre
linguagens como ASP, PHP, JSP entre outras que no so compiladas mas sim interpretadas.
Garbage Collection: Mecanismo que descarta de forma automtica os objetos que no so
mais utilizados por uma aplicao. Quando a CLR no encontra memria livre suficiente para atender
uma solicitao de um aplicativo, a mesma inicia uma coleta de lixo(garbage collection) na esperana
de reaver reas de memria ocupadas pr objetos que porventura no estejam mais sendo utilizados.

Programando sobre HTTP: Web Forms se comunicam com os servidores web atravs do
protocolo HTTP que trafega sobre uma conexo TCP (Transmission Control Protocol).

Comparando os modelos Windows Forms e Web Forms na Framework .NET.

HTTP Request: Quando digitamos um endereo no browser, ele usa um servidor DNS para
transformar o nome do domnio em um endereo IP. Depois o browser se conecta porta 80 do
endereo.

GET e POST: Os comandos HTTP mais usados so GET e POST. O GET retm qualquer
informao identificada pelo request da URL. O POST usado para solicitar que o servidor de origem
aceite o contedo no request e processe-o. O POST usado usado tipicamente para prover um bloco
de dados a um processo manipulador de dados, ou seja, o resultado de um submit em um form.

View State: Pginas ASP.NET fornecem a propriedade ViewState para permitir s aplicaes
uma chamada de contexto e reter os valores atravs de 2 chamadas sucessivas para a mesma
pgina. O ViewState representa o estado da pgina quando foi processada por ltimo no servidor. O
estado persistido usualmente, mas no necessariamente, no lado cliente e restaurado antes da
requisio da pgina ser processada.

Estrutura de uma pgina ASP.NET: Uma pgina ASP.NET um arquivo de texto no lado
servidor com a extenso .aspx. A estrutura interna da pgina extremamente modular e compreende
trs sesses distintas.
Diretivas de pgina: Configuram o ambiente no qual a pgina ir rodar, especifica
como o HTTP processar a pgina, e determina quais os pressupostos sobre a pgina so seguros
para fazer. Alm de permitir importar namespaces, carregar assemblies, e registrar novos controles.
Sesso de cdigo: Contm manipuladores para a pgina e eventos de controles, mais
rotinas opcionais.
Layout de pgina: Representa o esqueleto de uma pgina. Isto inclui server controls,
textos literais a tags HTML.
Captulo 2
Viso Geral do Visual Studio 2005

O Visual Studio 2005 uma IDE desenvolvida pela Microsoft para desenvolver sites e
aplicaes usando a tecnologia .NET com todos os recursos da plataforma .NET Framework.

Exemplo de uma pgina usando o VisualStudio 2005.

esquerda temos a paleta toolbox que contm os principais componentes para


desenvolvimento da aplicao. direita na parte superior temos a aba Solution Explorer e abaixo a
aba Properties.
Seleo de componente: Aqui voc pode selecionar o componente ao qual deseja alterar as
propriedades e eventos.
cone de eventos: Ao clicar neste cone a janela altera para os eventos do componente.
Conforme desenho a direita.
cone de propriedades: Ao clicar neste cone a janela altera para as propriedades do
componente. Conforme desenho acima.
cone de ordem alfabtica: Ordena as propriedades por ordem alfabtica.
cone de categorias: Organiza as propriedades por categoria.
Propriedade: Define qual propriedade do componente estamos alterando.
Valor atual: Valor corrente da propriedade.
Descrio: Breve descrio da propriedade selecionada.

Na prxima figura temos a parte na qual desenvolvemos o design do site. Neste parte podemos
arrastar os componentes da toolbox e se alterarmos a opo CSS positioning para Absolutely
positioned podemos posicionar os componentes com o mouse. Se esta opo estiver desativada o
componente ser colado ao lado o ltimo.
Para editar propriedades como nome, texto, cores entre outros, basta selecion-los neste rea
e alterar as propriedades na paleta Properties.
Na parte inferior temos a opo Source. Aqui ns temos o cdigo HTML gerado pelo
WebDeveloper quando arrastamos e configuramos os componentes. Se voc tiver conhecimentos de
HTML e quiser alterar ou criar algum componente tem toda liberdade nesta rea.
Em ASP.NET diferentemente de outras linguagens, o cdigo HTML fica em um arquivo
separado do arquivo com o cdigo da linguagem escolhida. Se observar o desenho anterior ver que
existem 2 abas sendo uma Default.aspx e outra Default.aspx.cs que no caso o arquivo que contm o
cdigo C# desta pgina.

Abaixo temos a paleta Solution Explorer onde podemos visualizar e gerenciar a aplicao. A
partir desta paleta podemos adicionar, renomear e remover arquivos e referncias.

ASP.NET Configuration: Abre o site para configurao do ASP.NET.


Copy Web Site: Abre uma janela para que voc faa o deployment da aplicao sendo que do
lado esquerdo aparecero os arquivos de origem e a direita os arquivos no servidor Web para onde
ser feita a atualizao.
View Designer: Se voc estiver com o arquivo de cdigo aberto (aspx.cs), ao clicar neste boto
ser aberto o arquivo com o designer (aspx).
View Code: Este boto o inverso do anterior, ou seja, abrir o arquivo aspx.cs quando estiver
com o arquivo aspx.
Nest Related File: Aninhar arquivos relacionados. O arquivo aspx.cs ficar indentado abaixo do
arquivo aspx. Como o desenho anterior, observe que existe um sina de menos ao lado do arquivo
Default.aspx e o arquivo Default.aspx.cs est abaixo. Se clicarmos neste sinal o arquivo
Default.aspx.cs ir desaparecer e mudar o sinal para mais.
Refresh: Atualiza a listagem dos arquivos.
Properties: Abre a paleta Properties.
Para finalizar temos a paleta ToolBox que onde encontramos os componentes que sero inseridos
em nossa pgina. Basicamente a ToolBox dividida em:

Standard: Onde esto os componentes padres e que so mais utilizados, como Label,
TextBox, Button, CheckBox, etc.
Data: Aqui ficam os componentes relacionados a dados. Componentes de conexo e
DataControls como GridView e DetailsView que veremos no captulo 6.
Validation: Aqui ficam os componentes de validao do formulrio que veremos no captulo 8.
Navigation: Aqui ficam componentes de navegao como o Menu que veremos no captulo 3.
Login: Nesta parte temos toda uma estrutura montada para criao e manuteno de login na
aplicao que veremos no captulo 7.
WebParts: Voc consegue criar diferentes zonas com controles e disponibiliz-las ao internauta
para customizar a exibio do layout dos sites. Com isso, cada internauta pode ter um visual
diferenciado. No ser abordado em nosso curso.
HTML: Componentes html.
General: Aqui ns podemos colocar componentes e scripts criados por ns.
Captulo 3
Interface Grfica

Introduo: A interface grfica permite que um usurio interaja com um programa visualmente.
So menus, botes, caixas de texto, listas entre outros. Atravs da interface grfica podemos capturar
as aes do usurio, processar os dados e retornar a informao processada.

Propriedades de controles: Quando nos referimos a um carro por exemplo, dizemos que ele
possui algumas propriedades como marca, modelo, cor, motorizao entre outras. Com os controle
no diferente. Os botes por exemplo, possuem nome, texto, cor, bordas e assim acontece com
cada controle da interface grfica.

Manipulao de eventos: Quando o usurio executa alguma ao em um controle podemos


capturar esta ao e executar alguns comandos. Por exemplo quando clica em um boto podemos
fazer o cdigo para insero de dados em um banco de dados. como o exemplo do carro. Ele possui
alguns eventos como acelerar, frear, mudar a marcha, entre outros. No decorrer do curso mostraremos
alguns eventos de componentes.

Master Pages: Nas verses anteriores do ASP.NET bem como em outras linguagens como
ASP, PHP e JSP, sempre que desejamos repetir um cabealho em todas as pginas da nossa
aplicao tnhamos que usar um include para adicionar este cabealho em cada pgina, mas no
tnhamos relacionamento entre o cabealho e a pgina. Na verses anteriores do ASP.NET j existia
um recurso que permanece na verso atual chamado Web User Control mas na verso 2.0 foi criado
um novo recurso chamado Master Page. Com o Master Page passamos a interagir entre o cabealho
e a pgina e obtivemos vrias melhorias.
Para criar uma Master Page v at a Solution Explore e clique com o boto direito sobre o
caminho da aplicao, no menu suspenso que aparecer escolha Add New Item... e aparecer uma
janela com os tipos possveis. Escolha Master Page, defina um nome para o arquivo, para a linguagem
escolha C# e marque a opo Place code in separate file. Esta opo far com que ele gere um
arquivo separado para o cdigo C#. Depois s clicar em Add.
Ser criado um arquivo com Default.master. Repare que ele possui um objeto chamado
ContentPlaceHolder. Tudo o que voc criar fora deste objeto ser replicado em cada pgina que usar
esta Master Page. Portanto voc pode colocar a logomarca, o nome da empresa, um menu, enfim
aquilo que voc desejar que esteja nas pginas da sua aplicao.

Como uma pgina html s tem uma tag body, significa que as pginas criadas dentro do
MasterPage no tero a tag body visto que a MasterPage j a possui. Se observarmos o cdigo aspx
gerado pela pgina filha, poderemos confirmar isto.
Mas como poderamos ento definir atributos especficos de uma pgina visto que os atributos
da pgina esto definidos na MasterPage?

Para fazermos isto devemos na MasterPage definir a tag body como runat=server e
definirmos um id. Nas pginas filhas devemos criar um objeto do tipo HtmlGenericControl com o
mesmo nome da tag body.
Dentro do evento PageLoad podemos definir os atributos da seguinte forma:

this.corpo.Attibutes.Add("bgcolor", "#eeeeee"); //corpo o nome do objeto.

Menus: Todos ns estamos familiarizados com menus. Desde um editor de texto como o Word,
ou um gerenciador de arquivos como o Windows Explorer usam menus. No ASP.NET 2.0 muito fcil
criar um menu. Na toolbox na aba Navigation existe um componente Menu. Podemos arrast-lo para
nosso arquivo Default.master e configur-lo conforme desejamos. Para comear vamos clicar em Auto
Format e escolher um formato que nos agrade. Clique em Edit Menu Itens e vamos adicionar os itens
do menu. Clique no primeiro boto e ser criado um item. Mude a propriedade Text para Cadastro.
Com este item selecionado clique no segundo boto e vamos adicionar um sub-item. Nas
propriedades vamos preencher a opo NavigateUrl com o texto cad_funcionario.aspx e a propriedade
Text com Funcionrios. Podemos adicionar quantos itens quisermos e indent-los conforme a
necessidade da aplicao. Quando concluir clique no boto OK. Voltando ao design clique no menu e
vamos na paleta Properties e vamos mudar a propriedade Orientation para horizontal. Pronto nossa
aplicao j possui um menu e podemos voltar aqui quando quisermos alter-lo.

Label: um rtulo que colocamos em objetos que usaremos nas pginas. Para alterar o texto
basta selecionar o Label e na paleta Properties muda a propriedade Text para o texto que queremos.
Podemos configurar vrias propriedade como tipo da fonte, tamanho, cor entre outras.

lblExemplo.Text = "Teste"; // Em tempo de execuo.

TextBox: uma caixa de texto na qual o usurio fornece dados a partir do teclado. Pode exibir
tambm informaes fornecidas pela aplicao. Assim como Label, possui vrias propriedades entre
elas temos TextMode que pode ser SingleLine, MultiLine e Password sendo que na ltima ao invs de
aparecer o texto digitado, aparecem asteriscos (*) por se tratar de uma senha.

txtExemplo.Text = "Teste"; // Em tempo de execuo.

Button: Um rea que chama um evento quando clicada. Tambm possui vrias propriedades
que podem ser alteradas na paleta Properties bem como em tempo de execuo. Existem outros tipos
de botes que veremos mais adiante.

btnExemplo.Text = "Teste"; // Em tempo de execuo.


Panel: Um continer no qual podem ser colocados componentes. A vantagem em se usar um
Panel que todos os componentes que estiverem contidos nele sero movimentados juntamente com
ele.

CheckBox: Caixa de seleo. Um controle que est ou no selecionado. Um CheckBox


utilizado normalmente quando voc fornece um opo ao usurio para que possa escolher se deseja
ou no marca esta opo. Os parmetros principais so:
Checked que pode ser true quando selecionado e false quando no selecionado
Text que o texto que aparecer direita da caixa.
E o evento CheckedChanged que disparado quando o usurio seleciona o CheckBox.

if (ckbExemplo.Checked) // Em tempo de execuo.

CheckBoxList: Lista de caixas de seleo. Semelhante ao CheckBox, a diferena que aqui


temos uma lista indexada e podemos identificar o itens selecionados atravs do ndice.

for (int i = 0; i < cblExemplo.Items.Count; i++)


if (cblExemplo.Item[i].Selected)
...

ListBox: Caixa de lista. Uma rea na qual uma lista de itens exibida, E o usurio pode fazer
uma seleo clicando uma vez em qualquer elemento. Vrios elementos podem ser selecionados se
setarmos a propriedade SelectionMode para Multiple.

lbxExemplo.SelectedValue;
lbxExemplo.SelectedIndex;
lbxExemplo.SelectedItem;

RadioButtonList: Uma lista de botes do tipo radio. Somente uma opo poder ser escolhida
por vez. Com isto, se selecionarmos a opo So Paulo no exemplo abaixo, automaticamente a opo
Belo Horizonte ser desmarcada. Para identificarmos qual a opo escolhida podemos usar as
propriedades SelectedIndex ou SelectedItem onde temos Value, Text entre outras.

rblExemplo.SelectedValue;
rblExemplo.SelectedIndex;
rblExemplo.SelectedItem;

DropDownListBox: Caixa de combinao. Uma lista suspensa de itens na qual o usurio pode
fazer uma seleo clicando em um item da lista ou digitando na caixa, se for permitido. Para
identificarmos qual a opo escolhida podemos usar as propriedades SelectedIndex ou SelectedItem
onde temos Value, Text entre outras.
ddlExemplo.SelectedValue;
ddlExemplo.SelectedIndex;
ddlExemplo.SelectedItem;

Calendar: Um calendrio onde normalmente inicializamos com o objeto oculto, ao clique de um


boto o exibimos para que o usurio selecione uma data, permitindo que navegue nos meses e anos e
no evento SelectionChanged verificamos a data selecionada atravs da propriedade SelectedDate.

protected void cldDataIni_SelectionChanged(object sender, EventArgs e)


{
txtExemplo.Text = cldDataIni.SelectedDate.ToString("dd/MM/yyyy");
}
Captulo 4
Controles de Validao

Para quem j est acostumado com o desenvolvimento web sabe o quanto importante a
validao de dados antes que seja feita uma requisio ao servidor. Para isto criamos funes
JavaScript para atender s validaes dos componentes de data, e-mail, etc.
Agora com ASP.NET isto muito fcil de ser feito apenas arrastando os componentes e
configurando-os na paleta Properties.
Neste captulo vamos falar de cada um e veremos como ficou fcil e prtico validar
componentes no cliente.

RequiredFieldValidator: Para comear vamos falar do RequiredFieldValidator que talvez seja o mais
usado. A traduo Validador de campo requerido. Com este componente podemos verificar se um
determinado campo est ou no preenchido. Isto muito comum quando temos por exemplo a
exigncia do preenchimento de uma data ou e-mail ou CPF, etc.
Para us-lo basta arrast-lo para a tela e configurar a propriedade ControlToValidade com o
nome do controle requerido. Podemos tambm digitar o texto que ser exibida no validator pela
propriedade Text. Posteriormente veremos tambm que o texto na propriedade ErrorMessage poder
ser exibido ao usurio.
Com a propriedade SetFocusOnError determinado que o cursor ser posicionado no campo
caso este no esteja preenchido.
Posteriormente veremos a funo da propriedade Display.

RangeValidator: um validador de escala, isto quer dizer que podemos colocar uma escala ou limites
para os valores de um componente.
Imagine que voc tenha um campo onde o usurio tenha que colocar a idade. Um valor menor
que 0 ou maior que 130 invlido. Entra em ao ento o RangeValidador.
Na propriedade ControlToValidate definimos o componente que ser validado.
Para definirmos os valores ou a escala permitida devemos preencher as propriedades
MaximumValue e MinimumValue. No exemplo anterior temos MinimumValue=0 e MaximumValue=
130.
Podemos tambm digitar o texto que ser exibido no validator pela propriedade Text.
Posteriormente veremos tambm que o texto na propriedade ErrorMessage poder ser exibido para o
usurio.
Com a propriedade SetFocusOnError determinamos que o cursor ser posicionado no campo
caso este esteja fora da escala.
Posteriormente veremos a funo da propriedade Display.
RegularExpressionValidator: um validador de expresses pr-definidas pelo desenvolvedor.
Quando queremos validar expresses que pode seguem determinados formatos ou mscaras
especficos. Como exemplo temos telefone, CEP, Ur, etc.
O RegularExpressionValidador tem as mesmas propriedades do RangeValidator com excesso
do MaximumValue e MinimumValue e com o acrscimo da propriedade ValidationExpression.
atravs desta propriedade que definimos a mscara ou expresso que ser exigida no campo
validado.
Se clicarmos no boto correspondente a esta propriedade na paleta Properties veremos que j
esto disponveis algumas expresses.

CompareValidator: um validador de comparao. Quando disponibilizamos 2 componentes para o


usurio selecionar um perodo de datas precisamos validar se a data inicial no maior que a data
final.
O CompareValidator faz este papel.
Atravs da propriedade ControlToCompare e da propriedade ControlToValidate determinamos
os componentes envolvidos na comparao sendo ControlToValidade o componente que dever
atender s exigncias configuradas.
Aps definirmos os componentes devemos usar a propriedade Operator para selecionar o tipo
de comparao que dever ser feita podendo ser Equal(igual), NotEqual(diferente),
GreatherThan(maior que), LessThan(Menor que), DataTypeCheck, etc.
Podemos especificar um valor a ser comparado em ValueToCompare, porm se
especificarmos tambm um ControlToValidate o segundo ser usado e o ValueToCompare ignorado.

CustomValidator: As vezes queremos criar uma funo para que faa validaes que no esto
disponveis em nenhum componente Validator. Para isto usamos o CustomValidator.
Atravs da propriedade ClientValidationFunction definimos uma client script validation function.

ValidationSummary: O ltimo componente de validao o ValidationSummary. Atravs deste


componente podemos agrupar as mensagens em um mesmo local.
Quando usamos os validators e preenchemos a propriedade Text, o texto digitado exibido no
prprio validator, mas quando preenchemos a propriedade ErrorMessage o texto exibido no
ValidationSummary. Sendo assim, podemos colocar um asterisco(*) na propriedade Text do validator e
um texto para o erro em si na propriedade ErrorMessage.
O ValidationSummary tem duas propriedades muito importantes que so ShowMessageBox e
ShowSummary.
A primeira define se ser exibida uma caixa de mensagem com os ErrorMessages e a segunda
se os erros sero exibidos no prprio ValidationSummary. Podemos deixar as duas como true e os
erros sero exibidos nas duas formas, mas voc certamente escolher apenas uma.
Ficamos de explicar a funo da propriedade Display dos validators. Pois bem, esta
propriedade define se o a exibio do validator ser Static, Dynamic ou None. Se deixarmos Static o
texto ser exibido na pgina, porm se mudarmos para None s exibiremos a ErrorMessage no
ValidationSummary.
Outra propriedade importante do ValidationSummary DisplayMode. Se escolhermos List, os erros
sero exibidos como uma lista. Para BulletList teremos uma lista com uma bola ao lado e se
escolhermos SingleParagraph teremos um pargrafo nico com os erros concatenados na mesma
linha.
Captulo 5
Trabalhando com temas (themes)

Conceito: Se voc j est acostumado com o desenvolvimento para ambientes web, ento j
deve ter trabalhado com arquivos CSS. Eles so usados para definir padres de cores, fontes, bordas,
etc. de websites que mesmo podendo ser selecionados programaticamente no servidor, em seu
ncleo o CSS continua a ser uma tecnologia do lado cliente, consebida e implementada para aplicar
skins a elementos HTML.
Agora no Asp.NET podemos trabalhar com um novo conceito chamado theme. Um theme
(tema) composto por arquivos skin, imagens e arquivos CSS.
Imagine voc poder definir propriedades como cr, fonte, fundo, borda e ao arrastar um boto
ou qualquer controle em sua pgina ele tome a forma que voc j predefiniu sem que voc tenha que
ficar mudando estes atributos. Este o objetivo de trabalhar com themes.

Tela para adicionar um novo arquivo do tipo Skin File

Criando um Skin File: Para adicionar um novo skin file clique com o boto direito do mouse
sobre o projeto na SolutionExplorer e depois em Add new item. Quando aparecer uma tela semelhante
tela acima, selecione Skin File e d um nome ao arquivo. Clique em Add.
Se for a primeira vez que estiver adicionado um arquivo de skin voc receber uma mensagem
de que o arquivo deve ser criado em uma pasta especfica chamada App_Themes. Selecione Sim e
ser criada esta pasta em sua aplicao juntamente com o arquivo skin.
Crie um arquivo do tipo WebForm em sua aplicao e d qualquer nome a ele. Depois iremos
remov-lo. Arraste vrios objetos para este arquivo aspx que acabamos de criar e defina as
propriedades de cada objeto como voc deseja que fica seu website. Por exemplo, coloque em um
boto a cr de fundo, o nome e o tamanho da fonte, a cr e o tamanho da borda, etc. Faa o mesmo
em todos objetos com TextBox, Calendar, RadioButtonList, CheckBoxList, DropDownList, etc.
Mude a visualizao para Source e veremos o cdigo asp. Selecione todo o texto, copie e cole
no arquivo skin. Como o skin um arquivo de configurao para todos os objetos da pgina no
podemos deixar a propriedade Id nos objetos. Ento remova a propriedade Id de todos os objetos
colados no arquivo skin.
Agora podemos excluir o arquivo aspx que criamos anteriormente. Salve o arquivo skin e abra
um arquivo aspx qualquer. Na paleta properties selecione o DOCUMENT e na propriedade
StyleSheetTheme selecione o arquivo de skin que voc criou.

Paleta Properties

Agora basta selecionar na ToolBox um objeto que voc j configurou previamente e ele
automaticamente receber a formatao definida.
Voc pode ainda definir mais de uma configurao para o mesmo tipo de objeto. Imagine que
voc deseja ter uma configurao para Labels de ttulo e outra para Labels de campos. Para isso
basta criar duas tags <asp:Label no arquivo skin e definir a propriedade skinId para cada label. No
arquivo aspx devemos ento definir qual skinId iremos aplicar ao labe que estamos editando. Se voc
tiver uma formatao que use com mais freqncia ento deixe-a sem skinId e ela ser selecionada
automaticamente sem que precise ficar definindo manualmente.
Captulo 6
Introduo linguagem C#

Viso Geral: O C# a fase seguinte na evoluo C e C++ e foi desenvolvido expressamente


para a plataforma .NET da Microsoft. impossvel no citar que existe uma grande semelhana com a
linguagem Java da Sun.
O C# uma linguagem orientada a objetos, sendo assim possui todas as caractersticas como
Herana, Polimorfismo, Encapsulamento, Sobrecarga de mtodos entre outras.
Outra caracterstica importante que o C# case sensitive, ou seja, as letras maisculas se
diferem das minsculas. Nesta caso a varivel Nome diferente de nome.

Variveis: Vamos comear falando das variveis. Ao contrrio do que acontece em ASP com
VBScript, as variveis precisam ser declaradas com seus respectivos tipos, mas ao contrrio do
Delphi, no precisam ser declaradas em locais especficos.
Podemos declarar uma varivel ao criarmos um lao for, por exemplo.

Sintaxe: tipo nome = [valor]; string sEndereco = Rua Jos Geraldo;


Onde tipo pode ser int, string, float, decimal, etc;
Nome pode ser um nome qualquer para identificar a varivel;
[valor] o valor que a varivel recebe no momento de criao sendo que no
obrigatrio podendo ser definido ou alterado posteriormente.

Constantes: So valores que sero armazenados em memria para ser aproveitados


posteriormente. Ao contrrio das variveis, constantes devem ter um valor definido no momento de
criao e no podem ser alteradas depois.

Tipos de Dados: No C# temos vrios tipos de dados divididos em classes.

Decimal: Formato muito exato com preciso de 28 casas decimais.


Ex.: decimal moeda = 3,10M;

Char: Um nico caracter.


Ex.: char teste = 'T';

Bool: Valor verdadeiro ou falso.


Ex.: bool existe = true;

Ponto flutuante float


Float: Preciso de 7 dgitos.
Ex.: float valor = 1.34567;
Double: Preciso de 16 dgitos.
Ex.: double valor = 1.34567890123456;

Byte: Valor entre 0 e 255;


Ex.: byte teste = 18;
Long: Inteiro de 64 bits com sinal. Valores entre 9,223,372,036,854,775,808 a
9,223,372,036,854,775,807.
Ex.: long valor = 405801;

Inteiro: Um inteiro possui 32 bits com valores entre 2,147,483,648 a 2,147,483,647;


Ex.: int valor = 10;

Short: Inteiro de bits com sinal. Valores entre 32,768 a 32,767.


Ex.: short valor = 15;
String: O mais usado visto que todas as variveis que no usam nmero so declaradas como
string.
Ex.: string teste = "texto de teste";

Para concatenar uma string use o sinal de + (mais).

Para extrair basta colocar a posio do caracter. char s = teste[3];

Array: Coleo de elementos armazenados em seqncia. O primeiro elemento contm o


ndice 0.
Ex.: int[] teste = new int[6] { 23, 10, 87, 16, 99, 5 };
string[] teste = new string[3] {"Adenzio","Carlos","Pereira"};

int[,] num = new int[2, 3] { { 2, 5, 1 }, { 19, 32, 4 } };

Operadores
Unrios: + - ! ++x --x x++ x
Aritmticos: * / % + -
Relacional: <> <= >= is
Igualdade: == !=
E condicional: &&
OU condicional: ||

Estrutura de controle

If: Com certeza a instruo mais utilizada e presente em praticamente todas as linguagens.
utilizada para testar um condio e executar um ou vrios comandos se a condio for satisfeita. Pode
ser utilizado com a instruo else para que se a condio no for satisfeita executar outros comandos.
Sintaxe:

if (condio) {
//Executa comandos

} // Se a condio no for verdadeira no far nada.

if (condio) {
//Executa comandos

}
else {
//Executa comandos
} // Se a condio no for verdadeira executa comandos dentre do else.

Switch: Em determinadas situaes testar tudo com if pode ser cansativo, neste caso
utilizamos o switch.
Sintaxe:

switch (expresso)
{
case constante - expresso:
//Executa comandos;
break;
case constante - expresso:
//Executa comandos;
break;
default:
//Executa comandos;
break;
}
Ex.: Suponhamos que voc tenha um comboBox onde o usurio define seu estado civil e temos
os valores: 0 : Solteiro; 1 Casado; 2 Vivo; 3 Divorciado. Teramos o cdigo:

switch (varEstadoCivil)
{
case 0:
//Cdigo para quem solteiro;
break; // Interrompe o lao caso a condio seja verdadeira.
case 1:
//Cdigo para quem casado;
break;
case 2:
//Cdigo para quem vivo;
break;
case 3:
//Cdigo para quem divorciado;
break;
default:
//Cdigo para outros.
break;
}

While: Executar um ou mais comandos at que a condio no seja mais satisfeita.


Sintaxe:

while (condio)
{
//Executa comandos;
}

Ex.:
int x = 0;
while (x < 10)
{
//Executa comandos;
x++;
}

Do while: Diferentemente do while que s executar os comandos se a condio for


verdadeira, o do while executar pelo menos uma vez os comandos independentemente da condio
ser verdadeira ou no.

Sintaxe:

do
{
//Executa comandos;
}
while (condio);

For: Utilizada para percorrer um determinado nmero de registros ou itens sendo que voc
deve saber exatamente quantos registros deve percorrer.
Sintaxe:

for (inicializador; condio; repetidor)


{
//Executa comandos;
}
Ex.:
for (int i = 0; i < 10; i++)
{
//Executa comandos;
}

Foreach: Utilizado para enumerar itens de um array ou coleo.


Sintaxe:

foreach (TipodeDados NomedaVarivel in NomeArray / NomeColeo)


{
//Executa comandos;
}

int par = 0, impar = 0;


int[] numeros = new int[] {1,2,4,4,9,3,6}

foreach (int i in numeros)


{
if (i%2 == 0)
par++;
else
impar++;
}
Captulo 7
Programao Orientada a Objetos em C#

Classes: A classe um modelo para um objeto; ela descreve a estrutura bsica do objeto.
Uma analogia para entendermos classe e objeto considerar esses conceitos em termos de casas e
da construo delas. A classe seria o projeto para a casa, e a casa propriamente dita seria um objeto.
Muitas casas poderiam ser criadas com base no mesmo projeto, e muitos objetos podem ser gerados
com base na mesma classe. A maneira de instanciar uma classe usando-se a palavra-chave new.
Classes so compostas de mtodos e atributos que podem ser privados, pblicos ou
protegidos.

using System;
using System.Data;

namespace prjTeste {

public class Veiculo {

// aqui so declarados os atributos


private double dblVelAceleracao;

// construtor
public Veiculo()
{
}

// mtodos
public double getAceleracao() {
return dblVelAceleracao;
}
}
}

Mtodos: Todas as funes so declaradas no contexto de uma classe, portanto so mtodos.


Todo mtodo tem um tipo de retorno, e caso no tenha, deve ser usada a palavra void. possvel
passar parmetros para os mtodos, colocando-os entre parnteses separados por vrgulas.
O cabealho do mtodo main definido da seguinte forma:

public static void main(String[] args)

public: O mtodo pblico e pode ser acessado por qualquer outro mtodo ou classe.
static: Significa que no necessrio instanciar a classe para se usar o mtodo pois este
mtodo no est aplicado a objeto algum.
void: O tipo de retorno que pode ser int, string, double entre outros. Void significa que no h
retorno de dados. Quando retornamos valores devemos usar return valor.
main: O nome do mtodo. Quando criamos mtodos devemos colocar nomes explicativos. Por
exemplo se criamos uma funo para calcular salrio devemos colocar algo como CalculaSalario.
String[] args: Aqui so colocados os parmetros que sero utilizados dentro do mtodo.
Obviamente podemos utilizar outros tipos alm de string como int, double, float entre outros.
Quando utilizamos a palavra ref antes do parmetro significa que o estamos passando por
referncia, ou seja, se o valor deste parmetro for alterado dentro do mtodo, tambm ser alterado
em toda a aplicao. Quando no usamos ref e colocamos apenas o tipo e o nome do parmetro, o
valor ser alterado somente dentro do mtodo.

Modificadores de Acesso: Definem a visibilidade dos membros para o mundo externo


classe e s classes derivadas. Veja o quadro abaixo com os principais modificadores de acesso.
Modificador de Acesso Mundo Externo Classe Classe Derivada
Public Sim Sim
Protected No Sim
Private No No

Herana: Quando criamos a classe Veiculo definimos somente o atributo velAceleracao que
comum todo veculo. Porm se comearmos a especificar um pouco mais um veculo, podemos
perceber que ele pode ou no possuir um motor. Poderamos ento criar a classe VeiculoAutomotor.
Graa herana podemos reaproveitar os atributos e os mtodos da classe Veiculo, sendo necessrio
apenas definir na criao de nossa classe que ele herda da classe Veiculo.
Entendemos ento que herana a possibilidade de usarmos recursos criados em outras
classes e a partir desta classe que chamando de base criarmos novos atributos e mtodos.
Uma grande vantagem da herana em .Net que podemos herdar classes escritas em outras
linguagens, ou seja, podemos herdar em uma classe C# outra classe em VB.Net ou J#, etc.

using System;
using System.Data; ...

namespace prjTeste {
public class VeiculoAutomotor : Veiculo {
// novos atributos

// novos mtodos
}
}

Classe abstrata: s vezes podemos definir o cabealho de um mtodo mas no implement-lo


na classe que est sendo criada. Ento quando alguma classe herdar esta classe pai, ter que fazer a
implementao deste mtodo. Este tipo de classe chamado classe abstrata. Por ser uma classe
abstrata no pode ser implementada, ou seja, no correto criar um objeto de uma classe abstrata j
que existem mtodos que no foram instanciados. Por exemplo, temos uma classe funcionrio onde
definimos alguns mtodos que so comuns a todos funcionrios como cadastra dados pessoais,
define funo, etc. Mas existem mtodos que pode mudar de acordo com o funcionrio. Ele pode ser
por exemplo horista ou mensalista e neste caso o clculo do salrio diferenciado.

public abstract class Funcionario{


}

Interface: Uma interface poderia ser definida como uma classe abstrata onde todos os
mtodos so abstratos se no fosse o fato de que uma classe filha no herda uma interface mas na
verdade a implementa. Sendo assim uma classe filha pode implementar vrias interfaces ao passo
que s pode herdar uma classe. Uma interface funciona como um contrato onde a classe
implementadora ter que cumprir ou implementar os mtodos da interface. Por exemplo,
comportamentos de um veculo incluem acelerar, frear, virar direita, virar esquerda. Mas podemos
ter veculos que fazem esta mesma funo de uma forma diferente.
Algumas diferenas entre classes abstratas e interfaces so listadas abaixo:

Classes abstratas podem conter algumas implementaes. Interfaces no tm implementaes;


Classes abstratas podem herdar outras classes e interfaces. Interface s pode herdar outra
interface;
Classes abstratas possuem construtores e destrutores. Interfaces no possuem nenhum dos dois.

Sobrecarga de mtodos: s vezes, voc cria vrios mtodos que realizam funes muito
prximas sob diferentes condies. Por exemplo, imagine mtodos que calculem a rea de um
tringulo. Um mtodo poderia tomar as coordenadas cartesianas dos trs vrtices, e um outro poderia
tomar as coordenadas polares. Um terceiro mtodo poderia tomar os comprimentos de todos os trs
lados, enquanto um quarto poderia tomar trs ngulos e o comprimento de um lado. Todos esses
mtodos poderiam realizar a mesma funo essencial, e assim, inteiramente apropriado usar o
mesmo nome para os mtodos sendo que a seqncia e o tipo de parmetros definem qual mtodo
usar.

public void areaTriangulo(int vert1x, int vert1y, int vert2x, int vert2y,
int vert3x, int vert3y);
public void areaTriangulo(int polar1x, int polar1y, int polar2x, int polar2y);
public void areaTriangulo(int comp1, int comp2, int comp3);
public void areaTriangulo(double ang1, double ang2, double ang3, int comp1);

Sobrescrita de mtodos: Quando herdamos uma classe podemos reescrever um mtodo que
foi implementado na classe base. Por exemplo um mtodo implementado na classe Veiculo pode ser
reescrito na classe VeiculoAutomotor mas para isto o mtodo precisa ser criado com o atributo virtual.
Ento entendemos que podemos garantir que uma mtodo no ser reescrito na classe que herdar
nossa classe apenas no definindo o mtodo como virtual, ou vice-versa.

public class Veiculo {


public virtual float getAceleracao() {
//cdigo
}
}

public class VeiculoAutomotivo : Veiculo {


public override float getAceleracao() {
//novo cdigo
}
}

Encapsulamento: fcil entendermos encapsulamento se pensarmos que o objetivo de uma


cpsula proteger e impedir que um objeto seja visto ou modificado fora dela. Quando definimos um
atributo ou mtodo como private, impedimos que seja visto ou acessado fora da classe. Para acess-
los, criamos mtodos pblicos que podem ser acessados externamente e garantimos a integridade
dos dados.

public class Veiculo {

private double dblVelocidadeAtual;

public double VelocidadeAtual


{
get
{
return dblVelocidadeAtual;
}
set
{
// validaes
dblVelocidadeAtual = value;
}
}
}
Captulo 8
Strings

A classe string possui diversos mtodos que nos permitem manipular strings(texto). As vezes
precisamos desmembrar uma string ou ento coloc-lo em letras maisculas ou minsculas. Vamos
estudar alguns deste mtodos a seguir.

Join: Usado para juntar partes distintas de um array de string.


string[] teste = new string[] { "Este ", "um teste", "do comando", "Join" };
string x = string.Join(" ", teste);

Sintaxe: string.Join(delimitador; teste);

Delimitador: o caractere ou espao em branco utilizado para separar palavras


contidas em um Array.
Array: a matriz que contm a seqncia de frases ou palavras utilizadas com o
mtodo join.

Split: O mtodo Split o oposto de Join. Utilizamos um delimitador para separar a string e
partes.
Ex.: string teste = "Este um teste do comando, Split";
string[] obj = teste.Split(',');

Length: Retorna o comprimento de uma string.


Ex.: string teste = "Este um teste do comando length";
int tam = teste.Length;

Remove: Exclui um intervalo especfico de uma string.


Sintaxe: varialveString.Remove(ndice, quantidade);
ndice: o ndice do primeiro caracter da string a partir do qual o texto ser excludo.
(comea de 0);
Quantidade: o nmero de caracteres que sero excludos.

Ex.: string frase = "Este um pequeno teste do comando Remove";


string teste = frase.Remove(10, 7);
// o valor da varivel teste "Este um teste do comando Remove".

Replace: O mtodo Replace tem a funo de substituir uma string por outra previamente
definida.
Sintaxe: varivel.Replace(substituir, substitudo);
Substituir: o texto antigo que deve ser substitudo.
Substitudo: o novo texto que substitui o anterior.

Substring: Este mtodo tem a funo de encontrar trechos de uma string de acordo com os
ndices especificados.
Sintaxe: variavel.Substring(inicio, quantidade).
Inicio: ndice da posio inicial comeando de 0.
Quantidade: Parmetro que define a quantidade de caracteres a copiar.

Ex.: string teste = "Este um teste do comando Substring";


string comando = teste.Substring(28, 9);
// a varivel comando ter o valor "Substring".

Concat: Concatena uma ou mais instncias de uma string evitando o desperdcio de memria.
Sintaxe: string.Concat(string1, string2);
Ex.: string teste = "Adenzio";
string teste2 = " Carlos";
string teste3 = string.Concat(teste, teste2);
// A varivel teste3 ter o valor "Adenzio Carlos";

Insert: Insere uma string no local especificado.


Sintaxe: varivelString.Insert(ndice, texto).
ndice: A posio onde ser inserido o texto.
Texto: A frase ou palavra que ser inserida.

Ex.: string teste = "Este um teste";


teste.Insert(15, " do comando Insert");

Compare: Utilizado para comparar duas strings.


Sintaxe: string.Compare(string1, string2);

Se o valor retornado for menor que zero, ento a string1 menor que a string2.
Se o valor retornado for igual a zero, ento a string1 igual a string2.
Se o valor retornado for maior que zero, ento a string1 maior que a string2.

ToUpper e ToLower: O mtodo ToUpper converte uma string em letras maisculas enquanto o
mtodo ToLower converte uma string para letras minsculas.

Ex.: string teste = "adenzio";


string maiscula = teste.ToUpper(); // ADENZIO
string minscula = teste.ToLower(); // adenzio

StringBuilder: Como vimos no uso do mtodo Concat, uma string imutvel. Usando Concat
ns evitamos a criao de vrias instncias de um objeto string na memria no momento de criao do
mesmo. Porm quando queremos inserir ou alterar o valor de uma string, os mtodos disponveis
retornam um outro objeto string. Para que possamos manipular uma string sem que haja a
necessidade de criarmos outros objetos string devemos trabalhar com um objeto chamado
StringBuilder. Este objeto est no namespace System.Text que dever ser declarado no incio da
classe. Para instanciarmos um objeto StringBuilder seguiremos o padro da POO.

// Criando uma instncia do objeto StringBuilder com um buffer de 16 bytes.


StringBuilder str = new StringBuilder();

Para inserirmos os dados em um StringBuilder podemos usar os mtodos:


Append: Inseri uma nova linha ao final do StringBuilder.
AppendFormat: Inseri uma nova linha formatada ao final do StringBuilder.
AppendLine: Inseri uma nova linha ao final do StringBuilder acrescida um CarriageReturn.

Quando queremos inserir um contedo string em uma determinada posio usamos o


mtodo insert do StringBuilder.
str.Insert(10, teste); // Insere a palavra teste na posio 10;
Captulo 9
ADO.NET

O ADO.NET foi criado pensando-se exclusivamente em aplicaes Web. A primeira evidncia


disto o fato de que o ADO.NET um mecanismo para acesso a dados baseado em XML que o
formato padro para trfego de informaes na Web.
Tambm possvel e bastante recomendvel o trabalho com dados desconectados da origem.
Ns veremos a seguir que possvel criar um banco em memria com recursos do ADO.NET.
possvel utilizar ADO.NET com qualquer linguagem disponvel na plataforma.

DataProvider: Para comearmos a trabalhar com o ADO.NET temos que especificar um


Provedor de Dados vlido. Embutido na Framework do .NET j possumos 2 tipos de provedores
sendo o SQL para trabalharmos com banco SQL-Server e o OleDb para a verso 6.5 do SQL-Server
ou para outros bancos de dados.
Existem outros provedores disponveis para outros bancos de dados como o caso do Oracle,
Firebird e o DB2. Falaremos sobre conexes utilizando SQL, OleDb e Oracle.
Quando utilizamos provedores especfico como o caso do SQL e do Oracle temos uma
performance melhor por no haver uma camada intermediria. No caso do OleDb existe a facilidade
de podermos acessar praticamente qualquer tipo de fonte de dados como os 2 citados anteriormente
alm de Access e XML mas por outro temos uma diminuio da performance visto que existe uma
camada intermediria entre a aplicao e o banco de dados.
Todas as classes que utilizam o provedor SQL tem o prefixo Sql como SqlConnection,
SqlCommand. Da mesma forma que as classes que utilizam Oracle tem o prefixo Oracle como
OracleConnection e OracleCommand.
O provedor de dados SQL referenciado pelo namespace System.Data.SqlClient e o Oracle
por System.Data.OracleClient.
No caso do OleDb existe o uso do prefixo OleDb e o namespace System.Data.OleDb.

DbConnection(Sql, OleDb e Oracle): No ADO.NET utilizamos o objeto Connection para


efetuar uma conexo com uma origem de dados. Para SQL usa-se SqlConnection, para Oracle
OracleConnection e para OleDb OleDbConnection.

Ex.:
(Sql-Server):
string strConn = DataSource=localhost; Integrated Security= SSPI; Initial Catalog=Nwind;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();

(Oracle):
string strConn = Data Source=localhost; User ID=nome; Password=123; +
Persist Security Info=True;;
OracleConnection conn = new OracleConnection(strConn);
conn.Open();

(Outros bancos):
string strConn = Provider=MSDAORA.1; DataSource=localhost; User ID=nome;+
Password=123;
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();

DbCommand(Sql, OleDb e Oracle): Feita a conexo com a fonte de dados podemos executar
comandos e fazer consultas utilizando o objeto DbCommand e especificando a instruo SQL que
dever ser executada. Para Sql-Server (SqlCommand), Oracle (OracleCommand) e OleDb
(OleDbCommand). importante citar que o DbCommand deve ser do mesmo tipo do DbConnection,
ou seja, se usarmos SqlConnection o command ter que ser SqlCommand.
As principais propriedade de DbCommand so:

ExecuteNonQuery: Executa um comando sem consulta e retorna a quantidade de registros


afetados pelo comando. Por exemplo quando executamos um comando de update, no existe retorno
de dados seno a quantidade de registros que foram alterados no banco de dados.

private int update()


{
string strConn = DataSource=localhost; Integrated Security= SSPI; Initial Catalog=Nwind;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();

string sql = Update TABELA set CAMPO = VALOR +


Where CONDICAO1 = PARAMETRO1;
SqlCommand cmd = new SqlCommand(sql, conn);
int cont = Convert.ToInt32(cmd.ExecuteExecuteNonQuery());
conn.Close();
return cont;
}

ExecuteScalar: Retorna o valor da primeira coluna do primeiro registro. Utilizado quando


queremos fazer uma consulta que retorna um nico valor. Por exemplo quando fazemos um consulta
que retorna um count ou max.

private int qtde()


private int qtde()
{
string strConn = DataSource=localhost; +
Integrated Security= SSPI; Initial Catalog=Nwind;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
string sql = Select count(codigo) from TABELA+
where CONDICAO1 = + PARAMETRO1;
SqlCommand cmd = new SqlCommand(sql, conn);
return Convert.ToInt32(cmd.ExecuteScalar());
}

ExecuteReader: Executa a leitura de dados em um banco de dados e retorna um DataReader


como resultado.

public SqlDataReader exibeRegistro()


{
string strConn = DataSource=localhost; Integrated Security= SSPI; Initial Catalog=Nwind;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
string sql = Select codigo, nome from produtos where secao = 1;
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}

Insero, atualizao e deleo

Existem 3 maneiras distintas de fazermos estas operaes. Veremos as 3 e ficar a sua


escolha de acordo com a situao qual lhe ser a melhor.
1. A primeira maneira utilizarmos o objeto command para executar os comandos no banco de
dados. Por exemplo ao inserirmos uma string sql com o comando a ser executado. (Ver
ExecuteNonQuery).
Mas para usarmos a execuo devemos trabalhar com parmetros no command. O tipo do
parmetro est diretamente relacionado ao tipo do command, ou seja, se usarmos um SqlCommand
devemos usar um SqlParameter, no caso do OracleCommand, OracleParameter e assim por diante.
Vamos a um exemplo prtico:
...
string strConn = DataSource=localhost; Integrated Security= SSPI; Initial Catalog=Nwind;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();

// Cria a string que ter o comando a ser executado no banco de dados.


string sql = Update produtos set nome = :nome, vlr = :vlr Where codigo = :codigo;

// Cria e instancia um objeto SqlCommand


SqlCommand cmd = new SqlCommand(sql, conn);

// Cria os parmetros no objeto SqlCommand


cmd.Parameters.Add(new SqlParameter(nome, SqlDbType.Varchar, 50));
cmd.Parameters.Add(new SqlParameter(vlr, SqlDbType.Decimal));
cmd.Parameters.Add(new SqlParameter(codigo, SqlDbType.Int));

// Atribui os valores aos respectivos parmetros


cmd.Parameters[nome].Value = Caf Extra Forte;
cmd.Parameters[vlr].Value = 4;
cmd.Parameters[codigo].Value = 125;

// Execute comando no banco de dados


cmd.ExecuteNonQuery();

2. Existe um componente no .NET 2.0 chamado SqlDataSource:

Aps arrastarmos um SqlDataSource para o palco, podemos clicar em ConfigureDataSource e


teremos uma tela semelhante prxima figura:
Se j tivermos uma configurao podemos selecion-la no dropdown, caso contrrio podemos
clicar em New Connection...

Aqui podemos escolher o tipo de conexo(Sql, Oracle, OleDb, etc.), a base de dados e o tipo
de login. Ao clicarmos em OK, retornaremos para a tela anterior com a string de conexo cadastrada.
Voc ter a opo de incluir esta string no arquivo web.config que veremos no prximo captulo.

Na prxima tela teremos as opes de montar a consulta selecionando os campos de uma


determinada tabela ou de uma forma customizada.
No caso de selecionarmos os campos, podemos clicar no boto WHERE... para colocarmos as
condies para a consulta.

Observe que podemos selecionar a coluna, o operador e a fonte que pode ser: None, Control,
Cookie, Form, Profile, QueryString e Session. Aps montarmos o parmetro, podemos adicion-lo
clusula WHERE.

Depois de clicarmos em OK, voltamos para a tela anterior e podemos clicar em ORDER BY...
Nesta tela definimos os campos que sero usados de base para ordenar a consulta e a forma
que ser feita a ordenao tambm, sendo Ascending / Crescente ou Descending / Decrescente.
Ao voltarmos para a tela anterior ainda podemos clicar em Advanced...
Nesta tela podemos selecionar a opo Generate INSERT, UPDATE, and DELETE statements
para que gere os comandos automaticamente.

Podemos tambm selecionar a opo Use optimistic concurrency para que ele verifique antes
do update e do delete se os valores foram mudados no banco antes executar o comando.

Podemos trabalhar de uma outra forma tambm que escolhendo montar a consulta de uma
forma customizada. Neste caso selecionamos a opo Specify a custom SQL e teremos a opo de
digitarmos a consulta ou usar o QueryBuilder conforme a prxima figura:
Neste caso podemos selecionar uma ou mais tabelas, criarmos relacionamentos e definirmos
os campos que faro parte das condies de consulta.

Observe que temos uma aba para cada comando: SELECT, UPDATE, INSERT, DELETE alm
da opo de selecionarmos uma Storedprocedure previamente compilada no banco de dados.

Depois clicar em Next e Finish.


Entre as vantagens de se trabalhar com um SqlDataSource destacam-se o fato de montarmos
a consulta de uma forma visual, sem que seja necessrio digitar nenhuma linha de cdigo, a definio
dos parmetros e seus campos para atualizao sendo que no ser necessrio escrever um cdigo
para a atualizao e o fato de que podemos trabalhar com objetos como o GridView ou FormsView
que esto diretamente vinculados ao SqlDataSource.

3. A terceira forma veremos mais adiante quando estudarmos DataAdapter de DataSet.

Stored Procedures: Uma Stored Procedure composta de comandos SQL, variveis e


comandos de fluxo lgico.
Como fica armazenada no banco de dados, a manuteno do sistema fica mais simples pelo
fato de uma nica alterao afetar imediatamente todos os usurios. Se uma Stored Procedure j foi
executada, os acessos seguintes so mais rpidos, pois seu plano de execuo fina na memria.
As Stored Procedures aceitam parmetros de entrada e podem retornar valores como
parmetros de sada para o programa que as invocou.
Mesmo retornando parmetros de sada, as Stored Procedures no podem ser utilizadas em
expresses, pois so diferentes de funes.
Parmetros: Por meio de parmetros possvel estabelecer uma conexo entre o mundo
exterior e a Stored Procedure. As principais definies de um parmetro so: nome, tipo (int, varchar,
etc.), valor, direo (input, output).

DbDataReader(Sql, OleDb, Oracle): Um DataReader um componente do tipo RO/FO (Read


Only/Forward Only), ou seja, (Somente leitura/Somente pra frente). Significa dizer que s podemos lr
e no gravar dados e s podemos navegar para frente, no podendo assim voltar aos registros
anteriores.

...
string strConn = DataSource=localhost; Integrated Security= SSPI; Initial Catalog=Nwind;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
string sql = Select codigo, nome from produtos where secao = 1;
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
varcodigo = dr.GetInt32(0); // Aqui usamos o GetInt que j converte para inteiro.
varnome = dr[nome].ToString(); // Neste caso usamos o nome da coluna;
// Obs.: Quando usamos Get + tipo, s podemos passar o ndice da coluna e no o nome.
}
...

DbDataAdapter(Sql, OleDb, Oracle): A principal funo da interface IDbDataAdapter mediar


a interao entre a classe DataSet e o bancos de dados reais, para isso a classe que implementa
IDbDataAdapter contm um comando Sql de consulta, usualmente um comando SqlSelect. Este
comando usado para preencher uma tabela dentro de um DataSet. Alm disto ele possui os 3
comandos de atualizao. Insero, deleo e atualizao.
O mtodo Fill preenche o DataSet executando a conexo ao banco de dados, a consulta e a
desconexo. Depois de alterado o DataSet chamamos o mtodo Update para aplicar as modificaes
de volta ao banco de dados. Os comandos de alterao so gerados automaticamente mas podem ser
alterados para atender alguma necessidade mais especfica.

...
string strConn = DataSource=localhost; Integrated Security= SSPI; Initial Catalog=Nwind;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
string sql = Select codigo, nome from produtos where secao = 1;
SqlDataAdapter da = new SqlDataAdapter(sql, conn); // Passamos o comando e a conexo
// Escolhemos um objeto DataSet ou DataTable para popular
DataSet ds = new DataSet() // ou DataTable dt = new DataTable();
da.Fill(ds, PRODUTOS); // ou da.Fill(dt) no caso do DataTable
...

DataSet: Provavelmente a classe mais importante do ADO.NET. Funciona como um banco de


dados em memria podendo conter vrias tabelas e tambm relacionamento entre as tabelas. Estas
podem conter campos de vrios tipos, colunas calculadas, restries e at chaves primrias. Um
DataSet nunca est conectado a um banco de dados fsico e nunca sabe a origem dos dados.
possvel popular um DataSet utilizando um DataReader, DataAdapter, XML entre outros.
As tabelas em um DataSet so enxergadas como um Array e no atravs de cursor.

DataView: uma viso dos dados em memria armazenados no DataSet. Com ele possvel
fazer filtros e ordenaes sem que seja necessrio submeter uma nova consulta ao banco de dados.
Captulo 10

Formulrios e Controles Web

Cookies: Um cookie uma informao que um servidor web pode armazenar temporariamente
junto a um browser. Uma aplicao prtica disto no comrcio via Internet. Suponhamos que algum
entre em uma loja virtual de discos, faa vrias selees para compra e v navegar em outros sites.
Ao voltar ao site de venda de cds, todas as suas selees tero sido mantidas e ele poder ento
fechar o seu negcio ou fazer mais aquisies.
As informaes so guardadas pelo browser e no pelo servidor Web, o que no deixa de fazer
sentido. Ficaria muito mais difcil para um servidor se lembrar dos milhares de browsers que o
acessaram recentemente e exatamente o que cada um deles fez ou selecionou.
Os cookies so enviados para o seu browser e mantidos na memria. Ao encerrar a sua
sesso com seu browser, todos os cookies que ainda no expiraram so gravados em um arquivo
(cookie file).
Muitas pessoas julgam que os cookies possam ser usados pelo servidor para obter
informaes a seu respeito ou invadir o seu disco rgido e obter dados a partir de l, o que no
verdade. Todas as informaes gravadas em um cookie so informaes que voc forneceu
voluntariamente ao servidor, de uma forma ou de outra.
Para criar um cookie, o servidor web envia uma linha de cabealho HTTP em resposta a um
pedido de acesso a uma URL solicitada pelo browser:
Set-Cookie: NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure

NAME o nome do valor que se est armazenando no browser e VALUE o dado real sendo
armazenado no cookie. DATE a data na qual este cookie ir expirar.
DOMAIN indica um computador ou rede na qual este cookie vlido. Computadores fora deste
domnio no conseguiro ver este cookie.
A diretiva "secure" indica que o cookie somente ser transferido sobre conexes seguras
(https) e nunca sobre uma conexo http normal.
De todos estes campos, apenas o campo NAME obrigatrio.

Bom, voltando ao browser. Sempre que um browser solicita uma URL a um servidor que nele
tenha criado cookies anteriormente, includa, juntamente com a URL uma linha listando todos os
cookies existentes. Esta informao ser ento utilizada pelo servidor Web para dar continuidade a
transaes iniciadas anteriormente. Esta linha possui um formato do tipo:
Cookie: NAME=VALUE; NAME=VALUE; ...

Objetos Application e Session: O objeto Application foi criado para armazenar propriedades
(valores) ligados a um conjunto de usurios. No caso, os visitantes do site, de um modo geral. Como
exemplo, podemos citar o nmero total de visitantes no site a partir de uma determinada data, ou o
nmero de visitantes online no site.
O objeto Session foi criado para armazenar propriedades (valores) ligados a cada visitante,
individualmente. Como exemplo, podemos citar o carrinho de compras de um site de comrcio online.
Uma Session criada quando o visitante entra no site (cada visitante tem uma session e cada session
recebe um ID), e destruda quando o visitante sai do site (seja por logoff explcito ou por TimeOut).
J uma Application iniciada ao haver o primeiro pedido de acesso ao objeto Application, e
encerrado quando o servidor for desligado.
Todo o cdigo que se deseja executar ao criar ou destruir uma session, bem como uma
Application devem estar contidos no arquivo global.asax, um arquivo texto no formato abaixo
demonstrado, que deve ser colocado no diretrio raiz do site.
As variveis do objeto Application e do objeto Session so armazenadas no servidor, mas
necessrio que o browser aceite cookies, pois um cookie com o ID da sesso criado no computador
do visitante, para identific-lo.
Web.Config: Muitas vezes, voc quer incluir configuraes globais para sua aplicao, como
uma string de conexo com uma base de dados. No ASP clssico (3.0), isso possvel de ser feito
usando o arquivo global.asa. No .NET, existe um nova opo: o arquivo Web.Config file (XML-based),
e uma seo especial chamada AppSettings.

O exemplo abaixo mostra um arquivo de configurao com uma string dsn.


No web.config:
<configuration>

<appSettings>
<add key="PubsDSN" value="server=(local);database=pubs;uid=sa;pwd=;" />
</appSettings>

</configuration>
Na pgina:
<%@ Page Language="C#" %>

<html>
<body>
<%=System.Configuration.ConfigurationSettings.AppSettings["PubsDSN"]%>
</body>
</html>

Global.asax: O Diretrio Virtual no IIS grande parte do Aplicativo ASP.NET. Independente da


pgina, o aplicativo iniciado na primeira vez que ela solicitada. Enquanto os usurios navegam
pelas pginas, o processamento ocorre em segundo plano para tratar do Aplicativo.
O Aplicativo pode cair e ser reiniciado da mesma forma que qualquer aplicativo tradicional, com
a seguinte excesso: enquanto um aplicativo tradicional iniciado e executado em um computador
desktop permitindo a interao direta com o usurio, um Aplicativo ASP.NET iniciado e executado
em um servidor Web, e o usurio utiliza um browser para acess-lo.
Lembrando que tudo em .NET Framework um objeto, temos um objeto chamado HttpApplication,
que nos fornece mtodos e eventos. Com isso podemos deduzir que sempre que uma pgina em seu
Diretrio Virtual for solicitada pela primeira vez, um objeto do tipo HttpApplication instanciado.

Como as pginas ASP.NET realizamos uma ou mais tarefas individualmente, elas no controlam o
Aplicativo de modo geral, no podendo uma pgina afetar diretamente a outra. Deve existir uma
localizao central que controla a execuo do Aplicativo. Tendo este cenrio, entra em cena o
arquivo Global.asax.

Conhecido como Arquivo de Aplicao de ASP.NET, o Global.asax permite-nos programar no lugar do


objeto HttpApplication e com isso voc poder controlar o seu Aplicativo ASP.NET como faz com
qualquer outro objeto por meio de mtodos e eventos.

OBS.: Apesar do Visual Studio .NET incluir o arquivo Global.asax por default, ele totalmente
opcional. Se seu Aplicativo no conter um arquivo desse tipo, o programa opera de forma padro.
Desejando adicionar funcionalidades, a sua utilizao torna-se essencial.

O arquivo Global.asax colocado no Diretrio raiz do Aplicativo (Exemplo: http://servidor/site/ -


c:\inetpub\wwwwroot\site\). O ASP.NET controla o acesso esse arquivo, de modo que ele no
acessvel atravs do browser, o que garante a segurana.

Este arquivo gerenciado pela .NET Framework. Sempre que ele for modificado, o CLR detecta isso e
faz com que o Aplicativo seja reiniciado para que as novas mudanas tenham efeito. Isso pode
ocasionar transtornos para os usurios finais. Modifique este arquivo somente o necessrio.
Captulo 11
WebServices

O que so WebServices: So aplicaes desenvolvidas com o intuito de fornecer servios


outras aplicaes que sejam desenvolvidas at mesmo em linguagens diferentes. Sendo assim,
podemos us-los na integrao entre sistemas diferentes em plataformas diferentes.
Isso possvel porque WebServices recebem e enviam dados em formato XML (eXtensible
Markup Language).
Os dados so transportados via protocolo HTTP ou HTTPS em formato XML e encapsulados
pelo protocolo SOAP (Simple Object Access Protocol).

Criando um WebService: Para criarmos um WebService clique em File > New Web Site ...

Por padro criado um arquivo asmx, que equivalente a uma pgina aspx, porm sua funo
prover servios e no contedo. Cada arquivo asmx tem um arquivo .cs equivalente, onde so
criados os mtodos a serem publicados.

Um mtodo deve conter um atributo WebMethod, caso contrrio ele estar disponvel dentro da
aplicao mas no externamente a esta. Se voc examinar o arquivo .cs criado, notar que j existe
um mtodo de demonstrao criado automaticamente:
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}

Na tela a seguir veremos um WebService sendo executado diretamente no Browser.


Observe que temos um mtodo chamado Consulta. Se clicarmos no link seremos direcionados
a uma outra pgina com um campo de texto e um boto. Este campo existe porque o mtodo espera
um parmetro. Depois de clicar no boto seremos direcionado a uma outra pgina com o retorno do
mtodo Consulta.

Consumindo um WebService: Para consumir este WebService, ou seja, usar os mtodos


dentro de uma aplicao devemos fazer primeiro uma referncia ao WebService. Para isso devemos ir
na SolutionExplorer e clicar com o boto direito do mouse sobre uma aplicao Asp.Net e depois com
o boto esquerdo do mouse em Add Web Reference...
Podemos digitar uma url ou buscar um WebService em nossa soluo.

O WebService que acabamos de criar ser listado na tela. Ao clicarmos no link Service o Visual Studio
far uma busca de mtodos no WebService e exibir uma tela semelhante tela vista no browser
anteriormente. Depois podemos definir um nome de referncia em Web reference name e clicar em
Add Reference.
Agora basta inserir o cdigo abaixo em nossa aplicao Asp.Net:

using localhost;
...
protected void Page_Load(object sender, EventArgs e)

Service Con = new Service();

DataSet ds = Con.Consulta("SELECT * FROM Tabela") ;

Gridviewl.DataSource = ds;

GridViewl.DataBind();