Sunteți pe pagina 1din 21

/LQJXDJHPGH3URJUDPDomR&RPHUFLDO

Autoria: Douglas Fugita de Oliveira Cezar 7HPD


Recursos do Ambiente de Desenvolvimento. Inovações na Linguagem e Sintaxe. Utilizando Windows Forms e Respectivos Controles
Autoria: Douglas Fugita de Oliveira Cezar
CONVITEÀLEITURA
Como citar esse documento:
CEZAR, Douglas Fugita de Oliveira. Linguagem de Programação Comercial: Recursos do Ambiente de Desenvolvimento. Inovações na Linguagem e
Sintaxe. Utilizando Windows Forms e Respectivos Controles. Valinhos: Anhanguera Educacional, 2014.
Neste caderno
N d você
ê encontrará
á o conceito
i de
d .NET
NET Framework,
F k também
bé conhecido
h id como ““.NET”
NET” (d
(de pronúncia
ú i “d“dot
net”), que corresponde à estrutura em que se baseiam todas as linguagens suportadas pelo CLR (Common Language
Runtime). O CLR é o ambiente de compilação dos códigos-fonte que serão gerados no .NET Framework, sendo ainda
Índice o responsável por executar o código e também por fornecer serviços que visam facilitar o desenvolvimento de software.
Dentre as linguagens de programação que o compilador executa está o C#, que é a linguagem de programação que
servirá de base para este estudo. No entanto, os recursos que serão vistos neste caderno podem ser aplicados a qualquer
outra linguagem utilizada na mesma ferramenta – o Visual Studio –, como por exemplo, “ASP.NET”, “Visual Basic”, que
CONVITEÀLEITURA PORDENTRODOTEMA fazem parte do pacote de execução do .NET Framework, além dos recursos para integração e desenvolvimento de
Pág. 3 Pág. 3
banco de dados.

Neste material, você encontrará também noções sobre os principais recursos do ambiente de desenvolvimento proposto
– o Microsoft Visual Studio. Entre eles, podemos destacar a estrutura de criação de projetos e soluções, os componentes
visuais e as ferramentas para depuração de código.
ACOMPANHENAWEB Você poderá observar ainda a criação de um projeto que, apesar de simples, servirá como base para utilização do
Pág. 28 Pág. 29
ambiente de desenvolvimento para projetos de qualquer tamanho ou necessidade.

Pág. 32 Pág. 32
PORDENTRODOTEMA
Recursos do Ambiente de Desenvolvimento. Inovações na Linguagem e Sintaxe. Utilizando Windows
Forms e Respectivos Controles
Tema 01
Recursos do Ambiente de Desenvolvimento. Inovações O .NET Framework foi desenvolvido pela Microsoft com o objetivo de criar um mecanismo único de desenvolvimento,
Pág. 33 Pág. 33
compilação, construção e execução de aplicações. O .NET Framework se sustenta em dois pilares: o da CLR e o da
na Linguagem e Sintaxe. Utilizando Windows Forms e ‹ $QKDQJXHUD (GXFDFLRQDO 3URLELGD D UHSURGXomR ¿QDO RX SDUFLDO SRU TXDOTXHU PHLR GH LPSUHVVmR HP IRUPD LGrQWLFD UHVXPLGD RX PRGL¿FDGD HP OtQJXD
FCL.
Respectivos Controles SRUWXJXHVDRXTXDOTXHURXWURLGLRPD

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


A CLR (Common Language Runtime) é um ambiente de execução independente de linguagem e plataforma, ou seja, Todo desenvolvimento realizado no Visual Studio é criado como um projeto. Para iniciar um novo projeto, você deve $SyVDFHVVDUHVVHLWHPXPDWHODVHUiDEHUWDSDUDTXHVHMDFRQ¿UPDGRRWLSRGHSURMHWRTXHVHUiLQLFLDGRFRPRPRVWUD
QHVVHFDVRXPFyGLJRHVFULWRHP9LVXDO%DVLF1HWSRGHLQWHUDJLUFRPRXWURFyGLJRHVFULWRHP&HQR¿QDOHOHSRGH acessar o menu File > New > Projetc..., conforme mostrado na Figura 1.2. a Figura 1.3.
ser distribuído para qualquer sistema operacional ou servidor web que faça utilização do .NET Framework.

A CLR tem capacidade de interagir com várias linguagens, tais como Visual C++, Visual C#, Visual Basic, JavaScript e
Visual F#. Este curso será fundamentado em Visual C#, pois, por ser baseado em C / Java, possui uma rápida curva de
aprendizagem graças aos conteúdos anteriores. No entanto, todo conteúdo referente ao ambiente de desenvolvimento
e seus componentes se comporta da mesma forma caso você queira experimentar outras linguagens.

A FCL (Framework Class Library) detalha um conjunto padrão de bibliotecas, no qual armazenam-se classes, interfaces
e tipos de dados. Nela se encontram as classes primordiais ao desenvolvimento, dentro dos namespaces System,
System.Data, System.Collections, etc.

Neste curso, será utilizada a versão 2010 do Microsoft Visual Studio, o qual tem sua tela inicial reproduzida na Figura
1.1.

Figura 1.2 Criação de novo projeto

Figura 1.3 Tipos de Projetos

Existem vários tipos de projetos, conforme demonstrado na Figura 1.3. Dentre eles, os mais utilizados são:

‡ Windows Application: projeto para criação de aplicativos que serão executados diretamente no computador do
XVXiULRVHPKDYHUDQHFHVVLGDGHGDLQVWDODomRHPVHUYLGRUHV2SURGXWR¿QDOGHVWHWLSRGHSURMHWRpXPDUTXLYR
com extensão .exe.

Figura 1.1 Tela inicial do Microsoft Visual Studio 2010

  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
‡ Console Application: programas criados neste tipo de projeto também geram arquivos com extensão .exe, tal como Repare que, ao criar o projeto, é apresentada a opção da criação de uma Solution. Esse recurso é utilizado para que using System.IO;
o Windows Application. No entanto, seu resultado é uma tela de Prompt de Comando que, por ser mais simples, sejam agrupados vários projetos que, embora de tipos diferentes, fazem parte da mesma solução. Por exemplo, uma
exige menos recurso do computador que está executando o programa. Em contrapartida, a interface com o usuário é solução pode conter um projeto ASP.NET Web Application responsável por uma loja virtual, um projeto Windows Forms
diminuída, sendo utilizadas somente entradas via teclado. Application para que os funcionários internos gerenciem a operação da empresa e um projeto Console Application para namespace TADSConsoleApp
automação do controle do estoque com utilização de leitores de código de barras.
‡ ASP.NET Web Application: este projeto cria uma série de páginas que serão interpretadas por um servidor de {
aplicação web, tal como o IIS (Internet Information Services) da própria Microsoft. O cliente acessa a aplicação via A Figura 1.5 mostra o resultado da criação da aplicação, bem como o primeiro código-fonte já iniciado pelo próprio
ambiente de desenvolvimento. class Program
browser e todo o processamento é realizado pelo servidor.
{
O primeiro projeto que será utilizado como base neste tema será um Console Application, conforme mostrado na Figura
1.4. static void Main(string[ ] args)

Figura 1.6 Namespace System.IO.

(VVH SURJUDPD HVWi VHQGR FULDGR FRP R QDPHVSDFH7$'6&RQVROH$SS ,VVR VLJQL¿FD TXH RXWURV SURJUDPDV SRGHP
utilizar funções criadas neste programa, desde que este mesmo namespace seja referenciado.

O programa segue com a declaração de classe, a qual contém métodos e atributos que serão consumidos e utilizados
pela aplicação. O primeiro método da classe Program, que foi criado automaticamente, é o método Main, obrigatório
para toda classe.

Figura 1.5 Projeto TADSConsoleApp e o código fonte Program.cs O primeiro programa executado neste tema será o clássico Hello World. Para isso, será utilizada a classe Console, que
está contida no namespace System. O método Writeline será utilizado para que a informação seja escrita no prompt.
O programa se inicia com a declaração de namespace, e, para utilizar as bibliotecas, emprega-se a diretiva Using.
Depois disso, o método ReadKey faz com que seja aguardado o pressionar de qualquer tecla. O código-fonte e a sua
Sendo assim, caso o programa utilize arquivos externos, tais como arquivos .CSV1, deverá ser declarado o namespace
Figura 1.4 Criação do projeto TADSConsoleApp 6\VWHP,2TXHSRVVXLFODVVHVHVSHFt¿FDVSDUDOHLWXUDHHVFULWDGHDUTXLYRVFRQIRUPHPRVWUDD)LJXUD execução podem ser respectivamente vistos na Figura 1.7.

1 A extensão .CSV (Comma Separated Values) refere-se a arquivos mais robustos compostos por dados tabelados, o que se também conhece como sendo using System;
uma implementação de arquivos do tipo . txt. Esses arquivos são descritos em forma de registros separados por caracteres como vírgulas, ponto e vírgulas,
tabulações e aspas (“ ”). Permitem fácil manipulação de dados. (GDAL- Geospatial Data Abstraction Library. Disponível em: <http://www.gdal.org/drv_csv.html>.
Acesso em: 12.09.2014)
using System.IO;

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


namespace TADSConsoleApp Até o momento, somente informações foram exibidas, mas nenhum dado foi capturado. Para que isso seja feito, o
método ReadLine da classe Console será utilizado, conforme mostra a Figura 1.8. Essa informação será armazenada
{
em uma variável, e seu conteúdo será impresso em tela logo em seguida.
class Program
using System;
{
using System.IO;
static void Main(string[ ] args)
namespace TADSConsoleApp
{ {
Console.WriteLine(“Hello World”); class Program
Console.WriteLine(“=================”); {

Console.ReadKey(); static void Main(string[ ] args)


{
}
Console.WriteLine(“Hello World”);
}
Console.WriteLine(“=================”);
}
Console.Write(“Digite seu nome: “);
string nome;
nome = Console.ReadLine();
Console.WriteLine(“=================”);
Console.WriteLine(“Seja bem-vindo, {0}”, nome);
Console.ReadKey();
}

}
Figura 1.8 ReadLine e WriteLine com container para a variável nome
Figura 1.7 Fonte Hello World e Execução do Programa em Prompt
}

  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
As próximas estruturas a serem utilizadas serão explanadas através de um projeto em que seja possível a utilização de
uma interface mais amigável. Para isso, será criado um novo projeto que faz parte da mesma solução anterior (TADSApps),
PDVDJRUDFRP:LQGRZV)RUPV$SSOLFDWLRQ9RFrSRGHYHUQD)LJXUDTXHQRFDPSR6ROXWLRQHVSHFL¿FRXVH³$GGWR
solution” (acrescentar à solução).

Figura 1.10 Solution Explorer com os dois projetos Figura 1.11 Toolbox
Figura 1.9 Criação do Projeto Windows Form
Será criado um novo Windows Form com o nome HelloWorld, no projeto TADSWinFormApp. Para este formulário, alguns Para utilizar qualquer um desses componentes, basta arrastá-los para a área desejada no Windows Form. A maioria
2UHÀH[RGHVVDFULDomRHPXPDVROXomRMiH[LVWHQWHSRGHVHUYLVWRQD)LJXUDTXHGHPRQVWUDRGRFN6ROXWLRQ GHOHV WHUi XPD UHSUHVHQWDomR JUi¿FD QR SUySULR IRUP 1R HQWDQWR DOJXQV FRPSRQHQWHV FRPR 7LPHU TXH H[HFXWD
componentes visuais serão utilizados, tais como Button, TextBox e Label, que se encontram, todos, no dock Toolbox,
Explorer, no qual é possível visualizar todas as estruturas criadas até o momento no projeto. operações de tempo em tempo), OpenFileDialog (que abre uma caixa de diálogo para solicitar a abertura de um arquivo)
que pode ser visto na Figura 1.11.
ou BackgroundWorker (que implementa várias tarefas sendo processadas simultaneamente) são exibidos em uma área
abaixo do Windows Form.

No novo HelloWorld, os componentes serão utilizados como mostra a Figura 1.12.

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA

Figura 1.14 Action Tag no ComboBox

Ao clicar em Edit Items, o Visual Studio apresenta o recurso String Collection Editor, no qual as opções que poderão ser
selecionadas no ComboBox podem ser inseridas, como pode ser visto na Figura 1.15.

Figura 1.12 Windows Form HelloWorld

,QLFLDOPHQWHpUHFRPHQGDGRTXHWRGRVRVREMHWRVVHMDPUHQRPHDGRVSDUDTXHGXUDQWHDFRGL¿FDomRRVQRPHVIDoDP Figura 1.13 Dock Properties

sentido, facilitando o trabalho. Para renomeá-los, basta alterar a propriedade Name de cada um dos componentes, o que 3DUDLGHQWL¿FDUTXDOpRFRPSRQHQWHFRVWXPDVHXWLOL]DUDVGXDVRXWUrVSULPHLUDVOHWUDVGRVHXQRPHSRUH[HPSOR
pode ser feito através do dock Properties, como demonstrado na Figura 1.13, em que são mostradas as propriedades
para o ComboBox, utilizou-se “cbx”.
do objeto ComboBox.
1RGRFN3URSULHGDGHVSRGHPVHUGH¿QLGRVDWULEXWRVFRPRWH[WRDVHUH[LELGRWDPDQKRIRQWHVHYLVLELOLGDGH

Todos os componentes que recebem uma lista de dados, tais como ComboBox, ListBox ou DataGridView, possuem um
atalho em cima do componente visual, quando este está selecionado. Esse atalho é chamado de action tag e auxilia na
criação dos itens que serão inseridos na lista. Essa opção pode ser vista no objeto ComboBox na Figura 1.14.

Figura 1.15 String Collection Editor

  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
Cada um dos componentes visuais que recebem uma lista de dados possui uma resposta diferente ao action tag. Para using System; Repare que existe uma grande lista de namespaces importados automaticamente. Para remover os que não são
o caso de componentes complexos como o DataGridView, são dadas opções para criar o nome de cada coluna, bem necessários, clique com o botão direito no código e utilize a opção Organize Usings > Remove Unused Usings.
using System.Collections.Generic;
como o tipo que será armazenado. Também é dada a opção de criar cada um dos registros que serão exibidos.
O objetivo desse código é mostrar no Label lblResultado uma mensagem de boas-vindas. Para isso, deve-se utilizar o
using System.ComponentModel;
$SyVLQVHULUWRGRVRVLWHQVQDOLVWDVHUiLQLFLDGDDFRGL¿FDomRGRSURJUDPD3DUDLVVRVHUiXWLOL]DGRRHYHQWRGRREMHWR código mostrado na Figura 1.18.
Button que acontecerá ao clicar no botão. A lista de eventos pode ser acessada no dock Properties, clicando-se no ícone using System.Data;
(YHQWVQDSDUWHVXSHULRUUHSUHVHQWDGRSRUXPUDLRFRPRSRGHVHUYLVWRQD)LJXUD using System;
using System.Drawing;
using System.Windows.Forms;
using System.Linq;
namespace TADSWinFormApp
using System.Text;
{
using System.Windows.Forms;
namespace TADSWinFormApp public partial class HelloWorld : Form

{ {

public partial class HelloWorld : Form public HelloWorld()

{ {

public HelloWorld() InitializeComponent();


{ }
InitializeComponent(); private void btnProcessar_Click(object sender, EventArgs e)
}
{
private void btnProcessar_Click(object sender, EventArgs e)
Figura 1.16 Eventos no Dock Properties OEO5HVXOWDGR7H[W ³6HMDEHPYLQGR³FE[3UH¿[R6HOHFWHG,WHPW[E1RPH7H[W
{
lblResultado.Visible = true;
}
Ao clicar duas vezes, a estrutura básica já para responder ao evento é criada automaticamente, como demonstra a }
}
Figura 1.17. }
}
Figura 1.18 Código-fonte com mensagem de boas-vindas
Figura 1.17 Código-fonte com o método btnProcessar_Click criado automaticamente
  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


Para executar e testar tudo que foi feito até o momento, deve ser utilizado o comando Debug > Start Debug, seu atalho using System; }
F5, ou então o ícone da seta verde mostrado na barra de ferramentas. A execução e o teste realizado são mostrados na
using System.Windows.Forms; }
Figura 1.19.
namespace TADSWinFormApp else {
{ lblResultado.Text = “Aguardando nome válido...”;
public partial class HelloWorld : Form }
{ lblResultado.Visible = true;
public HelloWorld() }
{
InitializeComponent(); SULYDWH%RROHDQIFQ9HUL¿FDFDR ^
} Boolean tudoOk = true;
private void btnProcessar_Click(object sender, EventArgs e)
{ if (txbNome.Text == “”)
LI IFQ9HUL¿FDFDR {
{ tudoOk = false;
LI FE[3UH¿[R6HOHFWHG,WHP ³ HPEUDQFR ´ MessageBox.Show(“ERRO! Nome de usuário inválido”);
{ }
Figura 1.19 Execução do projeto TADSWinFormApp.
OEO5HVXOWDGR7H[W ³6HMDEHPYLQGR³FE[3UH¿[R6HOHFWHG,WHPW[E1RPH7H[W return tudoOk;
3DUDRFyGLJR¿FDUPDLVFRQVLVWHQWHGHYHPVHUIHLWDVYHUL¿FDo}HVFRPRSRUH[HPSORVHRSUH¿[RIRU³ HPEUDQFR ´HOH } }
não deve ser mostrado ou, então, para o caso de o nome estar em branco, uma mensagem de erro deve ser mostrada.
O código-fonte melhorado pode ser visto na Figura 1.20. else }
{ }
lblResultado.Text = “Seja bem-vindo, “ + txbNome.Text; Figura 1.20 &yGLJRIRQWHFRPYHUL¿FDo}HV

  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
Para auxiliar nos testes e nas depurações necessárias durante a programação, o Visual Studio possui uma excelente
IHUUDPHQWDGHGHEXJ2SULPHLURUHFXUVRTXHSRGHVHUXWLOL]DGRSDUDHVVH¿PpR%UHDNSRLQWDWLYDGRSHODWHFOD)RX
então pela opção Debug > Toggle Breakpoint. Sua ativação é indicada por uma marca vermelha ao lado do código, como
se pode ver na Figura 1.21.

Figura 1.22 Operação de Debug

Para passar à próxima linha logo abaixo, deve ser utilizado o atalho F10, ou então o comando Debug > Step Over. Para
continuar a execução sem que seja necessário passar linha a linha, deve ser utilizado o atalho F5, ou então o comando
Figura 1.23 Watch
Debug > Continue.
Para uma visualização de conteúdo pontual, a ferramenta disponibiliza um recurso que possibilita a visualização sem
Outra opção para depuração do código é o uso do Watch. Esse recurso possibilita ver o conteúdo das variáveis ou
Figura 1.21 Breakpoint utilizar o Watch. Para isso, posicione o mouse em cima do objeto para que, então, uma janela seja aberta com as
então de comparação lógicas em tempo de execução, sem necessidade de que o resultado seja impresso em tela ou LQIRUPDo}HVHVSHFt¿FDVGRREMHWRQDTXHOHWHPSRGHH[HFXomRFRPRPRVWUDGRQD)LJXUD
2UHVXOWDGRGHVVDIHUUDPHQWDpRGHTXHGXUDQWHDRSHUDomRGHGHEXJDH[HFXomRpLQWHUURPSLGDHRÀX[RTXHHVWi no console. Para isso, basta selecionar o trecho de código que deseja visualizar no recurso Watch, clicar com o botão
sendo seguido pode ser acompanhado pelo programador. Durante a operação de debug, a linha de código que está direito e escolher a opção Add Watch. Na Figura 1.23, tanto essa opção como o dock Watch 1 (que exibe as informações
sendo executada naquele momento é indicada pela cor amarela, bem como por uma seta amarela ao lado do código,
de cada linha solicitada) podem ser vistos.
como se pode ver na Figura 1.22.

  

PORDENTRODOTEMA AGORA SUAVEZ


AGORAÉÉASUA
AGORAÉASUAVEZ
VEZ
Questão 3
AGORAÉASUAVEZ
$VVLQDඇHRVSULQFLSDLVUHFXUVRVGDIHUUDPHQWDGH'HEXJGR9LVXDඇ6WXGLR

Instruções: a)  %XLඇG

Agora, chegou a sua vez de exercitar seu aprendizado. A seguir, você encontrará algumas questões de múltipla b)  7RRඇER[
escolha e dissertativas. Leia cuidadosamente os enunciados e atente-se para o que está sendo pedido. c) ( ) Breakpoint.
Questão 1 d) ( ) Watch.

Utilizando o conceito de solução e projeto visto neste caderno, dê um exemplo completo de uma solução indicando qual e) ( ) TextBox.
Figura 1.24 Visualização rápida de conteúdo
é o tipo de cada projeto, para um cliente que seja um parque de diversões.
Questão 4
Questão 2
Crie um projeto em Console Application que receba o nome completo de um funcionário, seu cargo, o seu salário, uma
Assinale a(s) alternativa(s) correta(s). taxa percentual para aumento do salário e uma entrada que indique se esse funcionário receberá um bônus de R$
ACOMPANHENAWEB 230,00 em seu salário.
São os pilares do .NET Framework:
Regras:
MSDN – Visual Studio 2013 a) ( ) CRL – Commom Language Runtime.
‡ O nome do funcionário deve conter ao menos um nome e um sobrenome.
‡ Portal disponibilizado pela Microsoft com os principais links para uso da ferramenta e o b)  20)ආ±2SHQ0HGLD)DPHZRUNਝQWHUFKDQJH
aprendizado das linguagens de programação suportadas pelo .NET Framework. c) ( ) AFDW – $FWLYHY)UDPHZRUNIRU'DWD:DUHKRXVLQJ ‡ A taxa percentual não deve ser maior que 27,8% e não deve ser inferior a 7,4%.
Disponível em: <http://msdn.microsoft.com/pt-br/library/dd831853.aspx>. Acesso em: 2 set. 2014. ‡ Se for aplicado o bônus, ele deverá ser aplicado após a taxa percentual.
d) ( ) FCL –)UDPHZRUN&ਞDVV/LEUDU\
MSDN – .NET Framework 4.5 e) ( ) LFA –/RJLFDਞ)UDPHZRUN$SSURDFK ‡ Imprimir em tela o nome completo do funcionário, seu cargo e seu novo salário. Caso seja encontrado algum erro,
este deve ser mostrado e o programa deve ser abortado.
‡ Portal contendo todas as informações sobre o .NET Framework, incluindo as últimas
atualizações realizadas, contempladas na versão 4.5.
Disponível em: KWWSPVGQPLFURVRIWFRPSWEUOLEUDU\Z[F Y YV DVS[!. Acesso em: 2 set. 2014.

  
AGORAÉASUAVEZ
Questão 5
FINALIZANDO GLOSSÁRIO
Faça a portabilidade do programa da Questão 4 para um projeto Windows Form, adicionando os seguintes recursos:
Embora o projeto mostrado neste caderno tenha sido simples, agora chegou a vez de, com sua bagagem em Classe: estrutura composta de métodos e atributos, a qual representa um conjunto de objetos com as mesmas carac-
‡ &RPER%R[FRPRSo}HVGHFDUJRSUHGH¿QLGRV
linguagens de programação, utilizar o Visual Studio 2010 para criar excelentes projetos e soluções. terísticas.
‡ &KHFNER[SDUDGH¿QLomRGRE{QXV
Essa incrível ferramenta pode ser utilizada para a criação de softwares baseados em desktop, como vimos neste caderno. Objeto: é a instância de uma classe.
‡ ListBox para mostrar os erros gerados durante o processamento. Além disso, pode ser base para desenvolvimento de aplicativos baseados em soluções-web através do ASP.NET ou
então soluções de mobilidade com Windows 8, Windows Phone. Atributos: características de um objeto.
Embora não seja necessário utilizar este padrão, segue sugestão de formulário:
Graças ao aproveitamento de conceitos de outras linguagens, como Java, C ou Visual Basic, utilizar o .NET Framework Método: funcionalidades de um objeto.
torna-se mais fácil para alguém que, como você, já possui experiências anteriores.

Um especialista em .NET pode estar inserido em diversas áreas do mercado de trabalho, visto que essa ferramenta
atende desde pequenos programas isolados até grandes soluções integradas, desde sua interface básica via console
até complexos portais web.
GABARITO
Questão 1

Resposta: A solução seguinte é um exemplo de resposta, sendo a intenção desta pergunta a de analisar se você
REFERÊNCIAS entendeu o conceito de solução/projeto.

GDAL (Geospatial Data Abstraction Library). Comma Separated Values (.csv). Disponível em: <http://www.gdal.org/drv_csv. Solução – Parque de Diversões
html>. Acesso em: 12 set. 2014.
- Projeto – Windows Form – Venda de ingressos.
LOTAR, Alfredo. Como Melhorar a Performance de Websites .NET. Os segredos dos sites de alto desempenho. 1. ed. São
Paulo: Novatec, 2013. - Projeto – Windows Form – Controle de chamados de manutenção.

MSDN. Visual Studio. 2013. Disponível em: <http://msdn.microsoft.com/pt-br/library/dd831853.aspx>. Acesso em 02.09.2014. - Projeto – Console Application – Controle de catraca.
________. .NET Framework 4.5. Disponível em: KWWSPVGQPLFURVRIWFRPSWEUOLEUDU\Z[F Y YV DVS[!. Acesso em - Projeto – WebForm – Site de vendas.
02.09.2014.
- Projeto – WebForm – Site institucional.

  

Questão 2 { }

Resposta: Alternativa A e D. Boolean tudoOk = true; if (percentual < 7.4 | percentual > 27.8)

São as duas opções corretas, já citadas no texto. As demais são apenas siglas que possuem a palavra framework Console.WriteLine(“Exercicio 04”); {
integrando o seu nome. Console.WriteLine(“=================”); Console.WriteLine(“ - Percentual deve estar entre 7.4% e 27.8%”);
Questão 3 Console.Write(“Nome: “); tudoOk = false;

Resposta: Alternativa C e D. string nome = Console.ReadLine(); }

São os dois recursos abordados no decorrer do caderno como opções para executar depuração. Console.Write(“Sobrenome: “); if ((bonus != “S”) & (bonus != “N”))
string sobrenome = Console.ReadLine(); {
Os demais são:
Console.Write(“Cargo: “); Console.WriteLine(“ - Bonus deve ser registrado como S ou N”);
‡ Build: comando para compilar e gerar executável do projeto.
string cargo = Console.ReadLine(); tudoOk = false;
‡ Toolbox: dock no qual são armazenados todos os objetos visuais a serem utilizados em um projeto Windows Form
Application. Console.Write(“Salário Atual: “); }
double salAtual = Convert.ToDouble(Console.ReadLine()); if (tudoOk)
‡ TextBox: objeto visual que cria uma caixa de textos em um formulário do Windows Form Application ou de um
WebForm. Console.Write(“Taxa percentual: “); {

Questão 4 double percentual = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(“ - Nenhum erro encontrado”);


Resposta: Console.Write(“Bônus? S/N): “); }
using System; string bonus = Console.ReadLine(); Console.WriteLine(“=================”);
using System.IO; Console.WriteLine(“Erros Encontrados: “); if (tudoOk)
namespace TADSConsoleApp Console.WriteLine(“=================”); {
{ if (nome == “” | sobrenome == “”) double novoSalario = salAtual + (salAtual*percentual/100);
class Ex04 { if (bonus == “S”)
{ Console.WriteLine(“ - Deve ser digitado nome e sobrenome”); {
static void Main(string[ ] args) tudoOk = false; novoSalario += 230;

  
} } }

Console.WriteLine(“=================”); if (tudoOk)

Console.WriteLine(“{0} {1}, {2} - Novo Salário: {3}”, nome, sobrenome, cargo, novoSalario ); private void btnProcessar_Click(object sender, EventArgs e) {

} { double novoSalario = salario + (salario * percentual / 100);

Console.ReadKey(); listBox1.Items.Clear(); if (ckbBonus.Checked)

} {

} double salario = Convert.ToDouble(txbSalario.Text); novoSalario += 230;

} double percentual = Convert.ToDouble(txbPercentual.Text); }

Clique aqui para retornar na sessão Agora é Sua Vez


lblResultado.Text = (txbNome.Text + “ “ + txbSobrenome.Text + “, “ + cbxCargo.SelectedItem + “ - Novo Salario:
R$” + novoSalario.ToString());
if (txbNome.Text == “” | txbSobrenome.Text == “”)
Questão 5 lblResultado.Visible = true;
{
Resposta: }
listBox1.Items.Add(“Nome e Sobrenome precisa ser preenchido”);
using System; }
tudoOk = false;
using System.Windows.Forms; private void Ex05_Load(object sender, EventArgs e)
}
namespace TADSWinFormApp {
if (percentual < 7.4 | percentual > 27.8)
{ cbxCargo.Items.Add(“Assistente”);
{
public partial class Ex05 : Form cbxCargo.Items.Add(“Analista”);
listBox1.Items.Add(“ - Percentual deve estar entre 7.4% e 27.8%”);
{ cbxCargo.Items.Add(“Coordenador”);
tudoOk = false;
Boolean tudoOk = true; cbxCargo.Items.Add(“Gerente”);
}
public Ex05() cbxCargo.Items.Add(“Diretor”);
if (tudoOk)
{ }
{
InitializeComponent(); [STAThread]
listBox1.Items.Add(“ - Nenhum erro encontrado”);

  

/LQJXDJHPGH3URJUDPDomR&RPHUFLDO
Autoria: Douglas Fugita de Oliveira Cesar
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Ex05());
}
}
}
Clique aqui para retornar na sessão Agora é Sua Vez

Tema 02
Conexão a Sistemas de Banco de Dados: Utilização do ADO .Net. Objetos
Connection, DataReader e DataAdapter. Data Form Wizard: Vinculando
Dados no Windows Forms e Web Forms. Comandos ASP.NET

7HPD PORDENTRODOTEMA
Conexão a Sistemas de Banco de Dados: Utilização do ADO .Net. Objetos Connection, DataReader e DataAdapter.
Data Form Wizard: Vinculando Dados no Windows Forms e Web Forms. Comandos ASP.NET 2$'21(7pHQFRQWUDGRQRQDPHVSDFH6\VWHP'DWDHSRVVXLXPDVpULHGHFRQHFWRUHVHVSHFt¿FRVTXHSRVVLELOLWDP
Autoria: Douglas Fugita de Oliveira Cesar CONVITEÀLEITURA a conexão com diversas bases de dados diferentes. Os principais provedores de dados são:
Como citar esse documento:
CEZAR, Douglas Fugita de Oliveira. Linguagem de Programação Comercial: Conexão a Sistemas de Banco de Dados: Utilização do ADO .Net.
‡ System.Data.SQLClient: Provedor de dados para SQL Server.
Este Caderno de Atividades foi elaborado com base no livro Políticas Públicas – Conceitos, esquemas de análise,
Objetos Connection, DataReader e DataAdapter. Data Form Wizard: Vinculando Dados no Windows Forms e Web Forms. Comandos ASP.NET.
Valinhos: Anhanguera Educacional, 2014. casos práticos, do autor Leonardo Secchi, editora Cengage Learning, 2011. Livro-Texto 405. ‡ System.Data.OracleClient: Provedor de dados para Oracle.

Índice Neste caderno você terá o conceito básico de um dos principais recursos do .NET Framework: o ADO.NET. ‡ System.Data.OleDb: Provedor de dados para OLE DB.

Essa excelente ferramenta facilita a conexão e o acesso às mais importantes fontes de dados, sejam elas bancos de ‡ System.Data.Odbc: Provedor de dados para conexões ODBC.
dados, arquivos CSV, sejam planilhas eletrônicas etc. Esse grande conjunto de classes pode ser dividido em outros dois
&DGDXPGRVSURYHGRUHVSRVVXLFDUDFWHUtVWLFDVHVSHFt¿FDVGHSHQGHQGRGRWLSRGHFRQH[mRDVHUHIHWXDGDYLVWRTXH
grandes grupos: os provedores de dados e o DataSet com seus DataTables e DataAdapters.
CONVITEÀLEITURA PORDENTRODOTEMA eles se conectam com sistemas diferentes. No entanto, do ponto de vista de implementação, todos eles possuem
Pág. 3 Pág. 3 Num primeiro momento, você estudará o modo como deve ser feita uma conexão com uma fonte de dados e as ferramentas semelhanças, facilitando assim o uso.
necessárias para que sejam extraídas ou atualizadas as informações contidas nas fontes.
3DUDDFRQH[mRGRSURJUDPDDXPDIRQWHGHGDGRVpXWLOL]DGRRREMHWR&RQQHFWLRQ$VVLPFRPRRVSUy[LPRVREMHWRVTXH
'HSRLVGH¿[DGRHVVHFRQFHLWRYRFrFRPSUHHQGHUiRXVRGR'DWD6HWREMHWRTXHDUPD]HQDQDPHPyULDXPDHVWUXWXUD serão abordados neste caderno, este está implementado em todos os provedores disponibilizados pelo namespasce
similar ao banco de dados, facilitando a manipulação destes pelo desenvolvedor. System.Data.

ACOMPANHENAWEB A única informação necessária para se criar um objeto Connection é uma Connection String (ou String de Conexão).
Pág. 21 Pág. 22
Essa string possui dados sobre qual tipo de arquivo será lido, onde esse arquivo se encontra, quais opções de segurança
serão utilizadas: usuário, senha etc. Em virtude de cada um dos sistemas ter necessidades diferentes, para cada tipo
diferente de acesso haverá diferentes Strings de Conexão.
PORDENTRODOTEMA Para o caso que pode ser visto na Figura 2.1, será utilizada uma String baseada em OLE DB, para acessar um arquivo
criado no Microsoft Access – o template Northwind. Detalhes para a obtenção desse template podem ser obtidos ao
Pág. 24 Pág. 24 Conexão a Sistemas de Banco de Dados – Utilização do ADO.NET. Objetos Connection, acessar o link sugerido na seção “Acompanhe na Web”.
DataReader e DataAdapter. Data Form Wizard: Vinculando Dados no Windows Forms e Web
Form. Comandos ASP.NET

21(7)UDPHZRUNSRVVXLXPFRQMXQWRGHFODVVHVHVSHFt¿FDVSDUDDPDQLSXODomRGHGDGRVHPEDVHVGHGDGRV
ou arquivos como XML, CSV, etc. Este conjunto é conhecido como ADO.NET, uma versão atualizada do antigo ADO
Pág. 25 Pág. 25 (ActiveX Data Objects).

‹ $QKDQJXHUD (GXFDFLRQDO 3URLELGD D UHSURGXomR ¿QDO RX SDUFLDO SRU TXDOTXHU PHLR GH LPSUHVVmR HP IRUPD LGrQWLFD UHVXPLGD RX PRGL¿FDGD HP OtQJXD
SRUWXJXHVDRXTXDOTXHURXWURLGLRPD

 

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


using System; 1D)LJXUDDSyVDFULDomRGDLQVWkQFLDGRREMHWR2OH'%&RQQHFWLRQDFRQH[mRIRLDEHUWDFRPRPpWRGR2SHQ H conn.Open();
encerrada pelo método Close(). Por boa prática, toda conexão que for aberta deve ser fechada. Agora que a conexão
using System.Windows.Forms; cmd.ExecuteReader();
foi estabelecida, as operações de manipulação dos dados podem ser realizadas, e isso se dará através do objeto
using System.Data.OleDb; Command, como mostrado na Figura 2.2. conn.Close();

namespace TADSWinFormApp using System;

{ using System.Windows.Forms; }

public partial class ConexADO : Form using System.Data.OleDb;

{ namespace TADSWinFormApp }

public ConexADO() { }

{ public partial class ConexADO : Form

InitializeComponent(); { Figura 2.2 Objeto Command

} public ConexADO() O construtor do objeto Command possui sobrecarga de parâmetros,HDRSomRXWLOL]DGDIRLDGHSDVVDURVSDUkPHWURV


{ com a query que será executada no banco de dados e o objeto Connection no qual será executado.
private void ConexADO_Load(object sender, EventArgs e)

{ InitializeComponent(); (PVHJXLGDIRLLQFOXtGRXPPpWRGR([HFXWH5HDGHU HQWUHDDEHUWXUDHRHQFHUUDPHQWRGDFRQH[mR(VVHPpWRGRVy


funcionará se a conexão do objeto Connection estiver aberta.
string strConnString = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB\Northwind. }
accdb;Persist Security Info=False;”; Existem três tipos possíveis de métodos de execução:
private void ConexADO_Load(object sender, EventArgs e)
OleDbConnection conn = new OleDbConnection(strConnString); ‡ ExecuteReader(): método para situações nas quais o comando utilizado retorna dados; por exemplo: SELECT.
{
conn.Open(); ‡ ExecuteScalar(): método para situações nas quais o retorno será um único valor; por exemplo: SELECT SUM,
string strConnString = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB\Northwind.
SELECT COUNT.
conn.Close(); accdb;Persist Security Info=False;”;
‡ ExecuteNonQuery(): método utilizado quando o comando que será executado não retorna dados; por exemplo:
} OleDbConnection conn = new OleDbConnection(strConnString);
Este bloco é o UPDATE, DELETE. No entanto, este método retornará o número de registros afetados pela execução.
} que representa a string query = “SELECT * FROM Funcionários”;
String de Conexão Para aumentar a segurança e evitar ataques do tipo SQL InjectionRREMHWR&RPPDQGSRVVLELOLWDRXVRGHSDUkPHWURV
} abordada no texto. OleDbCommand cmd = new OleDbCommand(query, conn); para situações em que se faz necessária a passagem de valores para a query. O seu uso é demonstrado na Figura 2.3.
Figura 2.1 Objeto Connection
  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
using System; FPG3DUDPHWHUV$GG QHZ2OH'E3DUDPHWHU ³#LGHQWL¿FDFDR´2OH'E7\SH,QWHJHU 9DOXH  namespace TADSWinFormApp

using System.Windows.Forms; cmd.Parameters.Add(new OleDbParameter(“@empresa”, OleDbType.VarChar)).Value = “NorthWind”; {

using System.Data.OleDb; cmd.Parameters.Add(new OleDbParameter(“@nome”, OleDbType.VarChar)).Value = “Douglas”; public partial class ConexADO : Form

namespace TADSWinFormApp cmd.Parameters.Add(new OleDbParameter(“@sobrenome”, OleDbType.VarChar)).Value = “Fugita”; {

{ cmd.Parameters.Add(new OleDbParameter(“@empresa”, OleDbType.VarChar)).Value = “douglas@nortwhindtraders. public ConexADO()


com”; {
public partial class ConexADO : Form
conn.Open(); InitializeComponent();
{ Este é o exemplo de utilização
cmd.ExecuteNonQuery(); do Command e de como se }
public ConexADO()
Gi D SDVVDJHP GH SDUkPHWURV
conn.Close(); private void ConexADO_Load(object sender, EventArgs e)
{ com a demonstração da sintaxe
} completa. sendo apresentados {
InitializeComponent(); respectivamente o campo a receber
} informações, o tipo de dado e as string strConnString = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB\Northwind.acc-
}
atribuições. db;Persist Security Info=False;”;
}
OleDbConnection conn = new OleDbConnection(strConnString);
)LJXUD3DUkPHWURVHPREMHWR&RPPDQG
private void ConexADO_Load(object sender, EventArgs e) string query = “SELECT * FROM Funcionários”;
O ExecuteScalar e o ExecuteNonQuery retornam um único valor, que pode ser armazenado em uma variável numérica.
{ Já o ExecuteReader retorna dados do tipo DataReader, que também faz parte do ADO.NET. OleDbCommand cmd = new OleDbCommand(query, conn);
string strConnString = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB\Northwind. 2'DWD5HDGHUpXPDFODVVHTXHGLVSRQLELOL]DDVLQIRUPDo}HVGHXPDFRQVXOWDDREDQFRGHGDGRVDWUDYpVGHXPÀX[R OleDbDataReader reader;
accdb;Persist Security Info=False;”; de dados, ou seja, os registros serão lidos um a um, sem possibilidade de voltar ao anterior. Um exemplo do uso do Da- conn.Open();
VWULQJTXHU\ ³,16(57,172)XQFLRQiULRV ,GHQWL¿FDomR(PSUHVD1RPH6REUHQRPH>(QGHUHoRGH(PDLO@  taReader é mostrado na Figura 2.4.
9$/8(6 #LGHQWL¿FDFDR#HPSUHVD#QRPH#VREUHQRPH#HPDLO ´ reader = cmd.ExecuteReader();
using System;
OleDbConnection conn = new OleDbConnection(strConnString); while (reader.HasRows)
using System.Windows.Forms;
{
OleDbCommand cmd = new OleDbCommand(query, conn); using System.Data.OleDb;
while (reader.Read())

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


{ Para trabalhos que não exigem manipulação dos dados, o DataReader é altamente indicado, pois aumenta o desempenho string strConnString = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB\Northwind.
durante a execução. No entanto, às vezes é necessário que haja manipulação dos dados recuperados de uma base de accdb;Persist Security Info=False;”;
txbFuncionarios.AppendText(reader.GetString(3)+” - “ + reader.GetString(4) + “\n”);
dados. Para isso, o ADO.NET implementa uma classe DataSet.
OleDbConnection conn = new OleDbConnection(strConnString);
}
2 'DWD6HW p XPD UHSUHVHQWDomR GH XPD EDVH GH GDGRV TXH p DORFDGD QD PHPyULD H DUPD]HQD XP FRQMXQWR GH
'DWD7DEOHVTXHSRUVXDYH]UHSUHVHQWDPWDEHODVGHQWURGHXPDEDVHGHGDGRVFRPVHXVWLSRVGH¿QLGRVLGHQWL¿FDomR string query = “SELECT * FROM Funcionários”;
reader.NextResult();
de chave primária, possibilidade de restringir valores nulos etc. OleDbCommand cmd = new OleDbCommand(query, conn);
}
Um objeto DataTable pode ser utilizado sem depender de um DataSet, e ele pode ser carregado através de um DataReader, OleDbDataReader reader;
conn.Close(); conforme mostrado na Figura 2.5.
} DataTable dtFuncionarios = new DataTable();
using System;
} conn.Open();
using System.Windows.Forms;
} reader = cmd.ExecuteReader();
using System.Data.OleDb;
dtFuncionarios.Load(reader);
using System.Data;
dgvFuncionarios.DataSource = dtFuncionarios;
namespace TADSWinFormApp
conn.Close();
{
}
public partial class ConexADO : Form
}
{

public ConexADO()

InitializeComponent();

private void ConexADO_Load(object sender, EventArgs e)


Figura 2.4 DataReader e resultado mostrado em um TextBox
{

  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
O processo de funcionamento do DataAdapter é criar um link entre o DataSet e a base de dados e, através do método Fill, OleDbDataAdapter adapter = new OleDbDataAdapter(query, strConnString);
atualizar os dados do DataSet. O método Fill age através de um objeto DataReader, que realiza consultas diretamente
na base de dados. Os objetos Command também são utilizados pelo DataAdapter para fazer o caminho inverso do Fill, DataSet dsNorthWind = new DataSet();
TXDQGRIRUQHFHVViULRDWXDOL]DURVGDGRVQDIRQWHGHGDGRV8PH[HPSORGHFULDomRGRFyGLJRGHXP'DWD$GDSWHU adapter.Fill(dsNorthWind, “TabFuncionarios”);
alimentando um DataSet pode ser visto na Figura 2.6.
dgvFuncionarios.DataSource = dsNorthWind;
using System;
dgvFuncionarios.DataMember = “TabFuncionarios”;
using System.Windows.Forms;
dgvFuncionarios.Refresh();
using System.Data.OleDb;
}
using System.Data;
}
namespace TADSWinFormApp
}
{

public partial class ConexADO : Form

public ConexADO()

InitializeComponent();

Figura 2.5 DataTable carregado por DataReader e resultado mostrado em um DataGridView }

Dessa forma, pode-se criar um DataSet manualmente e, então, incluir vários objetos DataTable também de forma manual. private void ConexADO_Load(object sender, EventArgs e)
No entanto, existe um objeto que pode auxiliar no processo de alimentação de um DataSet, que é o DataAdapter.
{
O processo de funcionamento do DataAdapter é criar um link entre o DataSet e a base de dados e, através do método Fill,
string strConnString = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB\Northwind.
atualizar os dados do DataSet. O método Fill age através de um objeto DataReader, que realiza consultas diretamente
accdb;Persist Security Info=False;”;
na base de dados. Os objetos Command também são utilizados pelo DataAdapter para fazer o caminho inverso do Fill,
Figura 2.6 DataAdapter alimentando um DataSet e resultado mostrado em um DataGridView
TXDQGRIRUQHFHVViULRDWXDOL]DURVGDGRVQDIRQWHGHGDGRV8PH[HPSORGHFULDomRGRFyGLJRGHXP'DWD$GDSWHU string query = “SELECT * FROM Funcionários”;

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


1D )LJXUD  SRGHVH SHUFHEHU TXH R PpWRGR )LOO p R UHVSRQViYHO SHOD FULDomR QmR Vy GRV UHJLVWURV PDV WDPEpP } }
GD HVWUXWXUD &DVR D HVWUXWXUD Mi H[LVWD R PpWRGR )LOO YDL VRPHQWH DWXDOL]DU RV GDGRV PDQWHQGRD FRPR VH GH¿QLX
anteriormente. private void btnCarregar_Click(object sender, EventArgs e) }

$ )LJXUD  PRVWUD R FyGLJR FRPSOHPHQWDU DR DQWHULRU FRP D RSomR GH VDOYDU RV GDGRV DOWHUDGRV QD WDEHOD { }
³7DE)XQFLRQDULRV´ GD IRQWH GH GDGRV &RP LVVR QmR VHUi QHFHVViULR GH¿QLU PDQXDOPHQWH R REMHWR &RPPDQG (P VWULQJTXHU\ ³6(/(&7,GHQWL¿FDomR(PSUHVD6REUHQRPH1RPH>(QGHUHoRGH(PDLO@)520)XQFLRQiULRV´ }
seguida, a Figura 2.8 mostra a execução do programa e o carregamento dos dados. A Figura 2.9, por sua vez, demonstra
o resultado do método Update() do objeto DataAdapter. adapter = new OleDbDataAdapter(query, strConnString); Figura 2.7 Método Update do objeto DataAdapter

using System; adapter.Fill(dsNorthWind, “TabFuncionarios”);

using System.Windows.Forms; dgvFuncionarios.DataSource = dsNorthWind;

using System.Data.OleDb; dgvFuncionarios.DataMember = “TabFuncionarios”;

using System.Data; dgvFuncionarios.Refresh();

namespace TADSWinFormApp }

public partial class ConexADO : Form private void btnSalvar_Click(object sender, EventArgs e)

{ {

string strConnString = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB\Northwind. DataSet dsAlteracoes = dsNorthWind.GetChanges();


accdb;Persist Security Info=False;”;
if (dsAlteracoes != null)
DataSet dsNorthWind = new DataSet();
{ Figura 2.8 Execução inicial, somente com a carga dos dados
OleDbDataAdapter adapter;
if (adapter.Update(dsAlteracoes, “TabFuncionarios”) > 0)
public ConexADO()
{
{
MessageBox.Show(“Tabela Atualizada!”);
InitializeComponent();
}

  
PORDENTRODOTEMA

ACOMPANHENAWEB AGORAÉASUAVEZ
MSDN – ADO.NET Instruções:
‡ Este portal conta com o material mais completo e atualizado sobre a tecnologia ADO.NET, Agora, chegou a sua vez de exercitar seu aprendizado. A seguir, você encontrará algumas questões de múltipla
demonstrando o uso de cada uma das classes que compõem esta biblioteca. Além disso, todos escolha e dissertativas. Leia cuidadosamente os enunciados e atente-se para o que está sendo pedido.
os conceitos e todas as alterações realizadas em cada versão estão disponíveis neste portal.
Questão 1
Disponível em: <http://msdn.microsoft.com/pt-br/library/e80y5yhx(v=vs.110).aspx>. Acesso em: 5 set. 2014.
4XDLVVmRDVYDQWDJHQVQRXVRGHSDUkPHWURVGXUDQWHDH[HFXomRGRREMHWR&RPPDQG"
SQL Injection – Evitando brechas na segurança
Questão 2
‡ SQL Injection é um grande problema para querys criadas dinamicamente, durante a execução
do programa. Como essa é uma prática muito comum, saber como este ataque funciona e como Marque a seguir apenas as alternativas que indicam provedores de dados:
evitá-lo é primordial para qualquer programa comercial.
a) ( ) System.Data.SQLServer
Figura 2.9 Alteração do e-mail do segundo registro e operação de Update() Disponível em: <http://technet.microsoft.com/en-us/library/ms161953(v=sql.105).aspx>. Acesso em: 15 set.
2014. b)  6\VWHP'DWD2ඇH'%
&RP D DOWHUDomR GR UHJLVWUR PRVWUDGD QD )LJXUD  R 'DWD6HW UHVSRQViYHO SHOR DUPD]HQDPHQWR LGHQWL¿FD TXDLV
foram os registros que sofreram alterações e os atualiza na base de dados. Graças ao uso do método Update(), não foi c) ( ) System.Data.DataAdapter
Strings de Conexão
QHFHVViULRFULDUXPFRPDQGRHVSHFt¿FRSDUDDWXDOL]DomRGRVGDGRV
d) ( ) System.Data.DataSet
‡ Portal que disponibiliza strings de conexão para um grande número de fontes de dados.
e)  6\VWHP'DWD2UDFඇH&ඇLHQW
Disponível em: <http://www.connectionstrings.com>. Acesso em: 5 set. 2014.

Como instalar o template Northwind

‡ Este site mostra o processo para a instalação da base de dados Northwind, da Microsoft. Este
complexo exemplo simula a operação de uma empresa de vendas de produtos alimentícios.
Disponível em: <http://msdn.microsoft.com/pt-br/library/8b6y4c7s.aspx>. Acesso em: 5 set. 2014.

  

AGORAÉASUAVEZ
Questão 3

Assinale os casos nos quais é recomendado o uso do DataReader.


FINALIZANDO GLOSSÁRIO
a)  'DGRVTXHQHFHVVLWDPVHUDUPD]HQDGRVQDPHPyULDSDUDPDQLSXඇDomR Neste tema você pôde entrar em contato com um dos principais componentes do .NET Framework, o ADO.NET, SQL Injection:WLSRGHDPHDoDjVHJXUDQoDGDEDVHGHGDGRVTXHLQVHUHWUHFKRVGHFyGLJRVLOHJDLVGHQWURGHXPD
b)  'DGRVTXHVHUmRXWLඇL]DGRVVRPHQWHSDUDඇHLWXUD conjunto de classes que faz todo o trabalho de conexão e comunicação com uma fonte de dados. instrução SQL, aproveitando brechas deixadas pelo programador. Ao concatenar uma string que representa uma query,
RLQYDVRUSRGHUiLQFOXLUFRPDQGRVSDUDEXUODUXPDFRQGLomRGHFRPSDUDomRPRGL¿FDUUHJLVWURVRXDWpGHVWUXLUDEDVH
c)  1HFHVVLGDGHGHHVWDEHඇHFHUඇLJDomRFRPXP'DWD6HW Esse recurso é essencial para a existência de um sistema comercial, que é fortemente apoiado em bases de dados. de dados.
d) ( ) Processamento com necessidade de conexão aberta. Embora os exemplos mostrados neste caderno tenham sido simples, a forma de uso desses componentes é a mesma, Sobrecarga de parâmetros:IXQo}HVFRPRPHVPRQRPHPDVTXHUHFHEHPTXDQWLGDGHVWLSRVGLIHUHQWHVGHSDUkPH-
YDULDQGRVRPHQWHQDFRPSOH[LGDGHGDTXHU\RXQDTXDQWLGDGHGHSDUkPHWURVHWDEHODVDVHUHPFRQHFWDGRV tros.
Questão 4 OLE DB: API desenvolvida pela Microsoft para acesso a banco de dados com base em objetos COM.
Estabeleça conexão com uma planilha Excel e exiba seus dados através de um DataReader. ODBC:PpWRGRTXHIDFLOLWDRDFHVVRDGLYHUVRVEDQFRVGHGDGRVVHPQHFHVVLGDGHGHFRPSRQHQWHVHVSHFt¿FRV6LJOD
para Open Database Connectivity.
Questão 5 Template Northwind:WHPSODWHGLVSRQLELOL]DGRSHOD0LFURVRIWSDUDGHPRQVWUDomRGHVHXVSURGXWRVGDVXtWH2I¿FH1D
REFERÊNCIAS seção “Acompanhe na Web” você pode acessar um link com o roteiro para instalação deste produto.
&RPEDVHQRFyGLJRIRQWHGD4XHVWmRLPSOHPHQWHXP'DWD6HWTXHUHFHEDRVGDGRVGDSODQLOKD([FHODWUDYpVGHXPREMHWR
DataAdapter. Exiba o resultado em um DataGridView. CONNECTION STRINGS. The Connection Strings Reference. Disponível em: <http://www.connectionstrings.com/>. Acesso em:
5 set. 2014.
LOTAR, Alfredo. Como Melhorar a Performance de Websites .NET. Os segredos dos sites de alto desempenho. 1. ed. São
Paulo: Novatec, 2013.
MICROSOFT. SQL Injection. (Evitando brechas na segurança). Technet. Disponível em: <http://technet.microsoft.com/en-us/ GABARITO
library/ms161953(v=sql.105).aspx>. Acesso em: 15 set. 2014.
MSDN. ADO.NET. Disponível em: <http://msdn.microsoft.com/pt-br/library/e80y5yhx(v=vs.110).aspx>. Acesso em: 5 set. 2014. Questão 1:

________. Como instalar bancos de dados de exemplo. (Template Northwind). Disponível em: <http://msdn.microsoft.com/pt-br/ Resposta: (PERUD VHMDP QHFHVViULDV PDLV OLQKDV GH FyGLJR DR SURJUDPD RV SDUkPHWURV VmR HVVHQFLDLV SDUD D
library/8b6y4c7s.aspx>. Acesso em: 5 set. 2014. VHJXUDQoDHRPHOKRUHQWHQGLPHQWRGRFyGLJR(VVHUHFXUVRDX[LOLDDYHUL¿FDURWLSRTXHHVWiVHQGRSDVVDGRSDUDTXHU\
e garante que nenhum comando será embutido na query sem ser desejado.

  
/LQJXDJHPGH3URJUDPDomR&RPHUFLDO
Autoria: Douglas Fugita de Oliveira Cezar
Questão 2

Resposta: Alternativa “B” e “E”. São provedores de dados mostrados neste caderno.

Para os demais:

‡ System.Data.SQLServer – este provedor não existe. O acesso ao SQL Server é feito pelo System.Data.SQLCLient.

‡ 6\VWHP'DWD'DWD$GDSWHU±FODVVHTXHGH¿QHR'DWD$GDSWHUTXHUHDOL]DWRGDVFRQH[}HVHQWUH'DWD6HWHIRQWHV
de dados. Utiliza-se de um provedor de dados, mas não é um deles.

‡ 6\VWHP'DWD'DWD6HW±FODVVHTXHGH¿QHR'DWD6HWFRPSRQHQWHLPSRUWDQWHGR$'21(7(QWUHWDQWRQmRpXP
provedor de dados.

Questão 3

Resposta: Alternativa “B” e “D”. Conforme visto neste caderno, caso sejam necessárias manipulações nos dados
recuperados, é indicado o uso de DataSet em conjunto com DataAdapter. Para casos de ligações com DataSet, o
DataReader é utilizado, mas seu uso é feito implicitamente por um DataAdapter.

Questão 4
Resposta:2UHVXOWDGRVHUiSDUHFLGRFRPRFyGLJRIRQWHGD)LJXUD

A diferença será a Connection String que deve ser a seguinte:

VWULQJ &RQQ6WULQJ  #´3URYLGHU 0LFURVRIW$&(2/('%'DWD 6RXUFH >/2&$/ 21'( (67,9(5 2


$548,92@([WHQGHG3URSHUWLHV ´´([FHO;PO+'5 <(6´´´

Ou então:

VWULQJ&RQQ6WULQJ #´3URYLGHU 0LFURVRIW-(72/('%'DWD6RXUFH >/2&$/21'((67,9(52$548,92@([WHQGHG


3URSHUWLHV ´´([FHO+'5 <(6´´´
Tema 03
Questão 5
Melhoria do Desempenho das Aplicações Web com Páginas e Controles
Resposta:2FyGLJRGHYHUiVHUVLPLODUDRGD)LJXUDGHYHQGRVHUDOWHUDGDD6WULQJGH&RQH[mRFRPRPRVWUDGRQD
Questão 4.
do ASP.NET. Código Gerenciado


7HPD PORDENTRODOTEMA
Melhoria do Desempenho das Aplicações Web com Páginas e Controles do ASP.NET. Código Gerenciado 2 :HE )RUP HVWi HQWUH HVWHV GRLV FRQFHLWRV &RP HOH DV UHJUDV GH QHJyFLR RX D SURJUDPDomR SRGH VHU JHUDGD
Autoria: Douglas Fugita de Oliveira Cezar
CONVITEÀLEITURA separadamente dos arquivos de tags HTML. As funções que possibilitam arrastar e soltar controles estão presentes
Como citar esse documento: WDPEpPSDUDHVWHWLSRGHGHVHQYROYLPHQWRPDQWHQGRDVIDFLOLGDGHVMiDSUHQGLGDVQDIHUUDPHQWD9LVXDO6WXGLR
CEZAR, Douglas Fugita de Oliveira. Linguagem de Programação Comercial: Melhoria do Desempenho das Aplicações Web com Páginas e
Controles do ASP.NET. Código Gerenciado. Caderno de Atividades. Valinhos: Anhanguera Educacional, 2014.
O Visual Studio pode ser utilizado também para a criação de aplicações web e esse será o tema deste caderno. 3DUDLQLFLDUXPSURMHWRGHXPDDSOLFDomR:(%GHYHVHUFULDGRXPQRYRSURMHWRFRPRWHPSODWH$631(7:HE$SSOLFDWLRQ
Através da tecnologia ASP.NET, o desenvolvedor ganha um enorme poder de controle sobre a aplicação WEB, e aqui como mostrado na Figura 3.1.
Índice você encontrará uma série de recursos que o auxiliarão durante a tarefa de desenvolvimento.

Será mostrada uma forma mais estruturada de programar para aplicações web, na qual cada camada tem seu local
WRWDOPHQWHGH¿QLGRVHMDHODDFDPDGDGHDSUHVHQWDomRGHUHJUDGHQHJyFLRRXGHGDGRV&RPLVVRDOpPGHPDLRU
RUJDQL]DomRH[LVWHWDPEpPPDLRUVHJXUDQoDQRPRPHQWRGDSXEOLFDomRYLVWRTXHDUHJUDGHQHJyFLRV¿FDSURWHJLGD
CONVITEÀLEITURA PORDENTRODOTEMA do arquivo que é responsável por carregar o HTML que será interpretado pelo servidor.
Pág. 3 Pág. 3

ACOMPANHENAWEB PORDENTRODOTEMA
Pág. 23 Pág. 23

Melhoria do Desempenho das Aplicações WEB com Páginas e controles do ASP.NET. Código
Gerenciado

O ASP.NET surgiu como uma evolução da tecnologia ASP (Active Server Pages), sendo uma implementação do
.net Framework para aplicações web. Assim como visto no caderno referente às aplicações desktop, o ASP.NET também
Pág. 25 Pág. 25
VHXWLOL]DGD&/5 &RPPRQ/DQJXDJH5XQWLPH HGD)&/ )UDPHZRUN&ODVV/LEUDU\ 2:HE)RUPHVWiSDUDDVSiJLQDV
web como o Windows Form está para os aplicativos Desktop.

Além do Web Form, que será utilizado como base para este caderno, o ASP.NET também conta com outras formas de
JHUDUSiJLQDVZHETXHVmRDV:HE3DJHVHR09&

Pág. 26 Pág. 26
$V:HE3DJHVVmRXWLOL]DGDVGDPHVPDIRUPDTXHR3+3RX$63FOiVVLFRRXVHMDFRPDVOLQKDVGHFRPDQGRH
as tags HTMLMXQWDVQRPHVPRDUTXLYR-iR09& 0RGHO9LHZ&RQWUROOHU YLVDVHSDUDUDVUHJUDVGHQHJyFLRGD Figura 3.1 &ULDomRGHXPQRYRSURMHWR

‹ $QKDQJXHUD (GXFDFLRQDO 3URLELGD D UHSURGXomR ¿QDO RX SDUFLDO SRU TXDOTXHU PHLR GH LPSUHVVmR HP IRUPD LGrQWLFD UHVXPLGD RX PRGL¿FDGD HP OtQJXD DSUHVHQWDomRFRPFRQWUROHWRWDOGR+70/JHUDGRHPDLRUIDFLOLGDGHDRXWLOL]DU-DYDVFULSWHPVXDVSiJLQDV $)LJXUDPRVWUDDHVWUXWXUDGHDUTXLYRVHSDVWDVFULDGDDXWRPDWLFDPHQWHSDUDHVWHQRYRSURMHWR
SRUWXJXHVDRXTXDOTXHURXWURLGLRPD

 
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
‡ 6LWHPDVWHUSiJLQDXWLOL]DGDSDUDDUPD]HQDUROD\RXWEiVLFRGHXPVLWHVHQGRTXHSRGHPVHUGH¿QLGDVSiJLQDV 1D)LJXUDpH[LELGRRFyGLJRGDSiJLQD'HIDXOWDVS[TXHJHURXDVDtGDPRVWUDGDQD)LJXUD
³¿OKDV´TXHFDUUHJDUmRWRGDDGH¿QLomRFULDGDQR6LWHPDVWHU
#3DJH7LWOH ´+RPH3DJH´/DQJXDJH ´&´0DVWHU3DJH)LOH ´a6LWHPDVWHU´$XWR(YHQW:LUHXS ´WUXH´
‡ Default.aspx: ao entrar na aplicação, por padrão, esta é a primeira página a ser executada ou acessada.
&RGH%HKLQG ´'HIDXOWDVS[FV´,QKHULWV ´7$'6:HE$SSB'HIDXOW´!
‡ 6W\OHV?6LWHFVVDUTXLYRTXHDUPD]HQDDIROKDGHHVWLOR &DVFDGH6W\OH6KHHW XWLOL]DGDQRDUTXLYR'HIDXOWDVS[

‡ 3URSHUWLHV?$VVHPEO\,QIRFVDUPD]HQDLQIRUPDo}HVGHDVVHPEO\WDLVFRPRYHUVmRQRPHGDDSOLFDomRQRPHGR
produto, empresa criadora etc. DVS&RQWHQW,' ´+HDGHU&RQWHQW´UXQDW ´VHUYHU´&RQWHQW3ODFH+ROGHU,' ´+HDG&RQWHQW´!

3DUD H[HFXWDU H YHU R UHVXOWDGR GR SURMHWR TXH IRL FULDGR SHOR WHPSODWH$631(7 :HE$SSOLFDWLRQ EDVWD VHOHFLRQDU DVS&RQWHQW!
'HEXJ!6WDUW'HEXJJLQJRXHQWmRXVDURDWDOKR)&RPLVVRR9LVXDO6WXGLRIRUQHFHXPVHUYLGRUZHEORFDOSDUDTXH
DVS&RQWHQW,' ´%RG\&RQWHQW´UXQDW ´VHUYHU´&RQWHQW3ODFH+ROGHU,' ´0DLQ&RQWHQW´!
a página possa ser visualizada, como mostra a Figura 3.3.
<h2>

Welcome to ASP.NET!

K!

<p>

7ROHDUQPRUHDERXW$631(7YLVLWDKUHI ´KWWSZZZDVSQHW´WLWOH ´$631(7:HEVLWH´!ZZZDVSQHWD!

S!

<p>

Figura 3.2 Solution Explorer


<RXFDQDOVR¿QGDKUHI ´KWWSJRPLFURVRIWFRPIZOLQN"/LQN,'  DPSFOFLG [´

Nesta estrutura, os principais arquivos são: WLWOH ´06'1$631(7'RFV´!GRFXPHQWDWLRQRQ$631(7DW06'1D!

‡ :HEFRQ¿JDUTXLYR;0/TXHDUPD]HQDWRGDVDVLQIRUPDo}HVUHIHUHQWHVDRSURMHWRWDLVFRPRUHIHUrQFLDVVWULQJV S!
de conexão, formas de login etc. DVS&RQWHQW!
‡ *OREDODVD[GH¿QHRTXHVHUiH[HFXWDGRQRQtYHOGHDSOLFDomRSRUH[HPSORTXDQGRIRULQLFLDGDRXHQFHUUDGD Figura 3.4 &yGLJRIRQWH'HIDXOWDVS[
uma aplicação ou sessão.
Figura 3.3 'HEXJHYLVXDOL]DomRGRSURMHWR

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


(VWH FyGLJR p PXLWR VHPHOKDQWH DR +70/ FOiVVLFR Vy TXH QHOH HVWmR LQVHULGRV DOJXQV FRPSRQHQWHV GR$631(7 GLYFODVV ´WLWOH´! DVS0HQX,WHP1DYLJDWH8UO ´a'HIDXOWDVS[´7H[W ´+RPH´!
LQGLFDGRV SHOD SDODYUD ³DVS´ QR LQtFLR GD WDJ +70/ SRU H[HPSOR ³DVS&RQWHQW´ $ ¿QDOL]DomR GD WDJ VH Gi GD
mesma forma que o HTML, utilizando a barra invertida antes do nome da tag que será encerrada. Pode ser vista como <h1> DVS0HQX,WHP1DYLJDWH8UO ´a$ERXWDVS[´7H[W ´$ERXW´!
H[HPSORQD)LJXUDDWDJGHHQFHUUDPHQWRDVS&RQWHQW!
0\$631(7$SSOLFDWLRQ ,WHPV!
(VWH FyGLJR SRVVXL R DUJXPHQWR 0DVWHU3DJ)LOH QD WDJ 3DJH ,VWR LQGLFD TXH HVWD SiJLQD HVWi UHODFLRQDGD FRP XPD
K! DVS0HQX!
SiJLQDPHVWUHTXHFRQWpPWRGDDSDUWHJUi¿FDGRVLWH2FyGLJRIRQWHGD0DVWHU3DJH6LWHPDVWHUpH[LELGRQD)LJXUD
3.5. GLY! GLY!
# 0DVWHU /DQJXDJH ´&´ $XWR(YHQW:LUHXS ´WUXH´ &RGH%HKLQG ´6LWHPDVWHUFV´ ,QKHULWV ´7$'6:HE$SS GLYFODVV ´ORJLQ'LVSOD\´! GLY!
6LWH0DVWHU´!
DVS/RJLQ9LHZ,' ´+HDG/RJLQ9LHZ´UXQDW ´VHUYHU´(QDEOH9LHZ6WDWH ´IDOVH´! GLYFODVV ´PDLQ´!
$QRQ\PRXV7HPSODWH! DVS&RQWHQW3ODFH+ROGHU,' ´0DLQ&RQWHQW´UXQDW ´VHUYHU´!
'2&7<3(KWPO38%/,&³:&'7';+70/6WULFW(1´³KWWSZZZZRUJ75[KWPO'7'[KWPOVWULFWGWG´!
>DKUHI ´a$FFRXQW/RJLQDVS[´,' ´+HDG/RJLQ6WDWXV´UXQDW ´VHUYHU´!/RJ,QD!@ GLY!
KWPO[POQV ´KWWSZZZZRUJ[KWPO´[POODQJ ´HQ´! $QRQ\PRXV7HPSODWH! GLYFODVV ´FOHDU´!
KHDGUXQDW ´VHUYHU´! /RJJHG,Q7HPSODWH! GLY!
WLWOH!WLWOH! :HOFRPHVSDQFODVV ´EROG´!DVS/RJLQ1DPH,' ´+HDG/RJLQ1DPH´UXQDW ´VHUYHU´!VSDQ!
GLY!
OLQNKUHI ´a6W\OHV6LWHFVV´UHO ´VW\OHVKHHW´W\SH ´WH[WFVV´! >DVS/RJLQ6WDWXV,' ´+HDG/RJLQ6WDWXV´UXQDW ´VHUYHU´/RJRXW$FWLRQ ´5HGLUHFW´/RJRXW7H[W ´/RJ2XW´
GLYFODVV ´IRRWHU´!
DVS&RQWHQW3ODFH+ROGHU,' ´+HDG&RQWHQW´UXQDW ´VHUYHU´! /RJRXW3DJH8UO ´a´!@

DVS&RQWHQW3ODFH+ROGHU! /RJJHG,Q7HPSODWH!
GLY!
DVS/RJLQ9LHZ!
KHDG!
IRUP!
GLY!
ERG\!
ERG\!
GLYFODVV ´FOHDUKLGH6NLSOLQN´!
IRUPUXQDW ´VHUYHU´!
KWPO!
                DVS0HQX ,' ´1DYLJDWLRQ0HQX´ UXQDW ´VHUYHU´ &VV&ODVV ´PHQX´ (QDEOH9LHZ6WDWH ´IDOVH´
GLYFODVV ´SDJH´!
,QFOXGH6W\OH%ORFN ´IDOVH´2ULHQWDWLRQ ´+RUL]RQWDO´! Figura 3.5 &yGLJRIRQWH6LWHPDVWHU
GLYFODVV ´KHDGHU´!
,WHPV!

  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
1HVWD¿JXUDSRGHVHUQRWDGRRFRPSRQHQWH&RQWHQW3ODFH+ROGHUTXHQDGDPDLVpTXHXPORFDOUHVHUYDGRSDUDDV GLYFODVV ´SDJH´! $RFULDUXPDQRYDSiJLQDXWLOL]DQGRRWHPSODWH6LWHPDVWHUFRPRSiJLQDPHVWUHpFULDGDDHVWUXWXUDH[LELGDQD)LJXUD
páginas que utilizarão o Site.master como página mestre. Ele pode ser mais bem observado no modo Design, que pode
VHUYLVWRQD)LJXUD GLYFODVV ´KHDGHU´! #3DJH7LWOH ´´/DQJXDJH ´&´0DVWHU3DJH)LOH ´a6LWH0DVWHU´$XWR(YHQW:LUHXS ´WUXH´&RGH%HKLQG ´:HE)RUP
DVS[FV´,QKHULWV ´7$'6:HE$SS:HE)RUP´!
....
DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´+HDG&RQWHQW´UXQDW ´VHUYHU´!
GLY!
DVS&RQWHQW!
GLYFODVV ´PDLQ´!
DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´0DLQ&RQWHQW´UXQDW ´VHUYHU´!
<h2>
DVS&RQWHQW!
Welcome to ASP.NET!
Figura 3.8 Nova página
K!
&RP LVVR TXDOTXHU LQIRUPDomR D VHU H[LELGD QD SiJLQD GHYHU VHU FRORFDGD GHQWUR GR &RQWHQW TXH ID] UHIHUrQFLD j
<p> ³0DLQ&RQWHQW´$)LJXUDPRVWUDFRPR¿FDUiRPHVPRFyGLJRDSyVDLQVHUomRGRVREMHWRVEXWWRQHODEHOFDGDXP
GHQWURGHXPSDUiJUDIR3DUDLQVHULUFRPSRQHQWHVYLVXDLVEDVWDFOLFDUHDUUDVWDUSDUDRORFDOGRFyGLJRRXGDWHODGH
7ROHDUQPRUHDERXW$631(7YLVLWDKUHI ´KWWSZZZDVSQHW´WLWOH ´$631(7:HEVLWH´!ZZZDVSQHWD! GHVLJQRQGHGHYH¿FDURFRPSRQHQWH
S!

<p>

<RXFDQDOVR¿QGDKUHI ´KWWSJRPLFURVRIWFRPIZOLQN"/LQN,'  DPSFOFLG [´

WLWOH ´06'1$631(7'RFV´!GRFXPHQWDWLRQRQ$631(7DW06'1D!
Figura 3.6 Detalhe do Site.master, no modo Design
S!
2HVSDoRHPGHVWDTXHPRVWUDDiUHDTXHVHUiDEUDQJLGDSHOR&RQWHQ3ODFH+ROGHUGH¿QLGRFRPDLG³0DLQ&RQWHQW´
GLY!
6XD UHODomR SRGH VHU SHUFHELGD FRP RV FRPSRQHQWHV &RQWHQW GD )LJXUD  2 FRPSRQHQWH DVS&RQWHQW 
GLYFODVV ´IRRWHU´!
&RQWHQW3ODFH+ROGHU,' ´0DLQ&RQWHQW´! GD )LJXUD  LQGLFD TXH WXGR R TXH HVWLYHU FRQWLGR QHOH VHUi H[LELGR QR
&RQWHQW3ODFH+ROGHU³0DLQ&RQWHQW´GRVLWHPHVWUHRFDPSRHPGHVWDTXHGD)LJXUD$RWUDGX]LUSDUDR+70/TXH GLY!
VHUiH[LELGRDRXVXiULR¿QDORFyGLJR¿FDFRPRRPRVWUDGRQD)LJXUD1RWHTXHIRLVHOHFLRQDGRVRPHQWHXPWUHFKR
GRFyGLJRHRFRQWH~GRGRGLY³KHDGHU´IRLVXSULPLGR GLY!
Figura 3.7 Trecho do HTML gerado para exibição no cliente

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


#3DJH7LWOH ´´/DQJXDJH ´&´0DVWHU3DJH)LOH ´a6LWH0DVWHU´$XWR(YHQW:LUHXS ´WUXH´&RGH%HKLQG ´:HE)RUP $RFOLFDUGXDVYH]HVQRERWmRHPPRGRGHVLJQpFULDGRRDUTXLYR:HE)RUPDVS[FVTXHDUPD]HQDUiWRGDDOyJLFDGH
DVS[FV´,QKHULWV ´7$'6:HE$SS:HE)RUP´! QHJyFLRSRUWUiVGRSURFHVVDPHQWRGDSiJLQD1D)LJXUDpH[LELGRRFyGLJRIRQWHFULDGRDXWRPDWLFDPHQWHDSHQDV
FRPDLQVHUomRGHXPDOLQKDSDUDDH[LELomRGDIUDVH³+HOOR:RUOG´QRFRPSRQHQWHOEO+:
DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´+HDG&RQWHQW´UXQDW ´VHUYHU´!
DVS&RQWHQW! XVLQJ6\VWHP

DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´0DLQ&RQWHQW´UXQDW ´VHUYHU´! namespace TADSWebApp


<p> {
DVS/DEHO,' ´OEO+:´UXQDW ´VHUYHU´7H[W ´´!DVS/DEHO! SXEOLFSDUWLDOFODVV:HE)RUP6\VWHP:HE8,3DJH
S!
{
<p>
SURWHFWHGYRLG3DJHB/RDG REMHFWVHQGHU(YHQW$UJVH
DVS%XWWRQ,' ´EWQ3URFHVVDU´UXQDW ´VHUYHU´7H[W ´3URFHVVDU´!
{
S!
DVS&RQWHQW! }

SURWHFWHGYRLGEWQ3URFHVVDUB&OLFN REMHFWVHQGHU(YHQW$UJVH

{ Figura 3.10 Hello World

OEO+:7H[W ³+HOOR:RUOG´ $RLQLFLDUDSiJLQDSHODSULPHLUDYH]pGLVSDUDGRRHYHQWR2Q,QLW QRTXDORVFRQWUROHVDLQGDQmRIRUDPrenderizados,


RXVHMDFRQYHUWLGRVHLQWHUSUHWDGRVSHORFRPSLODGRU(PVHJXLGDLQLFLDVHRHYHQWRSDJHB/RDG QRTXDOGXUDQWHR
} carregamento da página, podem ser inicializados alguns componentes, inclusive dando valores iniciais a componentes
HYDULiYHLV$SyVHVWHVHYHQWRVDSiJLQDpFDUUHJDGDSDUDRXVXiULR
}
4XDQGRRXVXiULRUHDOL]DTXDOTXHUDomRQDSiJLQDTXHHQYROYDRHQYLRGHLQIRUPDo}HVSDUDRVHUYLGRUPHVPRTXHVHMD
}
SDUDXPVLPSOHVSURFHVVDPHQWRHVWHSURFHVVRpFKDPDGRGHSRVWEDFN&RPLVVRDRFOLFDUHPXPFRPSRQHQWHTXH
UHDOL]HRSRVWEDFNFRPRSRUH[HPSORXPERWmRDSiJLQDpH[HFXWDGDQRYDPHQWHGLVSDUDQGRRHYHQWR2Q,QLW1HVWH
momento, os valores e estados de componentes são recuperados, graças ao uso interno do ViewState. Logo, caso
algum controle tenha sido preenchido (textbox) ou então selecionado (radio button, checklists, combobox), este valor é
Figura 3.9 Nova página, com os componentes label e Button recuperado.

  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
1RHQWDQWRTXDQGRSDVVDSDUDRSUy[LPRHYHQWRRSDJHB/RDG DVYDULiYHLVHRVFRPSRQHQWHVTXHIRUDPLQLFLDGRV $ERROHDQD,V3RVW%DFNGDLQVWkQFLDGDSiJLQDDWXDO 3DJH FRQVHJXHLGHQWL¿FDUVHDH[HFXomRDWXDOpGHYLGDDXP
neste evento podem ser reiniciados, perdendo assim as informações que foram enviadas no postback. Para isso, é evento de postback ou não. A execução pode ser vista nas Figuras 3.12 e 3.13, respectivamente antes e depois do click
recomendado um simples controle durante a execução do Load, que é mostrado na Figura 3.11. do botão.

XVLQJ6\VWHP
namespace TADSWebApp
{
SXEOLFSDUWLDOFODVV:HE)RUP6\VWHP:HE8,3DJH
{
SURWHFWHGYRLG3DJHB/RDG REMHFWVHQGHU(YHQW$UJVH
{
LI 3DJH,V3RVW%DFN ^
OEO3DJH/RDG7H[W ³&DUUHJDGRQR3DJH/RDG6HP3RVW%DFN´
}else{
OEO3DJH/RDG7H[W ³&DUUHJDGRQR3DJH/RDG&RP3RVW%DFN´
}
} Figura 3.13 ([HFXomRDSyVRHYHQWRFOLFNGRERWmR

SURWHFWHGYRLGEWQ3URFHVVDUB&OLFN REMHFWVHQGHU(YHQW$UJVH 3DUDSXEOLFDUXPVLWHGHVHQYROYLGRQR9LVXDO6WXGLREDVWDFOLFDUFRPRERWmRGLUHLWRQRSURMHWR:HEHVHOHFLRQDU


DRSomR3XEOLVK )LJXUD HVHUiGDGRLQtFLRDRSURFHVVRGHSXEOLFDomR
{ Figura 3.12 Execução, antes do evento click do botão
}
}
}
Figura 3.11 8WLOL]DomRGR3RVW%DFN

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


A Figura 3.15 mostra a caixa de diálogo que guiará o processo de publicação. Para este caso, foi escolhida a geração Estrutura de desenvolvimento Estrutura de publicação
diretamente em uma pasta do computador, ao invés de publicar em um servidor Web.

Figura 3.15 &DL[DGHGLiORJR3XEOLVK:HE

3DUDSXEOLFDUHPXPVHUYLGRU:HEEDVWDFRSLDURFRQWH~GRGHVWDSDVWDSDUDRVHUYLGRUTXHDH[HFXWDUiFRPRQHW
)UDPHZRUN1D)LJXUDSRGHPVHUREVHUYDGDVDHVWUXWXUDGDSDVWDGHGHVHQYROYLPHQWRHDSDVWDTXHIRLJHUDGD Figura 3.16 Quadro comparativo entre a estrutura de desenvolvimento e a de publicação
para publicação.
eQRWiYHOTXHDSDVWDGHSXEOLFDomRpEDVWDQWHHQ[XWDHTXHRFyGLJRIRQWHFRPDVUHJUDVGHQHJyFLR¿FDSURWHJLGRHP
arquivos .dll, o que aumenta a segurança da aplicação.

Figura 3.14 0HQXGHFRQWH[WRGRSURMHWR:HE

  
AGORAÉASUAVEZ
Questão 2
ACOMPANHENAWEB FINALIZANDO
6HOHFLRQHDVHJXLURVREMHWRVTXHSRUSDGUmRH[HFXWDPSRVWEDFN

ASP.NET.
S a) ( ) Button. (PERUDRVH[HPSORVGHPRQVWUDGRVQHVWHFDGHUQRVHMDPVLPSOHVYRFrSRGHUiPHVFODURFRQKHFLPHQWRDGTXLULGR
( E O G G G M L O r G i O K L G L LG
neste tema com os temas anteriores, visto que a forma de utilização dos componentes e a forma de programação são
b)  /DEHඇ
‡ 3RUWDOGHVHQYROYLGRSHOD0LFURVRIWFRPXPJUDQGHQ~PHURGHUHFXUVRVSDUDTXHPTXHUREWHU idênticas.
PDLVLQIRUPDo}HVVREUHRXVRGDSODWDIRUPDQHWSDUDZHE&RQWDWDPEpPFRPXPIyUXPQR c) ( ) Textbox.
2XWURVPyGXORVWDPEpPFRPSOHPHQWDPRFRQKHFLPHQWRSDUDDXWLOL]DomRGHVWDIHUUDPHQWDWDOTXDORXVRGR+70/H
qual pessoas do mundo todo trocam informações sobre a utilização de recursos do ASP.NET. d)  &KHFN%R[ &66YLVWRVDQWHULRUPHQWH
'LVSRQtYHOHPKWWSZZZDVSQHW!$FHVVRHPVHW
e) ( ) LinkButton.

Universo .net.
Questão 3
‡ 6LWHFULDGRSHOREUDVLOHLUR-RVp&DUORV0DFRUDWWLFRQVLVWHHPXPSRUWDOFRPPXLWDLQIRUPDomR
VREUH GLYHUVDV WHFQRORJLDV TXH FHUFDP R XQLYHUVR QHW 8PD JUDQGH YDQWDJHP GD XWLOL]DomR 6HOHFLRQHRVDUTXLYRVTXHID]HPSDUWHGDJHUDomRSDGUmRGHXPSURMHWR:HE REFERÊNCIAS
deste portal é que ele está todo em português. a) ( ) WebForm1.aspx
/27$5$OIUHGRComo Melhorar a Performance de Websites .NET. Os segredos dos sites de alto desempenho. 1. ed. São
'LVSRQtYHOHPKWWSZZZPDFRUDWWLQHW!$FHVVRHPVHW b)  *ඇREDඇDVS[ 3DXOR129$7(&

c)  'HIDXඇWDVS[ 0,&5262)7$VSQHW'LVSRQtYHOHPKWWSZZZDVSQHW!$FHVVRHPVHW

d) ( ) Site.Master.aspx 0DFRUDWWLQHW'LVSRQtYHOHPKWWSZZZPDFRUDWWLQHW!$FHVVRHPVHW

AGORAÉASUAVEZ Questão 4

&ULHXPDSiJLQDTXHXWLOL]HXPREMHWR&DOHQGDUSDUDLPSULPLUHPXPREMHWR/DEHODGDWDHRGLDGDVHPDQDTXHHVWiVHOHFLRQDGR
Instruções: QRREMHWR2FDOHQGiULRGHYHVHULQLFLDOL]DGRGXUDQWHRHYHQWRGH/RDGWRPDQGRFXLGDGRFRPDXWLOL]DomRGRSRVWEDFN
$JRUDFKHJRXDVXDYH]GHH[HUFLWDUVHXDSUHQGL]DGR$VHJXLUYRFrHQFRQWUDUiDOJXPDVTXHVW}HVGHP~OWLSOD
HVFROKDHGLVVHUWDWLYDV/HLDFXLGDGRVDPHQWHRVHQXQFLDGRVHDWHQWHVHSDUDRTXHHVWiVHQGRSHGLGR
Questão 5
Questão 1
4XDLVVmRDVYDQWDJHQVGHXWLOL]DUDURWLQDGHSXEOLFDomRGRSURMHWR"
4XDOYDQWDJHPDSUHVHQWDRXVRGDHVWUXWXUDGHVLWHPHVWUH 6LWHPDVWHU HPUHODomRDXPDSiJLQD+70/QRUPDO"

  

Questão 3 Arquivo .aspx.cs


GLOSSÁRIO Resposta: $OWHUQDWLYD& XVLQJ6\VWHP
T
Tag HTML
HTML: marcação
ã em um arquivoi HTML que determina
d t i para o navegador
d que está tá visualizando
i li d a página
á i o que Somente esta opção existe na geração padrão. Os demais nomes são semelhantes, por exemplo, Global.aspx com
representa cada uma das informações do arquivo HTML. Por exemplo, dentro da tag <header> se encontram as infor *OREDODVD[H6LWHPDVWHUFRP6LWH0DVWHUDVS[-iRDUTXLYR:HE)RUPDVS[H[LVWHQRSURMHWRGDGRFRPH[HPSORPDV
namespace TADSWebApp
PDo}HVGRFDEHoDOKRHGHLGHQWL¿FDomRGRDUTXLYR foi criado durante o trabalho.
{
Renderizados:FULDURSURGXWR¿QDOGRREMHWRHPTXHVWmR1RFDVRGHXP7H[WER[VXDUHQGHUL]DomRVHULDDH[LELomR Questão 4
de uma caixa de textos que aguarda informações do usuário. SXEOLFSDUWLDOFODVV([6\VWHP:HE8,3DJH
Resposta: Arquivo .aspx
{
#3DJH7LWOH ´´/DQJXDJH ´&´0DVWHU3DJH)LOH ´a6LWH0DVWHU´$XWR(YHQW:LUHXS ´WUXH´&RGH%HKLQG ´([DVS[
FV´,QKHULWV ´7$'6:HE$SS([´! SURWHFWHGYRLG3DJHB/RDG REMHFWVHQGHU(YHQW$UJVH

DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´+HDG&RQWHQW´UXQDW ´VHUYHU´! {


GABARITO DVS&RQWHQW! LI ,V3RVW%DFN
DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´0DLQ&RQWHQW´UXQDW ´VHUYHU´! {
Questão 1
<p> FOG7$'66HOHFWHG'DWH 'DWH7LPH1RZ
Resposta: O programador deve se preocupar unicamente com as informações que serão mostradas em determinados
ORFDLV TXH VmR RV LQGLFDGRV SHOR &RQWHQW3ODFH+ROGHU7RGRV RV RXWURV HOHPHQWRV VmR GH UHVSRQVDELOLGDGH GR 6LWH DVS&DOHQGDU,' ´FOG7$'6´UXQDW ´VHUYHU´!DVS&DOHQGDU! }
master. S! }
Além disso, qualquer mudança gerada na interface do Site.master é replicada para todas as outras páginas que a <p>
utilizam como mestre.
DVS%XWWRQ,' ´EWQ3URFHVVDU´UXQDW ´VHUYHU´7H[W ´3URFHVVDU´ SURWHFWHGYRLGEWQ3URFHVVDUB&OLFN REMHFWVHQGHU(YHQW$UJVH
Questão 2
RQFOLFN ´EWQ3URFHVVDUB&OLFN´! {
Resposta: Alternativa A, E.
S! VWULQJD FOG7$'66HOHFWHG'DWH7R6KRUW'DWH6WULQJ 
2VREMHWRVODEHOHWH[WER[QmRGHQRWDPQHQKXPFRPDQGRGHHQYLRGHLQIRUPDomRHSRULVVRQmRJHUDPSRVWEDFN&RP <p>
RFKHFNER[pSRVVtYHOJHUDUSRVWEDFNPDVDSURSULHGDGH$XWR3RVW%DFNSRUSDGUmRYHPDMXVWDGDFRPR)DOVH OEO5HVXOW7H[W D
DVS/DEHO,' ´OEO5HVXOW´UXQDW ´VHUYHU´7H[W ´´!DVS/DEHO!
}
S!
}
DVS&RQWHQW!
}

  
/LQJXDJHPGH3URJUDPDomR&RPHUFLDO
Autoria: Douglas Fugita de Oliveira Cezar
Questão 5
Resposta: As vantagens apresentadas foram: o menor volume de arquivos e a segurança dos arquivos que contêm
FyGLJRIRQWH

Tema 04
Otimização do ADO.NET com SGBD


7HPD PORDENTRODOTEMA
Otimização do ADO.NET com SGBD
Autoria: Douglas Fugita de Oliveira Cezar FRQ¿JXUDWLRQ!
CONVITEÀLEITURA FRQQHFWLRQ6WULQJV!
Como citar esse documento:
CEZAR, Douglas Fugita de Oliveira. Linguagem de Programação Comercial: Otimização do ADO.NET com SGBD. Caderno de Atividades. Valinhos: <add name=”BDLocal”
Anhanguera Educacional, 2014.
Este é o último tema da disciplina Linguagem de Programação Comercial, que teve o intuito de mostrar uma nova
linguagem em conjunto com uma poderosa ferramenta.
     FRQQHFWLRQ6WULQJ ´3URYLGHU 0LFURVRIW$&(2/('%'DWD 6RXUFH _'DWD'LUHFWRU\_?1RUWKZLQG
Índice DFFGE3HUVLVW6HFXULW\,QIR )DOVH´
Neste caderno, você encontrará formas de otimizar recursos de bancos de dados utilizando a plataforma .net, visto que
este é o grande problema de sistemas que utilizam web como forma de publicação. Cada transação que necessita de   SURYLGHU1DPH ´6\VWHP'DWD2OH'E´!
acesso à base de dados consome uma grande parte dos recursos computacionais disponíveis para a operação.
FRQQHFWLRQ6WULQJV!
Algumas simples soluções como o uso do pool de conexões em conjunto com a utilização da API de cache do .net ...
CONVITEÀLEITURA PORDENTRODOTEMA podem auxiliar a reduzir drasticamente o consumo de recursos.
Pág. 3 Pág. 3
FRQ¿JXUDWLRQ!
Figura 4.1 – String de Conexão

$RXWLOL]DURUHFXUVRPRVWUDGRQD¿JXUDpVDELGRTXHWRGDDSOLFDomRXWLOL]DUiDPHVPDVWULQJGHFRQH[mR(PERUD
PORDENTRODOTEMA pareça algo sem importância, essa medida torna possível o uso do pool de conexões.
ACOMPANHENAWEB
Pág. 18 Pág. 18 A operação de estabelecimento de conexão é bastante custosa, e o pool de conexões possibilita o reuso de conexões
Otimização do ADO.NET com SGBD. estabelecidas anteriormente com o banco de dados. Ao invés de ser estabelecida uma nova conexão a cada método
Open() relacionado aos objetos Connection, o uso do pool de conexões faz com que novas conexões sejam criadas
Como visto anteriormente, o surgimento do ADO.NET trouxe uma série de facilidades e controles quando o assunto somente se ela já não foi realizada anteriormente. Ao utilizar o método Close(), a conexão com o banco de dados não é
é conexão e recuperação de informações de uma base de dados. No entanto, essas facilidades podem ocasionar GHVFDUWDGD¿FDQGRGLVSRQtYHOQRSRROGHFRQH[}HVSDUDXVRIXWXUR
descuidos no momento da utilização dos recursos computacionais. Ao mencionar um ambiente WEB, toda economia
Pág. 20 Pág. 20 (PERUD R QHW )UDPHZRUN IDoD XP H[FHOHQWH WUDEDOKR FRP VHX *DUEDJH &ROOHFWRU p PXLWR LPSRUWDQWH TXH HP WRGD
JHUDGDQRSURFHVVDPHQWRpEHPYLQGDMiTXHRWHPSRGHUHVSRVWDLQÀXHQFLDGLUHWDPHQWHQDH[SHULrQFLDGRXVXiULRDR
operação que terá a utilização de informações contidas em base de dados o programador se preocupe em abrir as
visualizar a página.
conexões sempre próximas a seu uso, e encerre com Close() ou Dispose() tão rápido quanto possível. Com o pool de
Para este projeto, será utilizada a mesma string de conexão usada anteriormente e, para isso, você deverá alterar o conexões, esta operação de abrir e encerrar uma conexão utiliza uma quantidade de recursos bem menor do que manter
DUTXLYR:HEFRQ¿JLQGLFDQGRDVWULQJDVHUXWLOL]DGDFRPRPRVWUDGRQD¿JXUD a mesma conexão aberta durante um longo período de tempo para que seja usada por vários métodos diferentes.

Após a declaração da string de conexão, embora haja componentes que facilitem o acesso, no próximo exemplo, a
Pág. 20 Pág. 21
FRQH[mRVHUiHVWDEHOHFLGDPDQXDOPHQWH$SiJLQDFRQWHUiQHVWHPRPHQWRVRPHQWHXPFRPSRQHQWH*ULG9LHZHXP
/DEHOSDUDH[LELURVWDWXVGDFRQH[mRDVVLPFRPRPRVWUDGRQD¿JXUD
‹ $QKDQJXHUD (GXFDFLRQDO 3URLELGD D UHSURGXomR ¿QDO RX SDUFLDO SRU TXDOTXHU PHLR GH LPSUHVVmR HP IRUPD LGrQWLFD UHVXPLGD RX PRGL¿FDGD HP OtQJXD
SRUWXJXHVDRXTXDOTXHURXWURLGLRPD

 
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
2FyGLJRIRQWHTXHHVWDEHOHFHDFRQH[mRpRPRVWUDGRQD¿JXUDHVHJXHRPHVPRSDGUmRYLVWRDQWHULRUPHQWHQR }
:LQGRZV)RUP
catch (Exception ex)
XVLQJ6\VWHP {
XVLQJ6\VWHP&RQ¿JXUDWLRQ OEO6WDWXV7H[W ³&RQH[mRIDOKRX³H[0HVVDJH
}
XVLQJ6\VWHP'DWD2OH'E
}
XVLQJ6\VWHP'DWD
}
namespace TADSWebApp
}
{ Figura 4.3 – Estabelecimento de conexão com o código-fonte
SXEOLFSDUWLDOFODVV$FHVVR'%6\VWHP:HE8,3DJH
$R H[HFXWDU HVWD SiJLQD WHPRV FRPR R SUHHQFKLPHQWR GR FRPSRQHQWH *ULG9LHZ UHVXOWDQGR QD VDtGD PRVWUDGD QD
{ ¿JXUD
protected void Page_Load(object sender, EventArgs e)
{
#3DJH7LWOH ´´/DQJXDJH ´&´0DVWHU3DJH)LOH ´a6LWH0DVWHU´$XWR(YHQW:LUHXS ´WUXH´&RGH%HKLQG ´$FHVVR'%
DVS[FV´,QKHULWV ´7$'6:HE$SS$FHVVR'%´! 2OH'E&RQQHFWLRQFRQQ QHZ2OH'E&RQQHFWLRQ &RQ¿JXUDWLRQ0DQDJHU&RQQHFWLRQ6WULQJV>³%'/RFDO´@7R6WULQJ 
DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´+HDG&RQWHQW´UXQDW ´VHUYHU´! WU\
DVS&RQWHQW! {
DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´0DLQ&RQWHQW´UXQDW ´VHUYHU´! FRQQ2SHQ 
S! 2OH'E'DWD$GDSWHUGD QHZ6\VWHP'DWD2OH'E2OH'E'DWD$GDSWHU ³6(/(&7 )5203URGXWRV´FRQQ 
DVS*ULG9LHZ,' ´JUY3URGXWRV´UXQDW ´VHUYHU´! 'DWD7DEOHGW QHZ'DWD7DEOH 
DVS*ULG9LHZ! GD)LOO GW 
S! JUY3URGXWRV'DWD6RXUFH GW
S! JUY3URGXWRV'DWD%LQG 
DVS/DEHO,' ´OEO6WDWXV´UXQDW ´VHUYHU´7H[W ´´!DVS/DEHO!
S! FRQQ&ORVH 
DVS&RQWHQW! OEO6WDWXV7H[W ³&RQH[mRFRQFOXtGD´
Figura 4.2 - Conexão estabelecida manualmente. Figura 4.4 - 3UHHQFKLPHQWRGRFRPSRQHQWH*ULG9LHZ

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


Com isso, uma grande quantidade de informações está sendo exibida em tela e talvez nem todas sejam necessárias. XVLQJ6\VWHP5XQWLPH&DFKLQJ        2OH'E&RQQHFWLRQ FRQQ  QHZ 2OH'E&RQQHFWLRQ &RQ¿JXUDWLRQ0DQDJHU&RQQHFWLRQ6WULQJV>³%'/RFDO´@
Para um melhor desempenho, devem ser recuperados somente os dados que fazem sentido para a aplicação. 7R6WULQJ 
$VVLPXPDDOWHUDomRQDTXHU\GD¿JXUDFRPRPRVWUDGRQD¿JXUDSRGHUHSUHVHQWDUXPERPJDQKRQRGHVHPSHQKR FRQQ2SHQ 
namespace TADSWebApp
VWULQJTXHU\ ³6(/(&7723>&yGLJRGR3URGXWR@³
VWULQJTXHU\ ³6(/(&7>&yGLJRGR3URGXWR@³ {
³>1RPHGR3URGXWR@³
SXEOLFSDUWLDOFODVV&DFKH:HE)RUP6\VWHP:HE8,3DJH
³>1RPHGR3URGXWR@³ ³>3UHoRGH/LVWD@³
{
³>3UHoRGH/LVWD@³ ³)5203URGXWRV³
protected void Page_Load(object sender, EventArgs e)
³:+(5('HVFRQWLQXDGR IDOVH´
³)5203URGXWRV³ {
2OH'E'DWD$GDSWHUGD QHZ6\VWHP'DWD2OH'E2OH'E'DWD$GDSWHU TXHU\FRQQ 
³:+(5('HVFRQWLQXDGR IDOVH´ GW QHZ'DWD7DEOH 
} GD)LOO GW 
2OH'E'DWD$GDSWHUGD QHZ6\VWHP'DWD2OH'E2OH'E'DWD$GDSWHU TXHU\FRQQ 
Figura 4.5 – Alteração de Query
FRQQ&ORVH 
SURWHFWHGYRLGEWQ&DFKHB&OLFN REMHFWVHQGHU(YHQW$UJVH &RORFDQGR'DWD7DEOHGWQRFDFKH³3URGXWRV´
Esta alteração fez com que somente os campos necessários sejam mostrados em tela, além de retirar do retorno da
{ FDFKH6HW ³3URGXWRV´GWSROLF\ 
FRQVXOWDRVSURGXWRVGHVFRQWLQXDGRVDWUDYpVGDFOiXVXOD:+(5(
&ULDomRGRREMHWRUHVSRQViYHOSRUDUPD]HQDUGDGRVHP&DFKH OEO6WDWXV7H[W ³&DFKH&ULDGR´
1RHQWDQWRjVYH]HVpUHDOPHQWHQHFHVViULRWUDEDOKDUFRPXPDJUDQGHPDVVDGHGDGRV8PUHFXUVRTXHSRGHVHU 2EMHFW&DFKHFDFKH 0HPRU\&DFKH'HIDXOW }
colocado em ação para casos em que dados sejam utilizados em todas as requisições de página é a API de cache do
$631(7(VWHUHFXUVRHVWiGLVSRQtYHOQRQDPHVSDFH6\VWHP5XQWLPH&DFKLQJTXHGHYHVHUUHIHUHQFLDGRDWUDYpVGR $FHVVDQGRFDFKH³3URGXWRV´TXHGHYHDUPD]HQDUXP'DWD7DEOH else
PHQXGHFRQWH[WR$GG5HIHUHQFHGRSURMHWR:(% 'DWD7DEOHGW FDFKH>³3URGXWRV´@DV'DWD7DEOH {
OEO6WDWXV7H[W ³/LGRGR&DFKH´
$¿JXUDPRVWUDRFyGLJRIRQWHFRPHQWDGRFRPRVREMHWRVXWLOL]DGRVSDUDUHDOL]DUDRSHUDomRGHFDFKHGHGDGRV
armazenados em um objeto DataTable. if (dt == null) }
{ JUY&DFKH'DWD6RXUFH GW
XVLQJ6\VWHP
&ULDomRDSROLWLFDGHFDFKHHFRORFDQGRWHPSRSDUDH[SLUDURFRQWH~GR JUY&DFKH'DWD%LQG 
XVLQJ6\VWHP&RQ¿JXUDWLRQ }
&DFKH,WHP3ROLF\SROLF\ QHZ&DFKH,WHP3ROLF\ 
XVLQJ6\VWHP'DWD }
SROLF\$EVROXWH([SLUDWLRQ 'DWH7LPH2IIVHW1RZ$GG6HFRQGV  
}
XVLQJ6\VWHP'DWD2OH'E
Figura 4. 6 - Código-fonte comentado

  
PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA
$V¿JXUDVHPRVWUDPDH[HFXomRGHVWHFyGLJRVHQGRTXHD¿JXUDUHSUHVHQWDRSULPHLURFOLTXHQRTXDO apresenta um grande custo para a aplicação. A cada página, o servidor carrega todos os registros para então separar
pFULDGRRFDFKHFRPRVGDGRVUHFXSHUDGRVGDWDEHOD3URGXWRVGDEDVHGHGDGRV-iD¿JXUDPRVWUDRVHJXQGR os que serão exibidos.
GLVSDURGRHYHQWRFOLTXHGRERWmR³$FLRQDU&DFKH´QRTXDORUHVXOWDGRGDFRQVXOWDMiHVWiDUPD]HQDGRHPPHPyULD
não sendo necessário acessá-lo novamente. #3DJH7LWOH ´´/DQJXDJH ´&´0DVWHU3DJH)LOH ´a6LWH0DVWHU´$XWR(YHQW:LUHXS ´WUXH´&RGH%HKLQG ´$FHVVR'%
DVS[FV´,QKHULWV ´7$'6:HE$SS$FHVVR'%´!

DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´+HDG&RQWHQW´UXQDW ´VHUYHU´!

DVS&RQWHQW!

DVS&RQWHQW,' ´&RQWHQW´&RQWHQW3ODFH+ROGHU,' ´0DLQ&RQWHQW´UXQDW ´VHUYHU´!

S!

DVS*ULG9LHZ,' ´JUY3URGXWRV´UXQDW ´VHUYHU´$OORZ3DJLQJ ´7UXH´3DJH6L]H ´´!

DVS*ULG9LHZ!

S!

S!

DVS/DEHO,' ´OEO6WDWXV´UXQDW ´VHUYHU´7H[W ´´!DVS/DEHO!

S!
Figura 4.8 - Criação do cache

Dados que sejam utilizados mais de uma única vez são bons candidatos ao uso do cache. Outro indicador de que os DVS&RQWHQW!
GDGRVGHYHPVHUDUPD]HQDGRVHPFDFKHpDQmRGHSHQGrQFLDHQWUHRVGDGRVHXPDUHTXLVLomRHVSHFt¿FDGRXVXiULR
Figura 4.7 - Execução do código-fonte SRUH[HPSORRVGDGRVGDWDEHODGHSURGXWRVQmRp¿OWUDGRSRUXVXiULR

Casos no qual o dado seja dependente de algum dado do usuário podem também ser armazenados em cache, mas
o programador deve assegurar que o tempo de vida deste dado seja menor que o tempo dos dados que servem ao
sistema como um todo.

2$631(7DSUHVHQWDXPDIDFLOLGDGHUHODFLRQDGDDPHOKRULDGHLQWHUIDFHFRPRXVXiULR&RPXPDDOWHUDomRQR*ULG9LHZ
pSRVVtYHOID]HUFRPTXHRFRPSRQHQWHH[LEDDVLQIRUPDo}HVSDJLQDGDVFRPRPRVWUDGRQD¿JXUD(VWDIDFLOLGDGH

  

PORDENTRODOTEMA PORDENTRODOTEMA PORDENTRODOTEMA


O uso de transações utilizando os componentes ADO.NET é recomendado quando várias chamadas são necessárias WU\
para completar uma operação. Por exemplo, a inclusão de um pedido de vendas e de dois itens neste pedido, como
PRVWUDGRQD¿JXUD {
FRQQ2SHQ 
XVLQJ6\VWHP
XVLQJ6\VWHP&RQ¿JXUDWLRQ
WUDQV FRQQ%HJLQ7UDQVDFWLRQ 
XVLQJ6\VWHP'DWD2OH'E

2OH'E&RPPDQGFPG QHZ2OH'E&RPPDQG TXHU\3HGLGRVFRQQWUDQV 


namespace TADSWebApp
LQWT FPG([HFXWH1RQ4XHU\ 
{
FPG&RPPDQG7H[W TXHU\'HWDOKHV3HGLGRV
SXEOLFSDUWLDOFODVV7UDQVDFWLRQ6\VWHP:HE8,3DJH
LQWT FPG([HFXWH1RQ4XHU\ 
{
FPG&RPPDQG7H[W TXHU\'HWDOKHV3HGLGRV
protected void Page_Load(object sender, EventArgs e)
LQWT FPG([HFXWH1RQ4XHU\ 
{

LI T! T! T!


}
{
WUDQV&RPPLW 
SURWHFWHGYRLG%XWWRQB&OLFN REMHFWVHQGHU(YHQW$UJVH
}
Figura 4.9 ±5HVXOWDGRGRERWmR³$FLRQDU&DFKH´ {
else
8PDIRUPDGHUHGX]LURFXVWRGHVWDRSHUDomRpFULDUWRGRRPHFDQLVPRGHSDJLQDomRID]HQGRFRPTXHVRPHQWHVHMD {
FDUUHJDGRQREDQFRGHGDGRVRVGDGRVSDUDDTXHODSiJLQDHVSHFt¿FD1DVHomR$FRPSDQKHQD:HEYRFrSRGHUi 2OH'E&RQQHFWLRQFRQQ QHZ2OH'E&RQQHFWLRQ &RQ¿JXUDWLRQ0DQDJHU&RQQHFWLRQ6WULQJV>³%'/RFDO´@7R6WULQJ 
WUDQV5ROOEDFN 
encontrar um exemplo bem detalhado de como é executada esta operação. 2OH'E7UDQVDFWLRQWUDQV QXOO
}
Embora não faça parte do escopo e este assunto esteja mais relacionado ao banco de dados, é sempre bom relembrar
}
que um dos fatores que mais impactam no desempenho da utilização de banco de dados é a criação de índice para as VWULQJTXHU\3HGLGRV ³,16(57,1723HGLGRV´
tabelas. Por isso, sempre que for criar uma nova tabela, não o faça sem criar índices que satisfaçam a necessidade das catch
VWULQJTXHU\'HWDOKHV3HGLGRV ³,16(57,172>'HWDOKHVGR3HGLGR@´
aplicações que a acessará. {
VWULQJTXHU\'HWDOKHV3HGLGRV ³,16(57,172>'HWDOKHVGR3HGLGR@´

  
PORDENTRODOTEMA AGORAÉASUAVEZ
WUDQV5ROOEDFN  Questão 2
}
ACOMPANHENAWEB
Selecione as alternativas corretas.
¿QDOO\^ Para fazer uso do pool de conexão deve-se:
Optimized Paging and S
O Sorting in ASP.NET
S G
GridView.
FRQQ&ORVH 
a) Nunca fechar uma conexão.
} ‡ Artigo que explica de forma detalhada, utilizando stored procedure, a forma de criar paginação
HRUGHQDomRHPXP*ULG9LHZ b) 8WLඇL]DURQDPHVSDFH6\VWHP&RQQHFWLRQV3RRඇ

Disponível em: KWWSGRWQHWVODFNHUVFRPDUWLFOHVJULGYLHZ2SWLPL]HG3DJLQJDQG6RUWLQJLQ$631(7*ULG- c) 6HPSUHXWLඇL]DURPpWRGR&ඇRVH RX'LVSRVH 


}
9LHZDVS[!$FHVVRHPVHW
} d) &RQ¿JXUDUYiULDVVWULQJVGHFRQH[mR

} Portal ADO.NET
Figura 4.10 8VRGHWUDQVDo}HVXWLOL]DQGRRVFRPSRQHQWHV$'21(7
Questão 3
‡ 3RUWDO GLVSRQLELOL]DGR SHOR 0LFURVRIW 'HYHORSHU 1HWZRUN FRP DV SULQFLSDLV DWXDOL]Do}HV H
3DUDPHOKRUDURGHVHPSHQKRGRFRQWUROHGHWUDQVDomRpLPSRUWDQWHGH¿QLURQtYHOGHLVRODPHQWR isolation level) que recursos sobre o ADO.NET. 2UGHQHRVQtYHLVGHLVRODPHQWR LVRODWLRQOHYHO GDWUDQVDomRVHQGRRPDLVUHVWULWLYRHRPHQRVUHVWULWLYR
será necessário para a operação. 2V QtYHLV VmR GH¿QLGRV FRPR 5HDG 8QFRPPLWWHG 5HDG &RPPLWWHG 5HSHDWDEEOH
Disponível
p em: KWWSPVGQPLFURVRIWFRPHQXVOLEUDU\H\\K[ Y
S \ \ \ YV DVS[!$FHVVRHPVHW
S a) 5HDG&RPPLWWHG
5HDG 6HULDOL]DEOH Cada um dos níveis oferece um nível maior de proteção, sendo que a lista foi escrita do menos
restritivo para o mais restritivo. b) 5HSHDWDEඇH5HDG

25HDG8QFRPPLWWHGSHUPLWHTXHGXUDQWHDURWLQDVHMDPOLGDVDOWHUDo}HVQDEDVHTXHDLQGDQmRWLYHUHPXPDFRQ¿UPDomR c) 5HDG8QFRPPLWWHG
FRPPLW 25HDG&RPPLWHGIXQFLRQDGDIRUPDFRQWUiULDVySHUPLWLQGRTXHVHMDPOLGRVGDGRVTXHMiIRUDPFRQ¿UPDGRV d) 6HULDඇL]DEඇH
No entanto, os dados podem ser alterados por outras operações, o que resulta em leituras não repetíveis ou dados AGORAÉASUAVEZ
fantasmas.
Questão 4
25HSHDWDEOH5HDGSRVVXLDPHVPDUHVWULomRTXHR5HDG&RPPLWHGVHQGRTXHQHQKXPDRXWUDRSHUDomRSRGHUiDOWHUDU Instruções:
os dados que estão sendo utilizados pela transação com este isolation level, enquanto ela não terminar. No entanto, este 4XDODLPSRUWkQFLDGRSRROGHFRQH[}HVSDUDRGHVHPSHQKRGDDSOLFDomR"
nível não impede que novas linhas sejam inseridas e, caso seja feito uma nova consulta, novos registros aparecerão. Agora, chegou a sua vez de exercitar seu aprendizado. A seguir, você encontrará algumas questões de múltipla
escolha e dissertativas. Leia cuidadosamente os enunciados e atente-se para o que está sendo pedido.
2QtYHO6HULDOL]DEOHpRPDLVUHVWULWLYRHQHOHDOpPGDVUHVWULo}HVMiGLWDVQRQtYHO5HSHDWDEOH5HDGLPSHGHDFULDomR Questão 5
de novos dados que estejam no intervalo dos dados que estão sendo utilizados pela transação, até que ela termine seu Questão 1
processamento. Crie uma aplicação em ASP.NET que armazene em cache uma tabela qualquer logo ao iniciar a aplicação, somente no primeiro
4XDODLPSRUWkQFLDGRXVRGRFDFKHSDUDXPDDSOLFDomRZHE" DFHVVRHOLPLWHRWHPSRGHVWHFDFKHHPPLQXWRV
3DUDRFDVRH[HPSORGD¿JXUDDWUDQVDomRSRGHULDVHUGH¿QLGDFRPR5HDG8QFRPPLWHGMiTXHDVFRQVWUDLQWVGD
WDEHOD³'HWDOKHVGR3HGLGR´REULJDULDDWHUXPUHJLVWURSDLYiOLGRQDWDEHOD³3HGLGR´HSRUQmRWHUUHDOL]DGRRFRPPLWQD $SyVFRPRFOLTXHGHXPERWmRYHUL¿TXHVHRFDFKHDLQGDHVWiDWLYR6HHVWLYHUH[LEDDWDEHODHPXPJULG9LHZ6HQmRPRVWUH
primeira transação, qualquer outro nível de isolamento não permitiria a operação. um aviso que o cache está vazio.

  

{
FINALIZANDO GABARITO
Neste caderno
N d você
ê pôde
ôd acompanhar
h vários
á i métodos
é d de d otimização
i i no acesso a sistemas
i gerenciadores
i d d
de Questão 1 protected void Page_Load(object sender, EventArgs e)
bancos de dados. {
Resposta: O uso do cache é importante para evitar que dados utilizados com frequência sejam solicitados a todo
Assim como nos cadernos anteriores, os exemplos mostrados foram simples, com o intuito de mostrar recursos da momento. LI ,V3RVW%DFN
IHUUDPHQWDHFRP¿QVGLGiWLFRVTXDQWRjQRYDOLQJXDJHP Questão 2 {

Pratique bastante e assim conseguirá desenvolver excelentes aplicações e, agora, com uma maior consciência quanto &DUUHJDU&DFKH 
Resposta: Alternativa C.
DRVUHFXUVRVFRQVXPLGRVQDVWUDQVDo}HVFRPRV6*%'V }
Questão 3
Resposta: 6HTXrQFLD
}
Questão 4

REFERÊNCIAS Resposta: O pool de conexões mantém uma conexão com o banco de dados aberta, economizando o custo da conexão protected void CarregarCache()
a cada solicitação de acesso. {
/27$5$OIUHGRComo Melhorar a Performance de Websites .NET. Os segredos dos sites de alto desempenho(GLomR Questão 5 2EMHFW&DFKHFDFKH 0HPRU\&DFKH'HIDXOW
129$7(&6mR3DXOR
Resposta: Proposta de solução. O resultado do aluno pode ser diferente &DFKH,WHP3ROLF\SROLF\ QHZ&DFKH,WHP3ROLF\ 
SROLF\$EVROXWH([SLUDWLRQ 'DWH7LPH2IIVHW1RZ$GG6HFRQGV  
XVLQJ6\VWHP
XVLQJ6\VWHP&RQ¿JXUDWLRQ
'DWD7DEOHGW QHZ'DWD7DEOH 
GLOSSÁRIO XVLQJ6\VWHP'DWD
XVLQJ6\VWHP'DWD2OH'E
Pool:
P l coleção,
l ã conjunto.
j t 2OH'E&RQQHFWLRQFRQQ QHZ2OH'E&RQQHFWLRQ &RQ¿JXUDWLRQ0DQDJHU&RQQHFWLRQ6WULQJV>³%'/RFDO´@7R6WULQJ 
XVLQJ6\VWHP5XQWLPH&DFKLQJ
FRQQ2SHQ 
Não repetíveis: resultado de uma consulta que, se comparar com a mesma consulta em um momento diferente, pode
VWULQJTXHU\ ³6(/(&7723>&yGLJRGR3URGXWR@³
obter resultados diferentes. namespace TADSWebApp
³>1RPHGR3URGXWR@³
{
³>3UHoRGH/LVWD@³
SXEOLFSDUWLDOFODVV&DFKH:HE)RUP6\VWHP:HE8,3DJH

  
³)5203URGXWRV³
³:+(5('HVFRQWLQXDGR IDOVH´
2OH'E'DWD$GDSWHUGD QHZ6\VWHP'DWD2OH'E2OH'E'DWD$GDSWHU TXHU\FRQQ 
GW QHZ'DWD7DEOH 
GD)LOO GW 
FRQQ&ORVH 

FDFKH6HW ³3URGXWRV´GWSROLF\ 
}
SURWHFWHGYRLGEWQ&DFKHB&OLFN REMHFWVHQGHU(YHQW$UJVH
{
2EMHFW&DFKHFDFKH 0HPRU\&DFKH'HIDXOW
'DWD7DEOHGW FDFKH>³3URGXWRV´@DV'DWD7DEOH
if (dt == null)
{
OEO6WDWXV7H[W ³&DFKHHVYD]LDGRFRQHFWHQRYDPHQWH´
}
else
{
JUY&DFKH'DWD6RXUFH GW
JUY&DFKH'DWD%LQG 
}
}
}

Clique aqui para retornar à seção Agora é a Sua Vez.