Sie sind auf Seite 1von 74

WTG 2006.

2 FSM
Desenvolvendo Aplicaes com C# e ASP.NT
Facili!ado"# $os% &o'e"!o A"a()o
Introduo
.NT % a nova pla!a*o"ma de desenvolvimen!o da Mic"oso*! , !oda +ma nova
pla!a*o"ma de desenvolvimen!o, o -+e envolve lin.+a.ens de p"o."ama/o, compilado"es,
modelo de o')e!os e!c., se !o"na necess0"ia pa"a -+e consi.a en.lo'a" de +ma *o"ma
comple!amen!e
1n!e."ada !odos esses "e-+isi!os. % essa a p"opos!a de .NT.
A lin.+a.em C# 2p"on+ncia3se C S4a"p5 *a6 pa"!e desse con)+n!o de *e""amen!as
o*e"ecidas na pla!a*o"ma .NT e s+".e como +ma lin.+a.em simples, ro- 3
busta, orientada a objetos, fortemente tipada e altamente escalvel a *im de pe"mi!i"
-+e +ma mesma aplica/o possa se" e7ec+!ada em dive"sos disposi!ivos de
4a"d8a"e, independen!emen!e des!es se"em PCs, 4and4elds o+ -+al-+e" o+!"o
disposi!ivo m9vel. Al%m do mais, a lin.+a.em C# !am'%m !em como o')e!ivo
pe"mi!i" o desenvolvimen!o de -+al-+e" !ipo de aplica/o# We' se"vice, aplica/o
Windo8s convencional, aplicaes pa"a se"em e7ec+!adas n+m palm!op o+
4and4eld, aplicaes pa"a 1n!e"ne! e!c.
Nes!a apos!ila, ap"esen!a"emos ao lei!o" a a"-+i!e!+"a da pla!a*o"ma .NT a
*im de -+e possa en!ende" onde C# se encai7a nes!a pla!a*o"ma e po" -+e, a despei!o
da e7is!:ncia de o+!"as lin.+a.ens, incl+sive a-+elas -+e !am'%m d/o s+po"!e
a .NT, C# % !/o impo"!an!e.
Atuais dificuldades encontradas no
desenvolvimento de sistemas para Windows
Al.+mas das di*ic+ldades encon!"adas 4o)e em dia no desenvolvimen!o de sis!emas
s/o#
Complexidade associada a lin.+a.ens de p"o."ama/o de di*;cil sin!a7e, e
ainda as do"es de ca'ea p"ovocadas pelo .e"enciamen!o da mem9"ia
heap po" pa"!e do p"o."amado".
Pouca integrao e reaproveitamento de c9di.o en!"e lin.+a.ens de
p"o."ama/o di*e"en!es< a+s:ncia de implemen!a/o de mecanismo de 4e"ana
en!"e lin.+a.ens di*e"en!es, po" e7emplo.
Diversidade com pouca integrao na resoluo de problemas complexos,
di*ic+l!ando a comp"eens/o e o desenvolvimen!o dos sis!emas.
Falta de portabilidade de cdigo executvel en!"e pla!a*o"mas di*e"en!es.
OBS.: A .NET permite que usemos a linguagem de programao da qual mais temos
domnio e mesmo assim continuamos a usufruir todo o seu potencial.
A abordagem .NET
Ci!a"emos a se.+i" al.+mas das ca"ac!e";s!icas de .NT -+e visam a "esolve" os
p"o'lemas ci!ados acima#
Independncia de linguagem de programao: o -+e pe"mi!e a implemen!a/o
do mecanismo de 4e"ana, con!"ole de e7cees e dep+"a/o en!"e
lin.+a.ens de p"o."ama/o di*e"en!es.
Reutilizao de cdigo legado: o -+e implica em "eap"ovei!amen!o de c9di.o
esc"i!o +sando o+!"as !ecnolo.ias como C=M, C=M>, AT?, D??s e
o+!"as 'i'lio!ecas e7is!en!es.
empo de execuo compartil!ado: o "+n!ime do .NT % compa"!il4ado
en!"e as dive"sas lin.+a.ens -+e a s+po"!am, o -+e -+e" di6e" -+e n/o
e7is!e +m "+n!ime di*e"en!e pa"a cada lin.+a.em -+e implemen!a .NT.
"istemas auto#explicativos e controle de vers$es: cada pea de c9di.o .NT
con!%m em si mesma a in*o"ma/o necess0"ia e s+*icien!e de *o"ma -+e o "+n!ime
n/o p"ecise p"oc+"a" no "e.is!"o do Windo8s mais in*o"maes so'"e o p"o."ama
-+e es!0 sendo e7ec+!ado. = "+n!ime encon!"a essas in*o"maes no p"9p"io
sis!ema em -+es!/o e sa'e -+al a ve"s/o a se" e7ec+!ada, sem ac+sa" a-+eles
vel4os con*li!os de incompa!i'ilidade ao "e.is!"a" D??s no Windo8s.
"implicidade na "esol+/o de p"o'lemas comple7os.
A Arquitetura .NET
Pa"a mel4o" en!ende"mos !+do o -+e !emos di!o a!% a-+i, vamos *ala" +m po+co
da a"-+i!e!+"a de .NT e os se+s p"incipais componen!es.
CLR (Commom Language Runtime)
= C?&, o+ !empo de e7ec+/o compa"!il4ado, % o am'ien!e de e7ec+/o das
aplicaes .NT. Como o lei!o" )0 deve !e" a!en!ado, as aplicaes .NT n/o s/o
aplicaes Win@2 p"op"iamen!e di!as 2apesa" de e7ec+!a"em no am'ien!e Windo8s5,
"a6/o pela -+al o "+n!ime Win@2 n/o sa'e como e7ec+!03las. = Win@2,
ao iden!i*ica" +ma aplica/o .NT, dispa"a o "+n!ime .NT -+e, a pa"!i" desse
momen!o, ass+me o con!"ole da aplica/o no sen!ido mais amplo da palav"a,
po"-+e, den!"e o+!"as coisas, % ele -+em vai c+ida" do .e"enciamen!o da mem9"ia
via +m mecanismo de .e"enciamen!o de mem9"ia c4amado Garbage Collector
(GC) o+ cole!o" de li7o, ace"ca do -+al *ala"emos mais !a"de. sse .e"enciamen!o
da mem9"ia !o"na os p"o."amas menos s+scep!;veis a e""os. Mais ainda, o
C?& como se+ p"9p"io nome o di6, % compa"!il4ado e, po"!an!o, n/o !emos +m
"+n!ime pa"a AB.NT, o+!"o pa"a C# e!c. C o mesmo pa"a !odo m+ndo.
CTS (Common Type System)
= CTS, o+ Sistema Comum de Tipos, -+e !am'%m *a6 pa"!e do C?&, de*ine os
!ipos s+po"!ados po" .NT e as s+as ca"ac!e";s!icas. Cada lin.+a.em -+e s+po"!a .NT
!em de, necessa"iamen!e, s+po"!a" esses !ipos. Apesa" de -+e a especi*ica/o n/o
demanda -+e !odos os !ipos de*inidos no CTS se)am s+po"!ados pela lin.+a.em, esses
!ipos podem se" +m s+'con)+n!o do CTS, o+ ainda +m s+pe"con)+n!o. Dm con)+n!o de
classes '0sicas -+e de*ine !odos os !ipos % implemen!ado na CTS. Po" e7emplo# +m !ipo
num deve de"iva" da classe SEs!em.n+m e !odas as lin.+a.ens devem implemen!a" o
!ipo n+m dessa *o"ma. Todo !ipo de"iva da classe =')ec!, po"-+e em .NT !+do % +m
o')e!o e, po"!an!o, !odos os !ipos devem !e" como "ai6 essa classe. % dessa *o"ma -+e
os dive"sos !ipos nas dive"sas lin.+a.ens s/o implemen!ados, o'edecendo Fs "e."as
de*inidas no CTS. Na .NET, e em C# conseqentemente, todos os tipos derivam de uma raiz
comum: a classe O!ect, o que equivale a dizer que todos os tipos so o!etos,
por de"inio.
CLS (Common Language Specification)
= C?S, o+ specifica!"o Comum da #inguagem, % +m s+'con)+n!o do CTS, e
de*ine +m con)+n!o de "e."as -+e -+al-+e" lin.+a.em -+e implemen!e a .NT deve
se.+i" a *im de -+e o c9di.o .e"ado "es+l!an!e da compila/o de -+al-+e" pea de
so*!8a"e esc"i!a na "e*e"ida lin.+a.em se)a pe"*ei!amen!e en!endido pelo "+n!ime .NT.
Se.+i" essas "e."as % +m impe"a!ivo po"-+e, caso con!"0"io, +m dos ."andes .an4os do
.NT, -+e % a independ:ncia da lin.+a.em de p"o."ama/o e a s+a in!e"ope"a'ilidade,
*ica comp"ome!ido. A ."osso modo, di6e" -+e +ma lin.+a.em % compa!;vel com o C?S
si.ni*ica di6e" -+e mesmo -+ando es!a % sin!a!icamen!e di*e"en!e de -+al-+e" o+!"a -+e
implemen!e .NT, seman!icamen!e ela % i.+al, po"-+e na 4o"a da compila/o se"0 .e"ado
+m c9di.o in!e"medi0"io 2e n/o c9di.o assem'lE dependen!e da a"-+i!e!+"a do
p"ocessado"5 e-+ivalen!e pa"a d+as peas de c9di.o i.+ais, po"%m esc"i!as em
lin.+a.ens di*e"en!es. C impo"!an!e en!ende" esse concei!o pa"a n/o pensa" -+e o c9di.o
desenvolvido em C# n/o pode in!e"a.i" com c9di.o desenvolvido em AB o+ o+!"as
lin.+a.ens, po"-+e mesmo es!as sendo di*e"en!es, !odas s/o compa!;veis com o C?S.
BCL (Base Classe Library)
Como e"a de se espe"a", +ma pla!a*o"ma -+e p"ome!e *acili!a" o desenvolvimen!o
de sis!emas p"ecisa !e" +ma 'i'lio!eca de classes '0sica -+e alavan-+e a simplicidade
e a "apide6 no desenvolvimen!o de sis!emas. C es!e o o')e!ivo da BC? 2$iblioteca de
Classes $ase5, o*e"ece" ao desenvolvedo" +ma 'i'lio!eca consis!en!e de componen!es
de so*!8a"e "e+!ili60veis -+e n/o apenas *acili!em, mas !am'%m -+e acele"em o
desenvolvimen!o de sis!emas. Na BC? encon!"amos classes -+e con!emplam desde +m
novo sis!ema de )anelas a 'i'lio!ecas de en!"adaGsa;da, ."0*icos, socHe!s, .e"enciamen!o
da mem9"ia e!c.
Namespaces
Namespace Descrio
System Cont#m al$umas classes de ai%o n&vel usadas para
traal'ar com tipos primitivos, opera(es
matem)ticas, $erenciamento de mem*ria etc.
System.Collections +ensando em implementar suas pr*prias pil'as, "il'as,
listas encadeadas, Elas !) "oram implementadas e se
encontram aqui.
System.Data,
System.Data.Commom,
System.Data.OleDb,
System.Data.SqlClient
-qui voc. vai encontrar tudo o que # necess)rio para
lidar com ases de dados e, como # de se esperar,
voc. encontrar) -/O.NET aqui.
System.Diagnostics 0o$ de Event, medio de per"ormance, classes para
$erenciamento de processos, depurao e mais voc.
poder) encontrar neste namespace.
System.Drawing - .NET o"erece uma ilioteca de componentes para
traal'ar com $r)"icos, c'amada 1/I2, que se
encontra neste namespace.
System.IO 3ilioteca para lidar com entrada e sa&da,
$erenciamento de arquivos etc.
System.NET -qui voc. encontra iliotecas para pro$ramao de
redes, soc4ets etc.
System.Reflection Em .NET voc. pode $erar c*di$o em tempo de
e%ecuo, descorir tipos de vari)veis etc. -s
iliotecas necess)rias para isso encontram5se neste
namespace.
System.Runtime.InteroSer!ices
System.Runtime.Remoting
6ornecem iliotecas para intera$ir com c*di$o
no5$erenciado.
System.Security Cripto$ra"ia, permiss(es e todo o suporte ao qual .NET
o"erece a se$urana voc. encontra aqui.
System.T"rea#ing 3iliotecas necess)rias para o desenvolvimento de
aplica(es multit'read.
System.$eb -7+.NET, 8e services e tudo o que ten'a a ver com
8e pode ser encontrado aqui.
System.$in#ows.%orms 3iliotecas para o desenvolvimento de aplica(es
8indo9s tradicionais.
System.&'( 3iliotecas que permitem a interao com
documentos :;0.
Compilando programas .NET introdu!indo a linguagem
intermedi"ria #$%& '#icrosoft %ntermediate &anguage(
A MS1? I o+ simplesmen!e 1? I % a lin.+a.em in!e"medi0"ia pa"a -+al %
in!e"p"e!ado -+al-+e" p"o."ama .NT, independen!e da lin.+a.em em -+e es!e *o"
esc"i!o. ssa !"ad+/o % *ei!a pa"a c%digo intermedirio 2como em $AAA com os b&te
codes5 sin!a!icamen!e e7p"esso na 1?. Po" s+a ve6, -+al-+e" lin.+a.em .NT compa!;vel,
na 4o"a da compila/o, .e"a"0 c9di.o 1? e n/o c9di.o assem'lE espec;*ico da a"-+i!e!+"a
do p"ocessado" onde a compila/o do p"o."ama % e*e!+ada, con*o"me acon!ece"ia em
C>>o+ Delp4i, po" e7emplo. po" -+e issoJ 1sso acon!ece pa"a .a"an!i" d+as coisas# a
independ:ncia da lin.+a.em e a independ:ncia da pla!a*o"ma 2a"-+i!e!+"a do
p"ocessado"5.
)rquitetura .NET
(inguagens #e +rograma,-o
Base Class (ibrary .BC(/
Common (anguage Runtime .C(R/
Common Tye System Common (anguage Secification
OBS.: A #$%& ) a linguagem intermedi"ria para qual ) interpretado qualquer programa
.NET na *ora da compilao+ independente da linguagem em que este
for escrito.
Como uma aplicao .NET e!ecuta"a pelo Runtime
Pa"a pode"mos *ala" so'"e es!e ass+n!o vamos in!"od+6i" al.+ns concei!os
essenciais pa"a a comp"eens/o da e7ec+/o de +m aplica!ivo .NT.
Tempo de Compilao
n!ende3se po" !empo de compila/o a pa"!e do p"ocesso de compila/o -+e di6
"espei!o F .e"a/o de c9di.o em MS1? 2lin.+a.em in!e"medi0"ia5 e de in*o"maes
espec;*icas da aplica/o necess0"ias pa"a a s+a co""e!a e7ec+/o. Mas onde es!as
in*o"maes s/o a"ma6enadasJ Como "espos!a a es!a pe".+n!a vamos in!"od+6i"
o concei!o de MTADATA o+ me!adados.
#ETA,A,-$
S/o +m con)+n!o de ins!"+es .e"adas no p"ocesso de compila/o de -+al-+e"
p"o."ama .NT, )+n!o com a MS1?, -+e con!%m as se.+in!es in*o"maes espec;*icas
da aplica/o#
' descri!"o dos tipos 2classes, es!"+!+"as, !ipos en+me"ados e!c.5 +sados na
aplica/o, podendo es!a !e" sido .e"adaem*o"ma deD??o+ de e7ec+!0vel
' descri!"o dos membros de cada !ipo 2p"op"iedades, m%!odos, even!os e!c.5
' descri!"o de cada unidade de c%digo e(terno 2assem'lE5 +sada na aplica/o
e -+e % "e-+e"ida pa"a -+e es!a e7ec+!e ade-+adamen!e
)esolu!"o da chamada de m*todos
)esolu!"o de vers+es diferentes de uma aplica!"o
Dada a in*o"ma/o con!ida nos MTADAD=S, podemos di6e" -+e +ma
aplica/o .NT % a+!o3e7plica!iva, dispensando a +!ili6a/o do "e.is!"o do Windo8s
pa"a a"ma6ena" in*o"maes adicionais a se+ "espei!o. Mais ainda, nos
MTADAD=S % a"ma6enada a ve"s/o da aplica/o, o -+e pe"mi!e -+e d+as aplicaes,
mesmo sendo 4omKnimas, possam convive" ami.avelmen!e sem .e"a"
con*li!os de ve"s/o no sis!ema 4ospedei"o. Fala"emos mais a esse "espei!o -+ando
a'o"da"mos a disc+ss/o de assem'lies e namespaces.
= C?& vai p"oc+"a" nos MTADAD=S a ve"s/o co""e!a da aplica/o a se"
e7ec+!ada. sse % +m.an4o m+i!o ."ande no -+e di6 "espei!o F implemen!a/o e
man+!en/o de sis!emas em p"od+/o, dadas as di*ic+ldades associadas F man+3
01 !en/o de D??s e de componen!es c+)as ve"ses s/o di*e"en!es, mas c+)a conviv:ncia
no mesmo am'ien!e % necess0"ia po" "a6es de compa!i'ilidade com o+!"os
aplica!ivos -+e p"ecisam de +ma o+ de o+!"a D??.
A$$E#.&/
Toda aplica/o .NT, -+ando compilada, % a"ma6enada *isicamen!e n+ma
+nidade de c9di.o denominada assembl&. Dma aplica/o pode se" compos!a de +m
o+ mais assemblies, os -+ais s/o "ep"esen!ados no sis!ema de a"-+ivos do sis!ema
ope"acional 4os! na *o"ma de a"-+ivos e7ec+!0veis, de e7!ens/o .L, o+ de
+ma 'i'lio!eca de li.a/o dinMmica mel4o" con4ecida como D??, e o'viamen!e
de e7!ens/o .D??.
0E '0ortable E1ecutable(
N+ando +m aplica!ivo % compilado, s/o .e"adas ins!"+es em 1?. Como )0
dissemos acima, MTADAD=S com in*o"maes da aplica/o !am'%m s/o .e"ados,
e o'viamen!e a"ma6enados na *o"ma de +ma D?? o+ de +m a"-+ivo e7ec+!0vel.
1sso % con4ecido como (ecutvel ,ortvel (,ortable (ecutable) o+ simplesmen!e
P. Di63se po"!0vel po"-+e ele pode"0 se" e7ec+!ado em -+al-+e" pla!a*o"ma
-+e s+po"!e .NT, sem necessidade de "ecompila/o, ope"a/o -+e se"0
e*e!+ada a+!oma!icamen!e pelo "+n!ime -+ando da e7ec+/o da aplica/o.
Compilao 2%T '32ust %n Time4(
Dm compilado" $1T, !am'%m con4ecido como $1TT&, conve"!e ins!"+es 1?
pa"a ins!"+es espec;*icas da a"-+i!e!+"a do p"ocessado" onde a aplica/o .NT
es!0 sendo e7ec+!ada. Na pla!a*o"ma .NT e7is!em !":s di*e"en!es !ipos de
$1TT&#
,r*--.T# Compila de +ma s9 ve6 !odo o c9di.o da aplica/o .NT -+e es!0
sendo e7ec+!ada e o a"ma6ena no cac4e pa"a +so pos!e"io".
cono--.T: s!e !ipo de compilado" % +sado em disposi!ivos como 4and4elds
onde a mem9"ia % +m "ec+"so p"ecioso. Sendo assim, o c9di.o %
compilado so' demanda, e a mem9"ia alocada -+e n/o es!0 em +so % li'e"ada
-+ando o disposi!ivo assim o "e-+e".
/ormal--.T# = No"mal3$1T compila o c9di.o so' demanda e coloca o c9di.o
"es+l!an!e no cac4e, de *o"ma -+e esse c9di.o n/o p"ecise se" "ecompilado
-+ando 4o+ve" +ma nova invoca/o do mesmo m%!odo.
5E$ '5irtual E1ecution $6stem(
= p"ocesso de compila/o acon!ece n+m am'ien!e c4amado de Sistema de
(ecu!"o 0irtual 2AS5, e % a-+i onde o $1TT& % a!ivado -+ando +ma aplica/o
.NT % c4amada.=$1TT& % a!ivado a pa"!i" do "+n!ime do Win@2, passando o 03
con!"ole pa"a o "+n!ime .NT< ap9s isso, a compila/o do P % e*e!+ada e s9 en!/o
o c9di.o assem'lE p"9p"io da a"-+i!e!+"a do p"ocessado" % .e"ado pa"a -+e a
aplica/o possa se" e7ec+!ada.
= dia."ama a se.+i" il+s!"a !odo o p"ocesso de e7ec+/o de +ma aplica/o,
desde a .e"a/o das ins!"+es 1? em !empo de compila/o, a!% a .e"a/o do c9di.o
assem'lE espec;*ico da pla!a*o"ma de e7ec+/o.
7erenciamento da mem8ria
7C '7arbage Collector(
= .e"enciamen!o da mem9"ia % e*e!+ado pelo "+n!ime, pe"mi!indo -+e o
desenvolvedo" se concen!"e na "esol+/o do se+ p"o'lema espec;*ico. = -+e di6 "espei!o
ao sis!ema ope"acional, como o .e"enciamen!o da mem9"ia, % *ei!o pelo "+n!ime. Como
isso % e*e!+adoJ O medida -+e +ma 0"ea de mem9"ia % necess0"ia pa"a aloca" +m o')e!o,
o GC o+ cole!o" de li7o 2Ga"'a.e Collec!o"5 "eali6a"0 essa !a"e*a, assim como a li'e"a/o
de espaos de mem9"ia -+e n/o es!ive"em mais em +so. Pa"a os -+e n/o !"a'al4am com
lin.+a.ens de p"o."ama/o como C o+ C>>, -+e pe"mi!em o acesso di"e!o F mem9"ia
heap via pon!ei"os, essa % +ma das maio"es do"es de ca'ea -+e os p"o."amado"es
so*"em, o"a po" *a6e" "e*e":ncia a espaos de mem9"ia -+e n/o *o"am alocados, o"a
po"-+e es!es espaos )0 *o"am li'e"ados an!e"io"men!e< % e7a!amen!e esse !ipo de e""o
-+e o cole!o" de li7o nos a)+da a evi!a". = .e"enciamen!o da mem9"ia, -+ando e*e!+ado
di"e!amen!e pelo p"o."amado", !o"na os p"o."amas mais e*icien!es em !e"mos de
desempen4o, mas ao mesmo !empo o penali6a, o'"i.ando3o a aloca" e desaloca"
mem9"ia -+ando assim % "e-+e"ido. A .NT pe"mi!e -+e o p"o."amado" *aa esse
.e"enciamen!o !am'%m, o -+e % c4amado de P+nsa*e codeQ 2c9di.o inse.+"o5<
en!"e!an!o, po" de*a+l!, oGC % o enca""e.ado dessa !a"e*a, e o con!"0"io n/o %
"ecomendado.
-nde podemos usar a .NET9
Como conse-R:ncia do -+e *oi di!o acima, a .NT se adap!a pe"*ei!amen!e ao
desenvolvimen!o do se.+in!e !ipo de aplicaes#
'plica!+es clientes de front end
'plica!+es de middle1are # We' se"vices, aplica!+es do lado servidor
2ASP.NT, S=AP, We' Se"vices e LM?5
'plica!+es para internet # a .NT *o"nece 'i'lio!ecas especiali6adas pa"a o
desenvolvimen!o de aplicaes pa"a 1n!e"ne! s+po"!ando os p"o!ocolos
mais com+ns# FTP, SMTP, STTP, S=AP e!c.
'plica!+es grficas # via a 'i'lio!eca GD1>, a .NT d0 s+po"!e comple!o a
esse !ipo de aplicaes.
'cesso a bancos de dados via '234/T : AD=.NT % +ma evol+/o da
!ecnolo.ia AD= +sada amplamen!e no desenvolvimen!o de sis!emas
pa"a 'ancos de dados. n!"e!an!o, novas ca"ac!e";s!icas s/o encon!"adas
nessa nova 'i'lio!eca, como manip+la/o de dados na aplica/o clien!e,
como se es!a es!ivesse sendo manip+lada no se"vido". 1sso implica em
aplicaes connectionless 2sem cone7/o5 com vis!as a n/o de."ada" o
desempen4o do se"vido" de 'anco de dados, -+ando es!e es!0 se"vindo 02
mil4a"es de cone7es sim+l!aneamen!e. 1deal pa"a desenvolvimen!o de
aplicaes =?TP, n/o %J
'plica!+es multitarefa # a 'i'lio!eca SEs!em.T4"ead d0 s+po"!e ao desenvolvimen!o
de aplicaes m+l!i!a"e*a. m+i!o maisT
Ambientes de ,esenvolvimento .NET
No momen!o da ela'o"a/o des!e ma!e"ial, !emos con4ecimen!o da e7is!:ncia dos
se.+in!es am'ien!es de desenvolvimen!o pa"a .NT#
./TS25 6rame1or7 848, 94: e ;4:: s!e am'ien!e vem )+n!o com o SDU .NT e %
apenas de lin4a de comando. Pode se" 'ai7ado do si!e da Mic"oso*!.
0.S<'# ST<2.3 4/T (0S4/T 9::; e 9::=): s!e % +mam'ien!e de
desenvolvimen!o da mesma *am;lia das ve"ses do Ais+al S!+dio da Mic"oso*!,
mas ele % comple!amen!e in!e."ado com !odas as lin.+a.ens Fs -+ais o*e"ece
s+po"!e#
C#, AB, $sc"ip! e Mana.ed C>>. Ainda % poss;vel es!ende" o s+po"!e
do AS.NT pa"a o+!"as lin.+a.ens -+e n/o s/o na!ivas a ele. Nes!e liv"o,
nos 'asea"emos nes!e am'ien!e pa"a a ap"esen!a/o dos e7emplos. n!endemos
-+e a maio"ia dos desenvolvedo"es da pla!a*o"ma Windo8s i"0
+s03lo e po" isso ac4amos desnecess0"io +sa" o+!"os am'ien!es de
desenvolvimen!o.
C-Sharp2evelop: s!e am'ien!e de desenvolvimen!o % da ca!e.o"ia =pen
So+"ce, poss+i al.+mas *+ncionalidades de 1D, mas ainda es!0 em *ase de
desenvolvimen!o e po"!an!o ainda incomple!o. Apesa" de se" +m 'om
p"od+!o e se" ."a!+i!o, n/o c4e.a ao n;vel do AS.NT. = +so des!e am'ien!e
% enco"a)ado pela inicia!iva =pen So+"ce .NT c+)o nome % M=N=
24!!p#GG888..o3mono.com5, e c+)o o')e!ivo % mi."a" a .NT pa"a o am'ien!e
?in+7.
As caractersticas do C:
Den!"e as ca"ac!e";s!icas essenciais do C# podemos ci!a"#
Simplicidade# os p"o)e!is!as de C# cos!+mam di6e" -+e essa lin.+a.em %
!/o pode"osa -+an!o o C>> e !/o simples -+an!o o Ais+al Basic.
Completamente orientada a objetos# em C#, -+al-+e" va"i0vel !em de *a6e"
pa"!e de +ma classe.
6ortemente tipada# isso a)+da"0 a evi!a" e""os po" manip+la/o imp"9p"ia
de !ipos, a!"i'+ies inco""e!as e!c.
Gera c%digo gerenciado# assim como o am'ien!e .NT % .e"enciado, assim
!am'%m o % C#.
Tudo * umobjeto: S&stem43bject % a classe 'ase de !odo o sis!ema de !ipos
de C#.
Controle de vers+es: cada assem'lE .e"ado, se)a como L o+ D??, !em
in*o"ma/o so'"e a ve"s/o do c9di.o, pe"mi!indo a coe7is!:ncia de dois
assem'lies 4omKnimos, mas de ve"ses di*e"en!es no mesmo am'ien!e.
Suporte a c%digo legado: o C# pode in!e"a.i" com c9di.o le.ado de o')e!os
C=M e D??s esc"i!as em +ma lin.+a.em n/o3.e"enciada.
6le(ibilidade: se o desenvolvedo" p"ecisa" +sa" pon!ei"os, o C# pe"mi!e,
mas ao c+s!o de desenvolve" c9di.o n/o3.e"enciado, c4amado P+nsa*eQ.
#inguagem gerenciada: os p"o."amas desenvolvidos em C# e7ec+!am
n+m am'ien!e .e"enciado, o -+e si.ni*ica -+e !odo o .e"enciamen!o de
mem9"ia % *ei!o pelo "+n!ime via o GC 2Ga"'a.e Collec!o"5, e n/o di"e!amen!e
pelo p"o."amado", "ed+6indo as c4ances de come!e" e""os com+ns
a lin.+a.ens de p"o."ama/o onde o .e"enciamen!o da mem9"ia % *ei!o
di"e!amen!e pelo p"o."amado".
3-l" #undo4 A estrutura b"sica de uma aplicao C:
= pe-+eno !"ec4o de c9di.o a se.+i" implemen!a o cl0ssico p"o."ama P=l0
m+ndoQ#
using SEs!em<
class AppPon!oNe!
V
static void Main2 5
V
GGesc"evendo no console
Console.W"i!e?ine2W=l0 m+ndo em C#W5<
Console.&ead?ine2 5<
X
X
# Cabeal$o "o programa
A p"imei"a lin4a do nosso p"o."ama, -+e esc"eve no console P=l0 m+ndo em
C#Q, con!%m a in*o"ma/o do namespace SEs!em, -+e con!%m as classes p"imi!ivas
necess0"ias pa"a !e" acesso ao console do am'ien!e .NT. Pa"a incl+i"
+m namespace em C#, +!ili6amos a cl0+s+la +sin. se.+ida do nome do namespace.
% "eclarao "e uma classe
= C# "e-+e" -+e !oda a l9.ica do p"o."ama es!e)a con!ida em classes. Ap9s a
decla"a/o da classe +sando a palav"a "ese"vada class , !emos o se+ "espec!ivo
iden!i*icado". Pa"a -+em n/o es!0 *amilia"i6ado com o concei!o de classe, apenas
adian!amos -+e +ma classe % +m !ipo a's!"a!o de dados -+e no pa"adi.ma de
p"o."ama/o o"ien!ada a o')e!os % +sado pa"a "ep"esen!a" o')e!os do m+ndo
"eal. No e7emplo acima, !emos +ma classe -+e con!%m apenas o m%!odo Main2 5
e n/o "ece'e nen4+m pa"Mme!"o.
# &to"o &ain( )
Todo p"o."ama C# deve !e" +ma classe -+e de*ina o m%!odo Main2 5, -+e deve
se" decla"ado como es!0!ico +sando o modi*icado" s!a!ic, -+e di6 ao "+n!ime -+e o m%!odo
pode se" c4amado sem -+e a classe se)a ins!anciada. C a!"av%s desse modi*icado" -+e o
"+n!ime sa'e -+al se"0 o pon!o de en!"ada do p"o."ama no am'ien!e Win@2, pa"a pode"
passa" o con!"ole ao "+n!ime .NT. =PMQ ma;+sc+lo do m%!odo Main % o'"i.a!9"io, e se+
valo" de "e!o"no void si.ni*ica -+e o m%!odo n/o "e!o"na nen4+m valo" -+ando % c4amado.
%lgumas 'ariantes "o mto"o %ain& '
GGMain "ece'e pa"Mme!"os na lin4a de comando via o a""aE
GGa".s
static void Main2s!"in.Y Z a".s5
V
GGco"po do m%!odo
X
GGMain !em como valo" de "e!o"no +m !ipo in!
static int Main2 5
V
GGco"po do m%!odo
X
A*o"ma do m%!odo Main2 5 a se" +sada vai depende" dos se.+in!es *a!o"es#
=p"o."ama vai "ece'e" pa"Mme!"os na lin4a de comandoJ n!/o esses pa"Mme!"os
se"/o a"ma6enados no a""aE args .
N+ando o p"o."ama % *inali6ado, % necess0"io "e!o"na" al.+m valo" ao sis!emaJ
n!/o o valo" de "e!o"no se"0 do !ipo int.
Dm p"o."ama esc"i!o em C# pode !e" mais de +ma classe -+e implemen!a o
m%!odo Main2 5. Nesse caso, deve"0 se" especi*icado em !empo de compila/o
em -+al classe se encon!"a o m%!odo Main2 5, -+e deve"0 se" c4amado pelo "+n!ime
-+ando a aplica/o *o" e7ec+!ada.
7emplo#
using SEs!em<
class class[
V
static void Main2 5
V
Console.W"i!e?ine2WM%!odo Main2 5 da classe [W5<
X
X
class class2
V
static void Main2 5
V
Console.W"i!e?ine2WM%!odo Main2 5 da classe 2W5<
X
X
= "es+l!ado da compila/o des!e p"o."ama %#
Class[.cs265# P"o."am \C#]ME Doc+men!s]Ais+al S!+dio P"o)ec!s]!8oMainMe!]o')]De'+.]!8oMainMe!.e7e\ 4as
mo"e !4an one en!"E poin! de*ined# \class[.Main2 5\ Class[.cs2[^5# P"o."am \C#]ME Doc+men!s]Ais+al S!+dio
P"o)ec!s]!8oMainMe!]o')]De'+.]!8oMainMe!.e7e\ 4as mo"e !4an one en!"E poin! de*ined# \class2.Main2 5\
Den!"o do am'ien!e de desenvolvimen!o AS.NT p"oceda da se.+in!e *o"ma
pa"a "esolve" esse p"o'lema#
[. Cli-+e no men+ Project e selecione a op/o Properties.
2. Cli-+e na pas!a Common Properties.
@. Cli-+e na op/o General.
_. Modi*i-+e a p"op"iedade Startup Object, selecionando a classe -+e
con!%m o m%!odo Main2 5 -+e voc: dese)a -+e se)a c4amado pelo &+n!ime
-+ando a aplica/o *o" e7ec+!ada.
^. Cli-+e em Ok e compile a aplica/o de novo.
%lguns (ltimos "etal$es a"icionais
Blocos de c9di.o s/o a."+pados en!"e c4aves V X.
Cada lin4a de c9di.o % sepa"ada po" pon!o3e3v;".+la.
=s comen!0"ios de lin4a simples comeam com d+as 'a""as GG. Comen!0"ios
em 'loco s/o *ei!os +sando os !e"minado"es G` 2de in;cio5 e `G 2de *im5.
G`
s!e % +m comen!0"io de 'loco
Se.+e o mesmo es!ilo de CGC>>
`G
= C# % sens;vel ao con!e7!o, po"!an!o in! e 1NT s/o d+as coisas di*e"en!es.
in! % +ma palav"a "ese"vada -+e % +m alias do !ipo SEs!em.1n!@2. 1NT
pode"ia se" +m iden!i*icado", en!"e!an!o n/o % "ecomendado +sa" como
iden!i*icado"es de va"i0veis o nome de +m !ipo o+ palav"a "ese"vada como
no e7emplo ci!ado.
Semp"e decla"e +ma classe onde !odos os aspec!os ine"en!es F iniciali6a/o
da aplica/o se"/o implemen!ados, e o'viamen!e, -+e con!e"0 o m%!odo
Main2 5 !am'%m. No deco""e" des!e liv"o se.+i"emos *ielmen!e essa "e."a
nos nossos e7emplos.
%nteragindo com o console
Toda lin.+a.em de p"o."ama/o o*e"ece meios de in!e"a.i" com o console, pa"a
le" o+ esc"eve" na en!"ada 2.e"almen!e o !eclado5 e sa;da pad"/o 2no"malmen!e o
v;deo em modo !e7!o5.mC#, !emos +ma classe c4amada Console no namespace
SEs!em, a -+al o*e"ece +ma s%"ie de m%!odos pa"a in!e"a.i" com a en!"ada e
sa;da pad"/o. Ae)amos al.+ns e7emplos#
public class s!d1n=+!
V
static void Main2 5
V
char c<
string s!"<
GGsc"eve no console sem "e!o"no de ca""o
Console.W"i!e2WDi.i!e se+ nome# W5<
GG?: +ma s!"in. do console. an!e"b pa"a concl+i"
s!" c Console.&ead?ine2 5<
GGsc"eve no console sem "e!o"no de ca""o
Console.W"i!e2WDi.i!e +ma vo.al e !ecle an!e"b#W<
GG?: do console +m ca"ac!e"e simples.
c c 2char5Console.&ead2 5<
GGsc"eve +ma lin4a em '"anco
Console.W"i!e?ine2 5<
GGsc"eve +ma s!"in. no console
Console.W"i!e?ine2WSe+ nome %# V0XW, s!"5<
GGsc"eve [ ca"ac!e"e com ToS!"in.2 5 pa"a conve"!e"
Console.W"i!e?ine2WS+a vo.al# V0XW, c.ToS!"in.2 55<
Console.&ead?ine2 5<
X
X
Como voc: pode ve" no e7emplo acima, pa"a esc"eve" no console +samos os m%!odos#
Console4>rite( ), pa"a esc"eve" +ma s!"in. sem "e!o"no de ca""o<
Console4>rite#ine( ), pa"a esc"eve" +ma s!"in. com "e!o"no de ca""o. ssa
s!"in. pode se" pa"ame!"i6ada, o -+e si.ni*ica -+e o con!e(do de va"i0veis
pode se" mos!"ado no console. As va"i0veis a se"em mos!"adas comeam a
pa"!i" do se.+ndo pa"Mme!"o e s/o sepa"adas po" v;".+la. Na s!"in. do p"imei"o
pa"Mme!"o elas s/o "ep"esen!adas po" n(me"os in!ei"os, a comea"
po" 6e"o, ence""ados en!"e !e"minado"es de in;cio PVQe de *imPXQ.
7emplo#
Console.W"i!e?ine2Wva"[# V0X, va"2# V[X, va"@# V2XW, va"[, va"2, va"@5<
Pa"a le" dados da en!"ada pad"/o, +samos os se.+in!es m%!odos#
)ead2 5, pa"a le" +m ca"ac!e"e simples<
)ead#ine2 5 pa"a le" +ma lin4a comple!a, con*o"me mos!"ado no e7emplo
acima.
)ormatan"o a sa*"a pa"ro
A *o"ma!a/o da sa;da pad"/o % *ei!a +sando os c4amados Pca"ac!e"es de escapeQ
2ve)a a !a'ela a'ai7o5. Ae)amos +m e7emplo#
GG]! c TAB
GG]n c -+e'"a de lin4a e "e!o"no de ca""o 2C& ?F5
Console.W"i!e?ine2 Wva"[# V0X ]! va"2# V[X]! va"@# V2X]nW, va"[, va"2, va"@5<
Caracter Descri,-o
3n Insere uma nova lin'a
3t T-3
3a /ispara o som de um alarme sonoro simples
3b -pa$a o caractere anterior da strin$ que est) sendo
escrita no console <ac4space=
3r Insere um retorno de carro
34 Caractere N>00 <nulo=
+ari,'eis
m C#, !odas as va"i0veis s/o decla"adas den!"o do escopo de +ma classe e podem
se" dos se.+in!es !ipos#
#ocais # s/o decla"adas no escopo de +m me!9do, inde7ado" o+ even!o e
n/o poss+em modi*icado"es de acesso. A s+a decla"a/o se limi!a ao !ipo
se.+ido do iden!i*icado" da va"i0vel.
'tributos de uma classe ou campos da classe # a va"i0vel % decla"ada como
mem'"o de +ma classe. A decla"a/o deve se" e*e!+ada como se se.+e#
Y?odificador de acessoZ Ytipo atributoZ atipo da varivelb aidentificadorb
(xemplo
public class App
V
public int va"1n!<
static void Main2 5
V
in! va"?ocal<
X
X
O campo interno no e%emplo acima est) declarado com a vari)vel varint, !) a vari)vel local est)
declarada com a var0ocal. O modi"icador de acesso, neste nosso e%emplo # o ublic, o tipo do
atriuto # do tipo inteiro que no caso do C# declaramos como sendo do tipo int, como voc. pode
perceer # astante sutil a oservao desse tipo de vari)veis dentro do c*di$o C#. Os
modi"icadores de acesso somente so usados para os memros de classe, e no para vari)veis
locais.
Os modi"icadores de acesso esto relacionados aai%o:
'o#ifica#or #e )cesso Descri,-o
0rivate Este modi"icador s* permite que a mesma classe acesse o memro
de classe. Ou se!a, quando declaramos uma vari)vel com este
modi"icador, semente a classe que possui este memro de classe #
que poder) acessar esta vari)vel.
0rotected Com este modi"icador de acesso, a classe que possui a vari)vel
compartil'a a vari)vel com outras classes que possam vir a
descender da classe propriet)ria da vari)vel.
0ublic Este modi"icador de acesso permite que outras classes possam
acessar esta vari)vel.
- $istema de Tipos em C:
m C#, !odo !ipo % de"ivado da classe S&stem43bject, -+e cons!i!+i o n(cleo do
sis!ema de !ipos de C#. n!"e!an!o, os p"o)e!is!as da lin.+a.em, e n/o apenas da
lin.+a.em, mas de .NT como +m !odo, sa'em pe"*ei!amen!e das implicaes de !e" +m
sis!ema de !ipos onde !+do % +m o')e!o# -+eda de desempen4o. Pa"a "esolve" es!e
p"o'lema, eles o".ani6a"am o sis!ema de !ipos de d+as *o"mas#
Tipos 0alor # va"i0veis des!e !ipo s/o alocadas na pil4a e !:m como classe
'ase SEs!em.Aal+eTEpe, -+e po" s+a ve6 de"iva de SEs!em.=')ec!.
Tipos )efer@ncia # va"i0veis des!e !ipo s/o alocadas na mem9"ia 4eap e !:m
a classe SEs!em.=')ec! como classe 'ase.
=s !ipos valo", -+e s/o os !ipos p"imi!ivos, !ais como# in!, *loa! e c4a", es!es !ipos n/o
p"ecisam se" alocados na mem9"ia 4eap, pois como o acesso se"ia m+i!o c+s!oso pa"a o
sis!ema da a"-+i!e!+"a do comp+!ado", dep"eciando a pe"*o"mance de acesso< como o
acesso a esse !ipo de dado necessi!a se" 0.il, en!/o es!e !ipos s/o alocados na pil4a da
mem9"ia pa"a o!imi6a" a pe"*o"mance de acesso.
Ae)a na *i.+"a a se.+i" a 4ie"a"-+ia de !ipos em C# e .NT#
Tipos 5alor
Tipos valo" n/o podem se" +sados como classes 'ase pa"a c"ia" novos !ipos
po"-+e es!es s/o implemen!ados +sando classes c4amadas PseladasQ, a pa"!i" das
-+ais n/o % poss;vel implemen!a" o mecanismo de 4e"ana. An!es de se"em +sados,
os !ipos valo" devem se" iniciali6ados, caso con!"0"io o compilado" ac+sa"0
+m e""o.
=s !ipos valo" s/o s+'divididos em d+as ca!e.o"ias#
[. struturas
2. numerados
Estruturas
s!"+!+"as s/o +sadas pa"a implemen!a" !ipos simples c4amados de p"imi!ivos
em o+!"as lin.+a.ens de p"o."ama/o, s/o c"iadas na pil4a e ainda o*e"ecem
m+i!o do po!encial de +ma classe a +m c+s!o meno". =s se.+in!es !ipos s/o
implemen!ados
+sando es!"+!+"as#
ipos primitivos
o /um*ricos# in!ei"os, pon!o *l+!+an!e e decimal
o $ooleanos# ve"dadei"o e *also
ipos de!inidos pelo usu"rio# es!"+!+"as p"op"iamen!e di!as -+e pe"mi!em
-+e o +s+0"io c"ie se+s p"9p"ios !ipos.
Enumera"os
S/o +sados pa"a implemen!a" lis!as de valo"es cons!an!es, os -+ais podem se" de
-+al-+e" !ipo in!ei"o 2lon., in! e!c.5< po"%m n/o podem se" do !ipo c4a". Cada cons!an!e
!em +m valo" in!ei"o associado, o -+al pode se" so'"esc"i!o -+ando assim de*inido na lis!a
en+me"ada. =s valo"es in!ei"os associados a cada cons!an!e da lis!a en+me"ada
comeam a pa"!i" de 6e"o. A'ai7o se.+e +m e7emplo#
enum Novosipos
V
Aalo"[,
Aalo"2,
Aalo"@,
Aalo"_,
...
X
Como !) "oi e%plicado, cada valor dentro da declarao enum corresponde a um valor inteiro, ou
se!a, podemos realizar um cast para podermos acessar o &ndice que o item selecionado representa
em relao ao tipo inteiro, como mostra o e%emplo aai%o:
int !aria!el 5 .int/No!osTios.6alor07
Neste e%emplo estamos acessando o valor inteiro que ?alor@, dentro do tipo enumerado
representa, e estamos repassando este valor para a vari)vel c'amada variavel.
Classes
Dma classe % +m !ipo "e*e":ncia e podemos de*ini3la como a implemen!a/o de
+m !ipo a's!"a!o de dados -+e modela o')e!os do m+ndo "eal. Assim sendo, a classe %
apenas +ma "ep"esen!a/o de +m o')e!o do m+ndo "eal den!"o do m+ndo o"ien!ado a
o')e!os. >ma classe de"ine atributos e m)todos que implementam a estrutura de dados
e as suas opera(es, respectivamente.
Ao c"ia"mos Pva"i0veisQ c+)o !ipo % +ma classe, di6emos -+e es!amos ins!anciando
a classe, e po" s+a ve6, ins!Mncias de classes s/o c4amadas de objetos.
A decla"a/o de +ma classe em C# % como se se.+e#
Ymodificador de acessoZ class aidentificadorb # Yclasse baseZ
V
GGdecla"a/o de a!"i'+!os e m%!odos
X
7emplo de decla"a/o de classe#
public class Min4aClasse # ")stem*+b,ect
V
private string nome<
private !loat limi!eC"edi!o<
private int id<
X
m C# a implemen!a/o de p"op"iedades e m%!odos % 1n?ine, como se.+e o e7emplo a'ai7o de
implemen!a/o da p"op"iedade#
public string Nome
V
.e! V "e!+"n nome< X
se! V nome c val+e< X
X
&embros "e uma classe
=s mem'"os de +ma classe podem se"#
A!"i'+!os
M%!odos
P"op"iedades
ven!os
Cons!an!es
1nde7e"s
=pe"ado"es
&embros est,ticos e membros inst-ncias
=s mem'"os de +ma classe podem se" classi*icados da se.+in!e manei"a#
(stticos# S9 podem se" c4amados +sando o iden!i*icado" da classe, mas
n/o a!"av%s das s+as ins!Mncias, o -+e si.ni*ica -+e podem se" c4amados
sem !e" de se c"ia" +ma ins!Mncia da classe.
Inst-ncias# =s mem'"os de ins!Mncia n/o podem se" c4amados sem an!es !e"
ins!anciado a classe. Todos a-+eles mem'"os -+e n/o s/o p"ecedidos do
modi*icado" static s/o en!endidos como mem'"os ins!Mncias.
=s mem'"os es!0!icos podem se" classi*icados da se.+in!e manei"a#
.tributos estticos: 1ndependen!e do n(me"o de ins!Mncias 2o')e!os5 -+e
se)am c"iadas de +ma classe, e7is!e apenas +ma (nica c9pia de +m a!"i'+!o
es!0!ico. A!"i'+!os es!0!icos s9 podem se" modi*icados na classe a!"av%s de
m%!odos es!0!icos. A !en!a!iva de acessa" +m mem'"o es!0!ico via +ma ins!Mncia
.e"a +m e""o em !empo de compila/o. Da mesma *o"ma, a!"i'+!os de ins!Mncia s9
podem se" acessados via m%!odos de ins!Mncia.
7emplo
using SEs!em<
class Class[
V
GGa!"i'+!o es!0!ico
public static int !o!al c 0<
public int naos!a!ico<
GGm%!odo es!0!ico
public static void inc2 5
V
!o!al>><
X
X
class App
V
static public void Main2 5
V
Console.W"i!e?ine2Class[.!o!al>>5<
Class[.inc2 5<
Class[ cl[ c ne8 Class[2 5<
Console.W"i!e?ine2Class[.!o!al>>5<
Class[ cl2 c ne8 Class[2 5<
Console.W"i!e?ine2Class[.!o!al5<
Console.&ead?ine2 5<
X
X
Na sa;da do console !emos os se.+in!es "es+l!ados ao compila"mos o nosso, e7emplo#
0
2
@
#)todos
=s m%!odos s/o os e-+ivalen!es das *+nes o+ p"ocedimen!os na p"o."ama/o
es!"+!+"ada. n!"e!an!o, em C# os m%!odos es!/o di"e!amen!e li.ados a +ma
classe e a s+a decla"a/o % *ei!a da se.+in!e *o"ma#
Ymodificador de acessoZ Ytipo do m*todoZ atipo do valor de retornob
aidentificador do m*todob2Ylista de parAmetrosZ5
V
GGimplemen!a/o
X
Al.+ns de!al4es impo"!an!es so'"e a decla"a/o de m%!odos#
=s pa"Mme!"os consis!em em +ma lis!a de va"i0veis sepa"adas po" v;".+la,
cada +m p"ecedido pelo do !ipo mais o !ipo da va"i0vel se.+ido do se+
iden!i*icado".
Dm m%!odo pode simplesmen!e n/o "ece'e" pa"Mme!"os.
=s m%!odos podem !e" va"i0veis locais, as -+ais s/o decla"adas na s+a
implemen!a/o.
7emplo de m%!odo sem pa"Mme!"os#
public void me!odoTes!e2 5
V
int n+me"oc0<
n+me"o>><
X
7emplo de m%!odo com pa"Mme!"o#
public int me!odoTes!eComPa"ame!"o2in! pa"am[, s!"in. pa"am25
V
GGa-+i voc: pode +!ili6a" os pa"Mme!"os do se+ m%!odo da manei"a -+e *o"
necess0"io den!"o de s+a "e."a de ne.9cio
in! va"iavel[ c pa"am[<
"e!+"n aretornar BualBuer valor inteiro dentro de sua regra de neg%ciob
X
Constantes
Cons!an!es s/o a!"i'+!os c+)o valo" % de!e"minado em !empo de compila/o.
7emplos de a!"i'+!os cons!an!es s/o# a va"i0vel ma!em0!ica P1, a !empe"a!+"a
de e'+li/o da 0.+a 2[00dC5 e!c. Nesses casos, +samos +ma cons!an!e po"-+e o
se+ valo" % con4ecido em !empo de compila/o e n/o m+da"0 d+"an!e a e7ec+/o
do p"o."ama.
Cons!an!es devem se" decla"adas den!"o do escopo de +ma classe o+ m%!odo
sendo, nes!e (l!imo caso, vis;veis apenas no m%!odo 2locais5.
As cons!an!es s/o po" de*ini/o es!0!icas e devem se" acessadas a!"av%s do
iden!i*icado" da classe e n/o po" s+as ins!Mncias. Apesa" disso, cons!an!es
podem se" "e*e"enciadas po" mem'"os ins!Mncia da classe, o -+e n/o % ve"3
dade pa"a a!"i'+!os es!0!icos convencionais.
Podemos decla"a" classes c+)a (nica *inalidade se)a F decla"a/o de cons!an!es.
Como ve"emos mais adian!e, n/o se"0 necess0"io ins!anci03la< pa"a evi!a" -+e isso se)a
*ei!o pelos +s+0"ios da classe, decla"a"emos +m cons!"+!o" p"ivado. &e!oma"emos
esse ass+n!o novamen!e -+ando *ala"mos de cons!"+!o"es.
Construtores "e inst-ncias
Cons!"+!o"es de ins!Mncias, o+ simplesmen!e cons!"+!o"es, s/o m%!odos c4amados
a+!oma!icamen!e -+ando da ins!ancia/o de +ma classe, os -+ais implemen!am
as aes necess0"ias pa"a s+a iniciali6a/o. Semp"e -+e +ma classe % ins!anciada,
+m cons!"+!o" con4ecido como Pde*a+l!Q% c4amado.
7emplo#
using SEs!em<
class Ci"c+lo
V
private int 7,E<
public Ci"c+lo 2 5
V
Console.W"i!e?ine2PCons!"+!o" De*a+l!Q5<
X
X
class Cs4a"pApp
V
static void Main2 5
V
Cs4a"p7 cl[ c ne$ Cs4a"p72 5<
X
X
Aamos il+s!"a" al.+ns concei!os a pa"!i" de nosso e7emplo#
Dm cons!"+!o" semp"e !em o nome da classe da -+al % mem'"o
Cons!"+!o"es podem "ece'e" pa"Mme!"os
Cons!"+!o"es sem pa"Mme!"os s/o c4amados de construtores CdefaultD,e
semp"e s/o c4amados -+ando da ins!acia/o da classe, no nosso e7emplo,
a se.+in!e decla"a/o#
Cs4a"p7 cl[ c ne8 Cs4a"p72 5
...% de +m cons!"+!o" de*a+l!.
N+ando a classe % ins!anciada, o cons!"+!o" de*a+l! semp"e se"0 c4amado,
e pa"a -+e de!e"minadas aes se)am e7ec+!adas a pa"!i" dele, es!e p"ecisa
se" modi*icado con*o"me *i6emos no nossso e7emplo.
Cons!"+!o"es com pa"Mme!"os s/o c4amados de construtores customiEados
Cons!"+!o"es n/o poss+em valo" de "e!o"no.
A se.+i", modi*icamos o e7emplo an!e"io" e adicionamos F classe +m cons!"+!o"
c+s!omi6ado#
using SEs!em<
class Ci"c+lo
V
private int 7, E<
public Ci"c+lo2 5
V
Console.W"i!e?ine2WCons!"+!o" De*a+l!W5<
X
public Ci"c+lo2in! a, in! '5
V
7 c a<
E c '<
Console.W"i!e?ine2WCons!"+!o" C+s!omi6adoW5<
X
X
class Cs4a"pApp
V
static void Main2 5
V
Ci"c+lo cl[ c ne8 Ci"c+lo2 5<
Ci"c+lo cl2 c ne8 Ci"c+lo2[,25<
Console.&ead?ine2 5<
X
X
A sa;da no console des!e p"o."ama % como se se.+e#
Construtor 2efault
Construtor CustomiEado
.estrutores
Des!"+!o"es s/o m%!odos mem'"os de +ma classe -+e s/o e7ec+!ados
a+!oma!icamen!e -+ando +m o')e!o % des!"+;do. Al.+mas ca"ac!e";s!icas impo"!an!es de
+m des!"+!o"#
C c4amado a+!oma!icamen!e -+ando +ma ins!Mncia de +ma classe n/o
pode se" mais "e*e"enciada, e en!/o % "emovida da mem9"ia peloGC2Ga"'a.e
Collec!o"5
N/o "ece'e pa"Mme!"os
Estruturas
s!"+!+"as s/o !ipos a's!"a!os de dados m+i!o semel4an!es a classes. A di*e"ena
mais sens;vel en!"e classses e es!"+!+"as "eside no *a!o de -+e es!a (l!ima n/o % alocada
na mem9"ia 4eap, e os se+s valo"es s/o di"e!amen!e con!idos na es!"+!+"a< o Bue
eBuivale a diEer Bue estruturas s"o tipos valor e n"o refer@ncia. As ca"ac!e";s!icas
mais impo"!an!es de +ma es!"+!+"a s/o as se.+in!es#
N/o s+po"!am mecanismo de 4e"ana
S/o +sadas pa"a modela" es!"+!+"as de dados pe-+enas. =s !ipos int, double
e bool s/o implemen!ados +sando es!"+!+"as
s!"+!+"as implemen!am 1n!e"*aces, concei!o -+e ve"emos mais adian!e
S/o !ipos valo", po"!an!o s/o alocadas na pil4a e n/o na mem9"a 4eap
Cada va"i0vel do !ipo es!"+!+"a 2struct5 con!%m +ma c9pia dos se+s valo"es
e, po"!an!o, ao a!"i'+i"mos +ma va"i0vel % do !ipo struct a o+!"a, B, do
mesmo !ipo, o -+e es!amos *a6endo % +ma c9pia dos valo"es de A em B<
po"!an!o, -+al-+e" modi*ica/o em B n/o al!e"a"0 os valo"es de A.
.eclaran"o estruturas
Ae)a no e7emplo a se.+i" a decla"a/o de +ma es!"+!+"a#
using SEs!em<
struct Ci"c+lo
V
private int 7, E<
private !loat diame!"o<
public Ci"c+lo2in! a, in! ', *loa! Diame!"o5
V
7 c a<
E c '<
diame!"o c Diame!"o<
X
X
class Cs4a"pApp
V
static void Main2 5
V
Ci"c+lo cl[ c ne8 Ci"c+lo20,[, [05<
Console.&ead?ine2 5<
X
X
A decla"a/o da es!"+!+"a#
Ymodificador de acessoZ struct anome da estruturab # YinterfaceZ
V
GGmem'"os da es!"+!+"a
X
Como voc: pode o'se"va" na sin!a7e da decla"a/o da es!"+!+"a acima,
semel4an!emen!e a +ma classe, es!"+!+"as podem implemen!a" in!e"*aces< no cap;!+lo
so'"e p"o."ama/o o"ien!ada a o')e!os *ala"emos a "espei!o desse ass+n!o. De *o"ma
simila" a +ma classe, +ma es!"+!+"a pode poss+i" cons!"+!o"es, po"%m n/o poss+i
des!"+!o"es e os cons!"+!o"es !:m de se" c+s!omi6ados. A !en!a!iva de decla"a" o
cons!"+!o" de*a+l! .e"a +m e""o de compila/o. Pa"a c"ia"mos +ma va"i0vel de +m !ipo
struct#
atipoFstructb iden!i*icado" c ne8 atipoFstructbYparAmetros do construtorZ
Dma ve6 -+e % *ei!a a decla"a/o da es!"+!+"a, os valo"es de*a+l! dos se+s a!"i'+!os
s/o con*i.+"ados e copiados di"e!amen!e na es!"+!+"a. Ao con!"0"io das
classes, -+e a"ma6enam "e*e":ncias pa"a 0"eas da mem9"ia, a es!"+!+"a con!%m os
se+s valo"es.
(struturas de Controle Parte I
Decla"aes i! pe"mi!em "eali6a" avaliaes de +ma e7p"ess/o e, dependendo da
ve"acidade da avalia/o, 40 a possi'ilidade de -+e'"a" em se-R:ncias l9.icas
especi*icas. C# *o"nece @ *o"mas de decla"aes i!# i* simples, i*3!4en3else e i*3else3i*3else.
i/ "imples
i* 27p"ess/o Booleana5
Y V Z
acommando a se"em e7ec+!ados com 'ase na condi/ob
Y V Z
Como espe"ado, a e7p"ess/o 'ooleana deve avalia", !am'%m, !"+e o+ *alse. N+ando a
e7p"ess/o 'ooleana % ve"dadei"a, o p"o."ama e7ec+!a a condi/o, como se.+e e7emplo
a'ai7o#
i* 2a".s.?en.!4 cc [5
V
Console.W"i!e?ine2PCon!e(do do a".+men!o# V0XQ, a".sY0Z5<
X
i/#t!en#else
= i* simples, .a"an!e apenas -+e voc: possa e7ec+!a" aes de +ma condi/o
ve"dadei"a. 1sso pode se" *ei!o o+ n/o. Pa"a .e"encia" am'as as condies ve"dadei"a e
*alsa, +se a es!"+!+"a condicional i*3!4en3else, ela !em a se.+in!e *o"ma#
i! 2e7p"ess/o 'ooleana5
V
acomandos pa"a condi/o ve"dadei"ab
X
else
V
acomandos pa"a condi/o *alsab
X
7emplo#
i* 2a".s.?en.!4 cc 05
V
Console.W"i!e?ine2WCon!e(do do a".+men!o# V0XW, a".sY0Z5<
X
else
V
Console.W"i!e?ine2WNao e7is!e a".+men!oW5<
X
i/#else i/#else
Al.+mas ve6es isso % necess0"io pa"a avalia" m(!iplas condies pa"a de!e"mina"
-+al a/o se"0 e7ec+!ada. Nes!e caso +se a es!"+!+"a condicional i*3else i*3else. A-+i es!0
s+a *o"ma no"mal#
i! 2Boolean e7p"ession5
YVZ
!"+e condi!ion s!a!emen!2s5
YXZ
else i! 2Boolean e7p"ession5
YVZ
!"+e condi!ion s!a!emen!2s5
YXZ
.
.
.
else i! 2Boolean e7p"ession5
YVZ
!"+e condi!ion s!a!emen!2s5
YXZ
else
YVZ
*alse condi!ion s!a!emen!2s5
YXZ
N+ma o"dem se-+encial, cada decla"a/o comea com i* e con!in+a a!"av%s de
cada else i*, essa avalia/o con!in+a a!% -+e +ma de s+as ins!"+es avaliadas se)a
ve"dadei"a o+ a!% a (l!ima ins!"+/o condicional.
7emplo#
i! 2a".s.?en.!4 cc 05
V
Console.W"i!e?ine2WP"imei"a condi/o ve"dadei"aW5<
X
else i! 2a".s.?en.!4 cc [5
V
Console.W"i!e?ine2WSe a p"imei"a n/o *o" ve"dadei"a !emos es!a se.+nda op/o
ve"dadei"aW5<
X
else
V
Console.W"i!e?ine2WSen/o es!a se"0 a op/o *alsaW5<
X
"0itc!
N+ando 40 m+i!as condies pa"a se"em avaliadas, a decla"a/o i*3else i*3else
pode !o"na"3se comple7a e di*;cil de man!e". A sol+/o mais limpa e cla"a pa"a es!a
si!+a/o % a decla"a/o S8i!c4. = S8i!c4 pe"mi!e !es!a" -+al-+e" valo" in!ei"o o+ s!"in.,
como !am'%m m+l!iplos valo"es. N+ando o !es!e p"od+6 o "es+l!ado espe"ado, !odas as
decla"aes associadas com a-+ele "es+l!ado se"/o e7ec+!adas. A-+i es!0 a *o"ma
'0sica do S8i!c4#
s$itch2in!e."al o" s!"in. e7p"ession5
V
case ali!e"al3[b#
s!a!emen!2s5
break<
.
.
.
case ali!e"al3nb#
s!a!emen!2s5
break<
Yde*a+l!#
s!a!emen!2s5Z
X
(struturas de Controle Parte II
?oops s/o es!"+!+"as necess0"ias pa"a e7ec+!a" m(l!iplas se-+encias
l9.icas m(l!iplas ve6es n+m p"o."ama. m C# e7is!em -+a!"o !ipos de es!"+!+"as de
"epe!i/o# 84ile, *o", *o"eac4 e o do...84ile.
0!ile
s!a es!"+!+"a de "epe!i/o % +!ili6ada -+ando p"ecisamos "eali6a" a c4eca.em
an!es mesmo de comea" o p"ocesso de "epe!i/o do lao. A'ai7o es!0 a *o"ma de
decla"a/o do 84ile#
$hile 2aCondi/ob5
V
acomandos a se"em e7ec+!adosb
X
7emplo de +so
string doAgain = "Y";
int count = 0;
string[] siteName = new string[10];
while (doAgain == "Y")
{
Console.Write("lease !nter "ite Name# ");
siteName[count$$] = Console.%ead&ine();
Console.Write("Add Anot'er(# ");
doAgain = Console.%ead&ine();
)
do..$hile
s!a es!"+!+"a de "epe!i/o % +!ili6ada -+ando necessi!amos -+e, an!es mesmo da
valida/o 'ooleana, as ins!"+es se)am e7ec+!adas pelo menos +ma ve6. A'ai7o se.+e
a *o"ma de decla"a/o do do..84ile#
do V
S!a!emen!2s5
X $hile 2Boolean e7p"ession5<
7emplo de +so#
do
V
Console.W"i!e?ine2WW5<
Console.W"i!e?ine2WA 3 Add Si!eW5<
Console.W"i!e?ine2WS 3 So"! ?is!W5<
Console.W"i!e?ine2W& 3 S4o8 &epo"!]nW5<
Console.W"i!e?ine2WN 3 N+i!]nW5<
Console.W"i!e2WPlease C4oose 2AGSG&GN5# W5<
c4oice c Console.&ead?ine25<
s$itch 2c4oice5
V
case WaW#
case WAW#
Console.W"i!e?ine2WAdd Si!eW5<
break<
case WsW#
case WSW#
Console.W"i!e?ine2WSo"! ?is!W5<
break<
case W"W#
case W&W#
Console.W"i!e?ine2WS4o8 &epo"!W5<
break<
case W-W#
case WNW#
Console.W"i!e?ine2WGoodBEeW5<
break<
de!ault#
Console.W"i!e?ine2WS+4JJW5<
break<
X
X $hile 22c4oice c c4oice.ToDppe"255 Tc WNW5<
&or
s!e !ipo de loop 2lao5 s/o 'as!an!e +!ili6ados -+ando sa'emos p"eviamen!e o
n(me"o de "epe!ies -+e se"/o necess0"ias pa"a se"em e7ec+!adas. A'ai7o se.+e a
*o"ma de decla"a/o do *o"#
!or 2ini!iali6e"< Boolean e7p"ession< modi*ie"5
YVZ
s!a!emen!2s5
YXZ
A se/o ini!iali6e" somen!e se"0 e7ec+!ada +ma (nica ve6, o+ se)a, a pa"!i" do momen!o
-+e se)a necess0"io en!"a" no loop e -+e o ini!iali6e" !en4a sido e7ec+!ado, apenas o
'oolean e7p"ession e o modi*ie" se"/o e7ec+!ados, a!% -+e a e7p"ess/o 'ooleana se)a
sa!is*ei!a.
7emplo de +so#
int n c si!eName.?en.!432<
int ), H<
string save<
!or 2Hcn3[< H bc 0< H335
V
) c H > [<
save c si!eNameYHZ<
si!eNameYn>[Z c save<
$hile 2 S!"in..Compa"e2save, si!eNameY)Z5 b 0 5
V
si!eNameY)3[Z c si!eNameY)Z<
)>><
X
si!eNameY)3[Z c save<
X
/oreac!
= *o"eac4 % indicada -+ando p"ecisamos !"a'al4a" com in!e"a/o com es!"+!+"as
de cole/o, onde n/o p"ecisamos mais nos p"eoc+pa" em inc"emen!a" o acesso o+ .e"i" o
acesso ao p"97imo i!em da cole/o, sendo assim, 'as!a -+e voc: apenas decla"e +ma
va"i0vel do !ipo do i!em -+e es!0 sendo a"ma6enado den!"o da cole/o -+e a p"9p"ia
es!"+!+"a de "epe!i/o *o"eac4 % -+em i"0 enca""e.a"3se de .e"encia" !odo esse acesso.
A'ai7o se.+e a *o"ma de decla"a/o#
!oreach 2!Epe iden!i*ie" in collec!ion5
YVZ
s!a!emen!2s5
YXZ
7emplo de +so#
*o"eac42Da!a&o8 d" in ds.Ta'lesY0Z.&o8s5
V
d"YPaN=MeD=eCAMP=eN=eBANC=bQZ<
X
Arra6s
m C#, a""aEs s/o o')e!os c+)a classe 'ase % SEs!em.A""aE. =s a""aEs podem se"
+nidimensionais, m+l!idimensionais o+ ainda a""aEs de a""aEs, c+)os elemen!os s/o o+!"os
a""aEs.
.eclaran"o arrays
A se.+i", !emos a decla"a/o de +m a""aE de in!ei"os +nidimensional#
in!Y Z a""1n! c ne8 in!Y2Z<
As !":s *o"mas a se.+i" s/o v0lidas pa"a iniciali6a" +m a""aE -+ando % *ei!a s+a
decla"a/o#
in!Y Z a""1n! c ne8 in!Y2Z V0,[X<
in!Y Z a""1n! c ne8 in!Y Z V0,[X<
in!Y Z a""1n! c V0,[X<
Decla"ando +m e7emplo m+l!idimensional de 2f2 dimenses#
in!Y,Za""1n! c ne8 in!Y2,2Z<
1niciali6ando o a""aE#
in!Y,Za""1n! c ne8 in!Y2,2Z VV0,0X,V0,[XX
Basicamen!e, o -+e es!amos *a6endo no (l!imo e7emplo % decla"a" +m a""aE -+e, po" s+a
ve6, con!%m dois a""aEs 'idimensionais. Ae)a +m e7emplo comple!o#
using SEs!em<
public class clA""aEs
V
private intY Z a""1n! c ne8 in!Y2Z V[,2X<
private intY,Z m+l!1n! c ne8 in!Y2,2Z VV[,2X,V@,_XX<
private intY ZY,Z A""DeA"" c ne$ intY2ZY,Z Vne$ intY2,2Z VV[,2X,V@,_XX, ne$ intY2,2ZVV^,6X,Vg,hXXX<
public void 1mp"imi"A""aE2 5
V
!or 2int ic0< i a a""1n!.?en.!4< i>>5
V
Console.W"i!e?ine2Wlemen!o V0X# V[XW, i, a""1n!YiZ5<
X
X
X
class app
V
static void Main2 5
V
clA""aEs a""7emplo c ne$ clA""aEs2 5<
a""7emplo.1mp"imi"A""aE2 5<
Console.&ead?ine2 5<
X
X
P"eec4endo +m a""aE 'idimensional#
public void p"eenc4e"A""aEBi2 5
V
*o" 2in! ic0< ia m+l!1n!.Ge!?en.!4205< i>>5
*o" 2in! )c0< ) a m+l!1n!.Ge!?en.!42[5< )>>5
V
m+l!1n!Yi,)Zc i`)<
X
X
No e7emplo acima, +samos o m%!odo Ge!?en.!42 5 da classe SEs!em.A""aE pa"a sa'e" o
n(me"o de elemen!os de cada dimens/o. sse m%!odo "ece'e como pa"Mme!"o +m
n(me"o in!ei"o -+e co""esponde F dimens/o ace"ca da -+al -+e"emos con4ece" o n(me"o
de elemen!os. P"eenc4endo +m a""aE de a""aEs#
public void p"eenc4e"$a..edA""aE2 5
V
!or 2int mc0< m a A""DeA"".?en.!4< m>>5
!or 2int ic0< ia A""DeA""YmZ.Ge!?en.!4205< i>>5
!or 2int )c0< ) a A""DeA""YmZ.Ge!?en.!42[5< )>>5
V
A""DeA""YmZYi,)Zc i>)<
X
X
Mos!"ando +m a""aE 'idimensional no console#
public void 1mp"imi"A""aEBi2 5
V
Console.W"i!e?ine2WA""aE Bi3dimensionalW5<
!or 2int ic0< ia m+l!1n!.Ge!?en.!4205< i>>5
V
!or 2int )c0< ) a m+l!1n!.Ge!?en.!42[5< )>>5
V
Console.W"i!e2WV0X]!W, m+l!1n!Yi,)Z5<
X
Console.W"i!e?ine2W W5<
X
X
Mos!"ando +m a""aE de a""aEs no console#
public void 1mp"imi"$a..edA""aE2 5
V
Console.W"i!e?ine2W1mp"imindo A""aE de A""aEsW5<
!or 2int mc0< m a A""DeA"".?en.!4< m>>5
V
Console.W"i!e?ine2WA""DeA""YV0XZW, m 5<
!or 2int ic0< ia A""DeA""YmZ.Ge!?en.!4205< i>>5
V
!or 2int )c0< ) a A""DeA""YmZ.Ge!?en.!42[5< )>>5
V
Console.W"i!e2WV0X]!W, A""DeA""YmZYi,)Z5<
X
Console.W"i!e?ine2WW5<
X
X
X
A se.+i", !emos a classe app -+e c4ama cada +m dos m%!odos#
class app
V
static void Main2 5
V
clA""aEs a""7emplo c ne8 clA""aEs2 5<
a""7emplo.1mp"imi"A""aEBi2 5<
a""7emplo.1mp"imi"$a..edA""aE2 5<
Console.&ead?ine2 5<
X
X
#pera/es com %rrays
)an7 # P"op"iedade -+e "e!o"na o n(me"o de dimenses de+ma""aE. 7emplo#
&es+l! c m+l!1n!.&anH<
#ength : P"op"iedade -+e "e!o"na o n(me"o !o!al de elemen!os de !odas as
dimenses de +m a""aE. &es+l! c m+l!1n!.?en!.4< GG&es+l! se"0 i.+al a _.
Get#enght # Como )0 vimos acima, es!e m%!odo "e!o"na o n(me"o !o!al de
elemen!os de +ma dimens/o espec;*ica do a""aE. &ece'e como
pa"Mme!"o+mn(me"o in!ei"o -+e co""esponde ao n(me"o da dimens/o da -+al se
dese)a sa'e" o !o!al de elemen!os. A n+me"a/o das dimenses comea po" 6e"o.
Ae)a o +so des!e m%!odo no e7emplo acima.
)everse # C +m m%!odo es!0!ico c+)o o')e!ivo % inve"!e" a o"dem dos elemen!os
do a""aE. ssa inve"s/o pode se" comple!a o+ pa"cial, indicando o ;ndice inicial
e *inal pa"a a inve"s/o do a""aE.
7emplo#
int Y Z a"" c ne$ in!Y^Z V[,2,@,_,^X<
A""aE.&eve"se2a"",[,25< GG1nve"!endo o a""aE pa"cialmen!e
A""aE.&eve"se2a""5< GG1nve"!endo o a""aE comple!amen!e
"ort: ="dena o a""aE passado como pa"Mme!"o.
7emplo#
int Y Z a"" c ne$ in!Y^Z V[,@,^,2,0X<
A""aE.So"!2a""5<
Programao OOP
A p"o."ama/o o"ien!ada a o')e!os 2==P5 veio pa"a *ica", sem d(vida nen4+ma.
la pe"mi!e -+e sis!emas comple7os se)am desenvolvidos com mais *acilidade,
!an!o na implemen!a/o inicial -+an!o na man+!en/o.
= p"od+!o mais pop+la" do Ais+al S!+dio a!% 4o)e !em sido o Ais+al Basic.
Po"%m, "eclamava3se m+i!o da a+s:ncia de +m s+po"!e mais comple!o a !odos os
"e-+isi!os -+e ca"ac!e"i6avam +ma lin.+a.em de p"o."ama/o o"ien!ada a o')e!os
2==P5. Com a a"-+i!e!+"a .NT, a Mic"oso*! pa"ece !e" "esolvido a!ende" ao
clamo" da com+nidade de desenvolvedo"es a!acando em !odos os *lancos.
A0"ios mel4o"amen!os *o"am *ei!os no Ais+al Basic, de *o"ma -+e ele pode
se" conside"ado a.o"a como o"ien!ado a o')e!os< mas % emC#, sem d(vida al.+ma,
-+e se !e"0 acesso a +ma lin.+a.em de p"o."ama/o -+e implemen!a, de manei"a
simples e di"e!a 2sem as complicaes do C>>5, !odos os "e-+isi!os de +ma
lin.+a.em ==P em con)+n!o com +ma *o"!e !ipa.em de dados 2+m dos pon!os
*"acos do AB5. Com isso, a p"o."ama/o !o"na3se mais s9lida e m+i!os e""os podem
se" eliminados ainda em !empo de compila/o.
0or que --0 e1iste9
An!es de con!in+a"mos, vamos vol!a" +m po+co no !empo e en!ende" de onde
vem a id%ia po" !"0s da p"o."ama/o o"ien!ada a o')e!os. = concei!o p"edominan!e
de p"o."ama/o an!es de ==P e"a a c4amada p"o."ama/o p"oced+"al. Consis!ia
'asicamen!e em dividi" a !a"e*a de p"o."ama/o em pe-+enos 'locos de c9di.o
c4amados de p"ocedimen!os 2p"oced+"es, em in.l:s5, !am'%m con4ecidos na %poca
como s+'3"o!inas.
m !odos os casos, o -+e se *a6ia, 'asicamen!e, e"a esc"eve" +m !"ec4o de c9di.o
-+e manip+lasse os valo"es de al.+mas va"i0veis e desse al.+m !ipo de "e!o"no.
7empli*icando 2c9di.o em po"!+.+:s5#
7 c 0
n-+an!o 7 a [0
7 c 7 > [
Fim n-+an!o
= e7emplo acima % m+i!o simples, mas 'as!an!e il+s!"a!ivo. Mos!"a -+e e7is!em
dados 2va"i0veis5 e c9di.os -+e manip+lam esses dados 2es!"+!+"as de con!"ole5. N+al o
inconvenien!e dissoJ S+pondo -+e 7 *osse +m valo" -+e !ivesse de se" e7i'ido na !ela,
se"ia necess0"io ac"escen!a" al.+m c9di.o -+e *i6esse isso. =+ se)a, 7 n/o e"a Pcapa6Q de
se Pa+!o3e7i'i"Qna !ela. = c9di.o comple!o se"ia#
7 c 0
n-+an!o 7 a [0
7 c 7 > [
Fim n-+an!o
Posiciona"C+"so" 0,0
1mp"imi" 7
Se *osse *ei!a o+!"a al!e"a/o no valo" de 7, voc: !e"ia de e7ec+!a" novamen!e
os comandos de imp"ess/o pa"a -+e o valo" *osse a!+ali6ado na !ela. =
pon!o a -+e -+e"emos c4e.a" % -+e dados e c9di.os e"am conce'idos como
elemen!os sepa"ados. Savia, incl+sive, +ma de*ini/o -+e di6ia# dados > c9di.o
c p"o."ama.
Com a ==P, +ma das id%ias '0sicas e"a elimina" essa dis!Mncia en!"e dados e
c9di.o e *a6e" com -+e am'os *icassem mais in!e"li.ados. Am'os se"iam capa6es
de in!e"a.i" de *o"ma mais 4omo.:nea e a+!Knoma.
P"imei"amen!e, e7pandi+3se a id%ia de p"ocedimen!o pa"a a id%ia de classe.
Dma classe pe"mi!e -+e v0"ios p"ocedimen!os e dados se)am a"ma6enados den!"o
dela. =s p"ocedimen!os passa"am a c4ama"3se m*todos e os dados passa"am a
c4ama"3se propriedades. Mas n/o *oi +ma me"a ma-+ia.em e +ma m+dana de
nome pa"a a mesma coisa. De *a!o, o concei!o de classe m+do+ "adicalmen!e a vis/o
da p"o."ama/o.
Dma classe de*ine como +m o')e!o deve *+nciona". Fa6endo +ma analo.ia
cl0ssica, % como o p"o)e!o de +ma casa# es!a'elece como as coisas !:m de se". A
pa"!i" dessa plan!a, podem se" cons!"+;das v0"ias casas id:n!icas. 1sso % c4amado
de ins!Mncia em ==P. N+ando di6emos ins!ancia" +ma classe, si.ni*ica coloca"
Pno a"Q +m o')e!o 'aseado na desc"i/o da classe.
Conceitos de encapsulamento+ *erana e polimorfismo
=U, o')e!os !:m p"op"iedades -+e podem se" manip+ladas e .e"a" "es+l!ados
vis;veis e imedia!os. Aoc: p"ovavelmen!e deve es!a" di6endo# Pisso e+ )0 sa'ia e
n/o *oi p"a isso -+e comp"ei es!e liv"o< -+e"o sa'e" como c"ia" me+s p"9p"ios
o')e!osQ.
n!/o vamos p"imei"amen!e en!ende" a mecMnica de *+ncionamen!o dos o')e!os.
Como )0 dissemos, ao al!e"a" o valo" de +ma p"op"iedade, c9di.os s/o e7ec+!ados
de *o"ma a p"od+6i" +m "es+l!ado vis;vel. No e7emplo do 'o!/o, -+al-+e" modi*ica/o nas
p"op"iedades Colo" o+ Te7! p"od+6i"/o e*ei!os imedia!os. Po"%m, ao +sa" +m o')e!o, voc:
n/o Pv:Qo c9di.o nem p"ecisa con4ec:3lo pa"a c"ia" +m 'o!/o. 1s!o % c4amado de
encapsulamento.=s c9di.os +sados pa"a al!e"a" co"es, !;!+los, *o"ma e aspec!o do 'o!/o
*icam escondidos na implemen!a/o da classe.
Se"ana si.ni*ica pa"!i" de al.o )0 p"on!o e modi*ic03lo com o p"op9si!o de dei703lo
mais ade-+ado a de!e"minada *inalidade. S+pondo -+e voc: !em +ma classe 'o!/o com
p"op"iedades '0sicas< voc: pode 4e"da" a-+elas ca"ac!e";s!icas '0sicas e adiciona" ainda
mais *+ncionalidade.=de!al4e % -+e, ao Pde"iva"Q +ma classe a pa"!i" de o+!"a, voc: n/o
p"ecisa con4ece" o c9di.o da classe an!e"io". A s+a nova classe n/o !"a"0 os c9di.os da
classe pai. les con!in+a"/o encaps+lados l0 e voc: pode"0 +s03los se -+ise".=dado
impo"!an!e % -+e voc: n/o p"ecisa manip+la" os c9di.os da classe pai.
Polimo"*ismo % a capacidade -+e +m o')e!o !em de compo"!a"3se de *o"mas
di*e"en!es, com 'ase no se+s descenden!es, onde em +m o')ec! voc: pode !e"
a"ma6enado al.+m o+!"o o')e!o -+e se)a descenden!e desse o')ec! e po" meio de cas!
voc: pode *a6e" com -+e esse o')ec! compo"!e3se da manei"a do se+ descenden!e.
%mplementao pr"tica dos conceitos
Ae)amos a.o"a, em !e"mos de c9di.o, o -+e pode se" *ei!o pa"a c"ia" classes em
C#. Con*o"me )0 *oi vis!o no Cap;!+lo 2, C# % +ma lin.+a.em in!ei"amen!e o"ien!ada a
o')e!os, de *o"ma -+e !+do deve se" implemen!ado den!"o de classes. N/o e7is!em
va"i0veis o+ p"ocedimen!os Psol!osQ.
Apenas pa"a "elem'"a", o es-+ele!o '0sico de +ma classe deve"0 !e" mais o+
menos o se.+in!e aspec!o#
escopo class NomeClasse
V
GGP"op"iedades
escopo !ipo nome<
escopo !ipo nome<
GGCons!"+!o"es
escopo NomeClasse
V
GGspeci*icaes
X
GGM%!odos
escopo !ipo NomeM%!odo
V
GGspeci*icaes
X
X
viden!emen!e, esse e7emplo es!0 m+i!o simpli*icado, mas !"a6 a id%ia '0sica#
voc: !em de plane)a" -+ais se"/o as p"op"iedades, os m%!odos, os con!"+!o"es,
des!"+!o"es e se+s escopos e !ipos. 7emplo#
p+'lic class Cadas!"o
V
GGP"op"iedades
p+'lic s!"in. CPF<
p+'lic s!"in. NomeClien!e<
GGCons!"+!o"es
p+'lic Cadas!"o2 5
V
Messa.eBo7.S4o82 W+ so+ o cons!"+!o" \de*a+l!\TW 5<
X
p+'lic Cadas!"o2 s!"in. *CPF, s!"in. *Nome 5
V
GGComandos de iniciali6a/o
!4is.CPF c *CPF<
!4is.NomeClien!e c *Nome<
Messa.eBo7.S4o82 W+ so+ +m cons!"+!o" c+s!omi6ado e "ece'i W > *CPF > W e W > *Nome >
W como pa"Mme!"os.W 5<
X
GGM%!odos
p+'lic 'ool G"avo+2 5
V
GGC9di.o pa"a ."ava/o
"e!+"n !"+e<
X
X
m C#, a "e."a pa"a de*ini" +m cons!"+!o" % m+i!o simples# 'as!a c"ia" +m
m%!odo c+)o nome se)a id:n!ico ao da classe. Toda ve6 -+e +ma ins!Mncia da classe
*o" c"iada, o cons!"+!o" se"0 a+!oma!icamen!e dispa"ado. ='se"ve !am'%m -+e, no
e7emplo an!e"io", *o"am c"iados dois cons!"+!o"es pa"a a mesma classe. 1sso, em ==P, %
c4amado de sobrecarga 2ove"load5 de m%!odo. A palav"a sobrecarga pode !"a6e" a id%ia
de es!"esse o+ e7cesso de !"a'al4o, mas nesse caso % +m elemen!o -+e nos a)+da e
m+i!oT N+ando +m m%!odo % Pso'"eca""e.adoQ, o edi!o" do Ais+al S!+dio d0 +ma indica/o
cla"a disso< mos!"ando -+e 40 o+!"os m%!odos so'"eca""e.ados po" meio de !ipos de
assina!+"as di*e"en!es. = compilado" "econ4ece"0 a+!oma!icamen!e -+al assina!+"a voc:
es!0 +sando po" meio dos !ipos dos pa"Mme!"os -+e es!/o sendo +!ili6ados no m%!odo.
-ai%o, se$ue um e%emplo de sorecar$a de construtores:
V
GGCons!"+!o" \de*a+l!\ % c4amado
Cadas!"o Fic4a[ c ne8 Cadas!"o2 5<
GGCons!"+!o" o!imi6ado % c4amado
Cadas!"o Fic4a2 c ne8 Cadas!"o2 W[2@W, WDe =livei"a N+a!"oW 5<
X
Criao de 0ropriedades
Aamos e7plo"a" a.o"a +m po+co mais as possi'ilidades de c"ia/o de
p"op"iedades. =s e7emplos an!e"io"es *o"am m+i!o simples. Dma p"op"iedade, % p"eciso
en!ende" em p"imei"o l+.a", se pa"ece m+i!o com +ma simples va"i0vel, mas % 'em mais
do -+e isso. Dma p"op"iedade 2!am'%m c4amada de Pa!"i'+!oQ,dependendo da *o"ma
como *oi de*inida5 % +m valo" ao -+al % associado +m m%!odo. Toda ve6 -+e *o" lido o+
."avado o valo" da p"op"iedade, m%!odos podem en!"a" em a/o. ssas aes s/o
de*inidas pelas palav"as .e! e se!.Na p"0!ica, pode3 se di6e" -+e +ma p"op"iedade %
compos!a de !":s elemen!os# +m campo 2local onde a"ma6ena3se o valo", !am'%m
c4amado de a!"i'+!o5, +m m%!odo de lei!+"a 2.e!5 e +mm%!odo de ."ava/o 2se!5. Ae)a o
e7emplo da nossa classe Cadas!"o "eesc"i!a den!"o dessas p"emissas#
class Cadas!"o2
V
protected string *CPF<
public string CPF
V
set
V
*CPF c val+e<
X
get
V
"e!+"n *CPF<
X
X
X
Como dissemos an!e"iomen!e, !emos !":s elemen!os. As va"i0veis *CPF e *Nome
s/o os campos 2*ields5 onde os valo"es s/o e*e!ivamen!e a"ma6enados. ='se"ve -+e se
!"a!a de va"i0veis do !ipo protected, o -+e si.ni*ica -+e s9 se"/o vis!as pelas classes
descenden!es 2lem'"e3se do concei!o de Pse"Q5 e n/o se"/o manip+ladas po" o+!"as
classes 2lem'"e3se do concei!o de P!e"Q5.= se! e o .e!, como voc: pode no!a", se"vem
pa"a "ec+pe"a" e ."ava" novos valo"es. A palav"a value % "ese"vada no C# pa"a "ece'e" o
valo" passado pa"a a p"op"iedade. Ae)a o e7emplo#
1ns!anciaCadas!"o2.CPF c W[2@W< GGDispa"a o Wse!W
7 c 1ns!anciaCadas!"o2.CPF< GGdispa"a o W.e!W
Tempo de vida dos ob;etos
A!% a.o"a, !emos *alado de c"ia" o')e!os, mas !am'%m % i.+almen!e impo"!an!e
sa'e" como e -+ando des!"+;3los. Aimos -+e pa"a c"ia" +ma nova ins!Mncia de +ma classe
'as!a +sa" a palav"a ne8#
7 c ne8 Classe7emplo2 5
= p"9p"io runtime de .NT vai se enca""e.a" de des!"+i" o o')e!o -+ando ele
n/o *o" mais necess0"io. A pe".+n!a %# como ele sa'e -+e +m o')e!o n/o % mais
necess0"ioJ &espos!a simples e incomple!a# o runtime li'e"a a mem9"ia alocada
pelo o')e!o -+ando n/o e7is!e mais nen4+ma "e*e":ncia li.ada ao o')e!o den!"o do
con!e7!o co""en!e.
Tratamento de e1ce<es
= !"adicional !e"mo !"a!amen!o de e""os % a.o"a c4amado de !"a!amen!o de
e7cees. ve"emos -+e *a6 mais sen!ido. m C#, o !"a!amen!o de e7cees % *ei!o
de manei"a m+i!o ele.an!e e simples.=C#ado!a +m es!ilo "ela!ivamen!e com+m em o+!"as
lin.+a.ens, -+e % o de !"a!a" e""os como o')e!os -+e encaps+lam !odas as in*o"maes
-+e necessi!amos pa"a "esolv:3lo. ssa id%ia % v0lida pa"a !odo o am'ien!e .NT e *oi
'a!i6ada como SS 2S!"+c!+"ed 7cep!ion Sandlin.5. A id%ia '0sica % mais o+ menos a
se.+in!e# !odo o')e!o -+e "ep"esen!a +ma e7ce/o % de"ivado de SEs!em.7cep!ion. ssa
classe poss+i os se.+in!es mem'"os#
ro*riedade "igni+icado
Gelp#in7 &e!o"na +ma D&? pa"a+ma"-+ivo de Selp desc"evendo o
e""o em de!al4es
?essage s!a p"op"iedade % somen!e lei!+"a e desc"eve o e""o
Source &e!o"na o nome do o')e!o o+ aplica/o -+e .e"o+ o e""o
Stac7Trace s!a p"op"iedade % somen!e lei!+"a e con!%m +ma s!"in.
-+e iden!i*ica a se-R:ncia de c4amadas -+e dispa"o+ o
e""o
.nner(ception Pode se" +sada pa"a p"ese"va" os de!al4es do e""o ao lon.o
de +ma s%"ie de e7cees
7cees podem se" dispa"adas pelos mais dive"sos elemen!os. Podem se"
dispa"adas a pa"!i" de e""os do sis!ema ope"acional, de e""os de disposi!ivos, de
inconsis!:ncias de dados. Tam'%m podemos c"ia" nossas p"9p"ias e7cees. Aamos
o'se"va" +m e7emplo de como dispa"a" +ma e7ce/o e como !"a!03la com a
nossa classe de Cadas!"amen!o e valida/o do CPF#
public class Cadas!"o
V
GGP"op"iedades
public string CPF<
public string NomeClien!e<
public Cadas!"o2 string *CPF, string *Nome 5
V
GG1niciali6a/o
CPF c *CPF<
NomeClien!e c *Nome<
i* 2 CPF.?en.!4 Tc [[ 5
V
GGTS&=W % a palav"a c4ave pa"a .e"a" a e7ce/o
thro$ ne$ 7cep!ion2 WCPF 1nv0lidoW 5<
X
X
X
Colocamos +ma valida/o no cons!"+!o", de *o"ma -+e se *o"em passados
menos de [[ ca"ac!e"es, o CPF % a+!oma!icamen!e conside"ado inco""e!o. Ao
ins!ancia" essa classe com +m pa"Mme!"o inv0lido, a classe i"0 dispa"a" a e7ce/o
e o "es+l!ado na !ela deve"0 se" +ma !ela simila" a es!a#
='se"ve -+e +m dos de!al4es impo"!an!es es!0 na sen!ena P+n4andled e7cep!ionQ.
T"ad+6indo# e7ce/o n/o3!"a!ada. A e7ce/o *oi dispa"ada pela palav"ac4ave
thro1 e % p"eciso -+e 4a)a +m 'loco de c9di.o p"epa"ado pa"a manip+la" a
classe de e""o "e!o"nada.=*o"ma!o de !"a!amen!o de +ma e7ce/o % o se.+in!e#
tr'
V
GGC9di.o s+)ei!o a e7cees
X
catch2 Tipo7cecao[ e 5
V
GGT"a!amen!o pa"a e7ce/o !ipo [
X
catch2 Tipo7cecao2 e 5
V
GGT"a!amen!o pa"a e7ce/o !ipo 2
X
catch
V
GGT"a!amen!o pa"a -+al-+e" !ipo de e7ce/o
X
!inall'
V
GGT"ec4o -+e deve semp"e se" e7ec+!ado, 4avendo o+ n/o e7ce/o
X
A es!"+!+"a tr&44catch "e-+e" -+e e7is!a pelo menos +m 'loco catch va6io.
=s 'locos de finall& e catch(e(ception) s/o opcionais. Nossa classe Cadas!"o deve"ia
se" ins!anciada da se.+in!e *o"ma#
tr'
V
Cadas!"o !es!e c ne$ Cadas!"o2 W[2@W, WDe =livei"a N+a!"oW 5<
X
catch
V
Messa.eBo7.S4o82 W1mposs;vel ins!ancia" o o')e!o Cadas!"oW 5<
X
Como voc: deve !e" o'se"vado no e7emplo, en!"e!an!o, n/o e7is!e +ma pis!a
cla"a de -+al *oi o mo!ivo -+e "ealmen!e *e6 a ins!ancia/o do o')e!o. Pa"a !e"mos +m
con!"ole mais e*e!ivo, pode";amos +sa" o ca!c4 com +ma e7ce/o c+s!omi6ada. Aamos
c"ia" +ma e7ce/o -+e se"0 +sada especi*icamen!e pa"a o caso de encon!"a" +m CPF
inv0lido e coloca" isso den!"o de +m con!e7!o com mais o+!"as possi'ilidades de e""o. =
es'oo do c9di.o *ica"ia des!a *o"ma#
GGC"ia/o das classes
public class eCPF1nvalido # 7cep!ionV X
public class Cadas!"o
V
GGCampos
public string CPF<
public string NomeClien!e<
public Cadas!"o2 string *CPF, string *Nome 5
V
GG1niciali6a/o
NomeClien!e c *Nome<
i! 2 CPF.?en.!4 Tc [[ 5
V
thro$ ne$ eCPF1nvalido2 5<
X
else
V
CPF c *CPF<
X
X
X
GGC9di.o -+e i"0 !es!a" o !"a!amen!o de e7cees
GG1nsi"a3o den!"o do even!o clicH de +m 'o!/o,
GGpo" e7emplo
tr'
V
int 7<
int 6 c 0<
Cadas!"o !es!e c ne$ Cadas!"o2 W[2@W, WDe =livei"a N+a!"oW 5<
7 c @ G6< GGTes!e pK" es!a lin4a an!es da an!e"io"
X
catch2 eCPF1nvalido ""o 5 GG7pe"imen!e inve"!e" a o"dem dos ca!c4es
V
Messa.eBo7.S4o82 WCPF 1nv0lidoW 5<
X
catch2 7cep!ion ""o 5
V
Messa.eBo7.S4o82 W1mposs;vel ins!ancia" o o')e!o Cadas!"o# W > ""o.Messa.e5<
X
!inall'
V
Messa.eBo7.S4o82 WSemp"e e7ec+!ado, 4a)a e""o o+ n/o.W 5<
X
='se"ve +ma s%"ie de de!al4es pe"!inen!es ao e7emplo an!e"io"#
= catc!( (ception rro) % o !"ec4o -+e cap!+"a !oda e -+al-+e" e7ce/o. le %
p"a!icamen!e i.+al a +m catch va6io con*o"me demons!"ado an!es, po" +ma "a6/o
m+i!o simples# (ception % pai de !odas as e7cees. N+al-+e" e7ce/o semp"e se
encai7a"0 em 7cep!ion po" ca+sa disso. A "a6/o pela -+al +samos (ception em
ve6 de +m catch va6io *oi a in!en/o de e7i'i" a mensa.em enviada pelo sis!ema
na oco"":ncia do e""o.
= 'loco /inall) % e7ec+!ado semp"e, 4a)a e""o o+ n/o. Nes!e caso, ele % e7ec+!ado
DP=1 S do 'loco ca!c4 -+e cap!+"a" a e7ce/o. Se voc: !em o cos!+me de p"o."ama" em
Delp4i, vai no!a" -+e essa o"dem % inve"!ida em C#.
N+al-+e" e""o oco""ido den!"o +m 'loco tr) desvia o *l+7o de e7ec+/o pa"a o
catch co""esponden!e e Ni= "e!o"na o *l+7o de e7ec+/o pa"a o pon!o -+e
o"i.ino+ o e""o o+ a lin4a se.+in!e. m o+!"as palav"as, n/o e7is!e nada
semel4an!e ao )esume, !/o pop+la" no AB, po" e7emplo.
A o"dem dos *a!o"es al!e"a 2e m+i!o5 os "es+l!ados. Se voc: !en!a", po" e7emplo,
as inve"ses s+.e"idas pelos comen!0"ios no e7emplo an!e"io", vai pe"ce'e" -+e,
no caso de al!e"a" a o"dem dos catches, voc: "ece'e"0 +m e""o do compilado"# P'
previous catch clause alread& catches all e(ceptions of this or a super t&pe
(HS&stem4(ceptionI)Q 2Dma cl0+s+la ca!c4 an!e"io" )0 cap!+"a !odas as e7cees
des!e !ipo o+ de +m !ipo s+pe"io" PSEs!em.7cep!ionQ5. No caso de inve"!e" as
lin4as de c9di.o, voc: vai *a6e" com -+e di*e"en!es catches se)am e7ec+!ados.
Apenas +mI e somen!e +m I 'loco catch % e7ec+!ado pa"a cada !"a!amen!o
de e7ce/o 2tr&5.
-/O.NET A +ara Iniciantes
Namespaces de -/O.NET
Assim como !+do o mais em .NT, e7is!em v0"ios namespaces pa"a a nova
implemen!a/o AD=. Ae)amos -+ais s/o#
N/o !em momen!o e7a!o pa"a comea", mas -+ando se inicia +m es!+do, % impo"!an!e
pa"!i" do p"incipio de -+e !em -+e '+sca" o '0sico e en!/o i" avanando a!% a evol+/o no
con4ecimen!o. 7is!em 4o)e m+i!as "evis!as, 8e'si!es, e a+!o"es de al!;ssima -+alidade
a-+i no B"asil. Mas semp"e pe"ce'o -+e *al!a ma!e"ial pa"a -+em es!0 comeando. C +ma
!end:ncia na!+"al semp"e s+".i"em novos a"!i.os !"a!ando de ass+n!os cada ve6 mais
avanados *icando o novo p('lico pe"dido, pois n/o encon!"a a"!i.os '0sicos. &ece'i
dive"sos e3mails me co'"ando +m a"!i.o como esse. n!/o "esolvi !oma" como me!a
di"eciona" v0"ios a"!i.os a esse p"op9si!o.
= "e-+isi!o pa"a es!e a"!i.o % -+e voc: con4ea o '0sico de 'anco de dados comeando
no MS ACCSS e pa"!indo pa"a o MS SN? Se"ve" 2000.7 o+ MSD. D!ili6a"emos a pa"!i"
des!e pon!o a si.la SGDB pa"a nos "e*e"imos ao se"vido" de 'anco de dados.
(ntroduo a )anco de Dados
= 'anco de dados semp"e *oi +m pon!o *o"!e na aplica/o. Sendo -+e +ma *al4a na
modela.em 2p"epa"a/o5 pode p"e)+dica" o desempen4o da p"9p"ia aplica/o. Po"!an!o %
*+ndamen!al se+ con4ecimen!o pa"a -+e possa p"epa"a" da mel4o" *o"ma poss;vel, !al
como dimensiona" a sol+/o a se" ado!ada. Den!"e as opes dispon;veis no me"cado
vamos "eve" as se.+in!es#
* +S %CC,SS 3 s!e % +m 9!imo 'anco de dados p"incipalmen!e pa"a -+em es!0
comeando pela *acilidade de +!ili6a/o, voc: "apidamen!e ap"ende como +!ili603lo. Se+
+so % "ecomendado apenas como dom%s!ico e % +ma 9!imo camin4o pa"a, depois -+e se
ap"ende", passa" a +!ili6a" o MS SN? Se"ve"
* +S S-. Server 3 s!e % +m se"vido" de 'anco de dados p"o*issional, e % a!+almen!e +m
dos mel4o"es do me"cado. Dm ."ande des!a-+e nesse p"od+!o % s+a *acilidade de
ope"a/o, "es+l!ando em +m 9!imo p"od+!o e +m c+s!o mais 'ai7o de man+!en/o, !al
como c+s!o de a-+isi/o se compa"ado a p"od+!os simila"es no me"cado. Pode se"
implemen!ado de *o"ma individ+al o+ em pa"alelo 2Cl+s!e"5 com s+po"!e a !ole"Mncia de
*al4as, desde % cla"o -+e poss+a 4a"d8a"e e so*!8a"e pa"a isso.
* +S +SD, 3 s!e % +ma ve"s/o ."a!+i!a e simila" ao SN? Se"ve" e !em com o')e!ivo voc:
desenvolve" s+a aplica/o e !es!a" sem a necessidade de !e" o SN? Se"ve". Pa"a evi!a" o
+so indevido essa ve"s/o con!a com "ec+"so -+e "es+l!a em pe"da de desempen4o no
caso de mais de ^ !"ansaes sim+l!Mneas !al como limi!a/o do !aman4o do a"-+ivo de
dados. + "ecomendo se+.
m !odo a"!i.o +!ili6a"emos o MS SN? Se"ve" , po" se" +m se"vido" de 'anco de dados,
ele a"ma6ena den!"o do mesmo v0"ios 'ancos de dados con*o"me a &igura /, *icando
cada aplica/o +!ili6ando +m o+ v0"ios desses 'ancos, 'as!ando % cla"o -+e !en4a di"ei!o
de acesso pa"a isso. Todos nossos e7emplos se"0 no Da!a'ase North$ind. Sendo es!e
+m 'anco de dados pad"/o -+e vem )+n!o com o SN? Se"ve" )0 p"a se" +!ili6ado pa"a
!es!es pois )0 poss+i dados.
Fi.+"a 0[ 3 s!"+!+"a do MS SN? Se"ve"
Den!"o de cada 'anco de dados !emos as Ta'elas 2Ta'les5 con*o"me &igura 0 e den!"o
das !a'elas !emos as col+nas 2Col+mn5 aonde de*inimos -+e !ipo de dados vamos
a"ma6ena" con*o"me &igura 1.
Fi.+"a 02 3 Demons!"ando as Ta'elas 2Ta'les5.
Fi.+"a 0@ 3 s!"+!+"a da !a'ela e col+nas 2Col+nm5.
Con*o"me o'se"vado na &igura 21, a Col+na P"od+c!1D vai a"ma6ena" dados do !ipo
1n!ei"o e n/o vai acei!a" n+lo o+ se)a, essa col+na % de p"eenc4imen!o o'"i.a!9"io.
A maio"ia dos se"vido"es de 'anco de dados poss+i s+po"!e a T"ansac!3SN? -+e % +m
p"o!ocolo pad"/o en!"e os SGDB pa"a manip+la/o dos dados. = MS SN? Se"ve" o*e"ece
o +!ili!0"io c4amado SN? N+e"E AnalE6e" -+e % +m console pa"a +!ili6a/o dos comandos
SN? con*o"me &igura 3, es!0 "eali6ando +ma cons+l!a po" meio do comando Select.
Fi.+"a 0_ 3 Cons+l!ando dados +sando N+e"E AnalE6e".
P"incipais comandos SN?#
3 Select 2Seleciona" "e.is!"os5
3 Delete 27cl+i" "e.is!"os5
3 4pdate 2A!+ali6a" "e.is!"os5
3 (nsert 21nse"i" "e.is!"os5
3b 5here 2D!ili6ando em con)+n!o com selec!, +pda!e, dele!e pa"a impK" +ma condi/o
pa"a p"ocessa" o comando5
,6emplos#
Select 7 !rom Products $here Product(D 8 / 2Seleciona !odos "e.is!"os da !a'ela
p"od+!os c+)a col+na P"od+c!1D !en4a valo" i.+al a [5
Delete Products $here Product(D 8 / 27cl+i !odos "e.is!"os da !a'ela p"od+!os c+)a
col+na P"od+c!1D !en4a valo" i.+al a [5
4pdate Products set ProductName 8 9Chair9 $here Product(D 8 / 2A!+ali6a !odos
"e.is!"os na !a'ela p"od+!os, col+na P"od+c!Name pa"a \C4ai"\ c+)a col+na P"od+c!1Dc[5
insert into Products
:ProductName; Supplier(D; Categor'(D; -uantit'Per4nit<
values
:9ele!one9;/;/;/< 21ncl+i +ma lin4a na !a'ela P"od+c!s5
Concl+;da essa in!"od+/o pes-+ise mais de!al4adamen!e so'"e o *+ncionamen!o do
'anco de dados e o+!"as *acilidades o*e"ecidas como "elacionamen!o en!"e !a'elas,
in!e."idade, cons!"ain!s, p"oced+"es, vie8s, !"i..e"s, 'acH+p e como .e"a" o dia."ama do
mesmo.
=ist>rico do acesso aos Dados.
?o.o no in;cio, pa"a se !e" acesso Fs in*o"maes do 'anco de dados e"a necess0"io !e"
vas!o con4ecimen!o das AP1 de com+nica/o, e o p"o."amado" aca'ava implemen!ando
se+ c9di.o e7cl+sivamen!e pa"a cada ve"s/o de d"ive" como a DB?1B 2SN? Se"ve"5,
dedicando com isso m+i!o !empo a es!e !ipo de implemen!a/o. Com o c"escimen!o do
me"cado e a pe"sis!:ncia desse p"o'lema *oi c"iado em [jj0 com apoio da Mic"oso*! e
+m cons9"cio de emp"esas, o pad"/o OD)C 2=pen Da!aBase Connec!ivE5. N+e % +ma
camada in!e"medi0"ia enca""e.ada de c+ida" da com+nica/o com a AP1 dei7ando pa"a o
p"o."amado" +ma in!e"*ace (nica e pad"/o pa"a !odo acesso ao SGDB con*i"a na &igura
3a.
Fi.+"a _a 3 Demons!"ando =DBC
A pa"!i" do s+cesso do =DCB e da e7pe"i:ncia )0 es!a'elecida e necessidade de evol+/o
*o"am s+".indo o+!"as p"opos!as como o D%O 2Da!a Access =')ec!s5 *ocado no MS
ACCSS, sendo s+'s!i!+;do lo.o depois pelo ?DO 2&emo!e Da!a =')ec!s5, +ma ve6 -+e
o DA= e"a "ealmen!e len!o em con)+n!o com o =DBC.
= ."ande avano da %poca de+3se em !o"no do =?DB -+e se assemel4o+ m+i!o com a
a"-+i!e!+"a do =DCB po"%m !"o+7e a implemen!a/o de in!e"*aces C=M e a es!"a!%.ia da
Mic"oso*! DDA 2Dnive"sal Da!a Access5 com o')e!ivo de a"ma6enamen!o dis!"i'+;do, como
desde planil4a a!% e3mails. Semel4an!e ao =DBC, o =?DB !am'%m *oi s+cesso sendo
ade"ido a!% po" 'anco de dados de pad"/o a'e"!o. Pa"a *acili!a" s+a +!ili6a/o *oi c"iado o
%DO 2Ac!ive7 Da!a =')ec!s5 com o')e!ivo de cons+mi" os "ec+"sos o*e"ecidos pelos
=?DB.
= -+e podemos concl+i" desse '"eve 4is!9"ico % -+e *o"am c"iadas v0"ias camadas de
acesso ao 'anco de dados, com o')e!ivo de simpli*ica" e pad"oni6a" s+a +!ili6a/o. 1sso
"ealmen!e *oi *+ndamen!al pa"a o desenvolvimen!o e evol+/o das aplicaes dei7ando o
pad"/o =?DB em con)+n!o com o AD= na lide"ana no acesso a dados devido a +m
mel4o" desempen4o no acesso a dados. Sendo +!ili6ando po" dive"sas sol+es *icando o
pad"/o =DBC pa"a as sol+es n/o compa!;veis com =DBC. Sendo assim vale "essal!a"
-+e mesmo +sando =?DB o+ =DBC a aplica/o vai !e" +ma pe"da de desempen4o pois
vai !e" +m camada in!e"medi0"ia en!"e s+a aplica/o e as AP1s de acesso a dados.
O @ue A %DO.N,B
$0 *a6 m+i!o !empo -+e a Mic"oso*! vem inves!indo em c"ia" +ma in!e"*ace ami.0vel de
acesso a dados pa"a as aplicaes de *o"ma a se o'!e" os mel4o"es "ec+"sos, c4amada
an!e"io"men!e de AD=, mecanismo esse -+e ainda % +!ili6ado po" dive"sas aplicaes
incl+sive de o+!"os *o"necedo"es ve" modelo na &igura 3b.
Fi.+"a _' 3 Modelo AD=
= %DO.N, % +ma comple!a "e*o"m+la/o desde mecanismo de acesso a dados, sendo
+ma nova .e"a/o dessa a"-+i!e!+"a comple!amen!e in!e."ado ao .NT F"ame8o"H
o*e"ecendo +m vas!o n(me"o de classes "es+l!ando n+ma *0cil e e*icien!e com+nica/o
com o SGDB pe"mi!indo !odas ope"aes necess0"ias.
Po" se" in!e."ado ao .NT !em o mesmo s+po"!e a ==P, Compila/o, ?in.+a.ens,
Ge"enciado, Cole!o" de li7o e principalmente acesso nativo ao banco de dados sem
intermedi"rios CO.,D)C ou COD)CC . Con*i"a na &igura 3c.
Fi.+"a _c 3 Modelo AD=.NT com acesso na!ivo
A.o"a o acesso !o"no+3se mais o!imi6ado e desconec!ado. Foi c"iado +m "eposi!9"io
'aseado em LM? pa"a -+e pe"mi!a +ma maio" in!e."a/o de dados en!"e os mais
dive"sos sis!emas de a"ma6enamen!os di*e"en!es.
Pa"a +ma mel4o" comp"eens/o vamos ima.ina" +m cen0"io em -+e a .eladei"a de s+a
casa % o AD=.NT e o s+pe"me"cado % o "eposi!9"io de dados SGDB con*o"me &igura D.
Po"!an!o -+ando voc: vai ao s+pe"me"cado e comp"a mel/o, ceno+"a e 'e!e""a'a, coloca
na s+a sacola e !"a6 p"a casa, es!0 nes!e momen!o a'"indo +ma cone7/o com 'anco,
e*e!+ando +ma cons+l!a +sando T"ansac!3SN? e "ec+pe"ando os dados. Dando se-R:ncia
ao nosso cen0"io voc: no"malmen!e pe.a"ia essas comp"as 2mel/o, ceno+"a e 'e!e""a'a5
e dis!"i'+;a pela .eladei"a em s+a casa. s!e se"ia apenas +m modelo es!a'elecido p"a
mel4o" o".ani6a", mas pa"a o AD=.NT % di*e"en!e. Aoc: no momen!o de a"ma6ena" n/o
i"ia conse.+i" coloca" mel/o e *"+!as na mesma locali6a/o, pois se"ia de !ipos di*e"en!es.
=+ se)a *"+!as % di*e"en!e de ve"d+"as, implicando assim -+e n/o s/o do mesmo !ipo.
Dando se-R:ncia sa'emos -+e nossa .eladei"a % AD=.NT po" isso )0 !emos na !ela a
-+an!idade de cada i!ens# F"+!asGAe"d+"as pa"a l4e o*e"ece" acesso com *acilidade a
!odos i!ens, sem !e" -+e a'"i" e sai" p"oc+"ando. Fa6endo isso es!a";amos e7empli*icando
o -+e se"ia o Da!aSe! -+e ve"emos pos!e"io"men!e.
Fi.+"a ^ 3 Compa"ando AD=.NT
Ao lon.o desse a"!i.o es!a"emos ap"esen!ando m+i!as novidades e a p"imei"a delas se"0
o acesso na!ivo a SGDB.
Con*o"me ap"esen!amos no 4is!9"io so'"e acesso a 'anco de dados, ao lon.o do !empo
!eve3se +ma necessidade de se c"ia" +ma camada pa"a pad"oni6a" o acesso, den!"e as
dive"sas !en!a!ivas p"evalece+ o =DBC e =?DB sendo incl+sive s+po"!ados pelo novo
AD=.NT, po"%m o mesmo a.o"a dispem de meios pa"a acessa" o SGBD de *o"ma
na!iva sem a necessidade de in!e"medi0"ios )0 ci!ados. &es+l!ando em +m acesso m+i!o
mais "0pido como se es!ivesse implemen!ando di"e!amen!e as AP1s na!ivas do SGDB. As
p"incipais classes es!/o o".ani6adas nos Namespaces 2spao de nomes, des!inado a
o".ani6a" classes5 a'ai7o#
3 S'stem.data.S@lClient 2SN? Se"ve" g.7 o+ s+pe"io"5 2Na!ivo5
3 S'stem.data.OracleClient 2="acle5 2Na!ivo5
3 S'stem.data.OleDb 2Access e !odos o+!"os 'anco de dados do mesmo pad"/o5
3 S'stem.data.OD)C 2Todos 'ancos do pad"/o5
Po"!an!o con*o"me &igura E a pa"!i" de a.o"a semp"e -+e *o" +!ili6a" SN? Se"ve" g.7 d:
p"e*e":ncia pa"a +!ili6a" as classes SN?Clien! e +sa" de !odos 'ene*;cios das classes
na!ivas.
Fi.+"a 6 3 Acesso na!ivo ao SGDB 2Al!o desempen4o5
Comp"eendida as di*e"enas en!"e acesso na!ivo e acesso +sando in!e"medi0"ios
pode"emos dividi" o acesso do %DO.N, em d+as pa"!es Conec!ado 2Data?eader5 e
Desconec!ado 2DataSet5. Aamos compa"a" as di*e"enas en!"e am'os na abela 2/#
Ta'ela 0[ 3 Compa"a!ivo Da!aSe! 7 Da!a&eade"
DataSet Data?eader
3 Desconec!ado
3 Conec!ado, P"ecisa se"
a'e"!oG*ec4ado
3 ?ei!+"a Gsc"i!a 3 ?ei!+"a
3 Baseado em cole/o, pe"!ime na.eva/o pa"a *"en!e
e pa"a !"0s
3 Apenas n+m sen!ido
sem "e!o"no 2Fo"8a"d
onlE5
3 Pe"mi!e *a6e" 'ind pa"a v0"ios con!"oles Lml 3 N/o +sa c+"so"
I Pe"mi!e se" se"iali6ado e +!ili6ado em 8e'se"vices. 3 Acesso "0pido
3 Pe"mi!e se" c"iado de *o"ma a+!om0!ica +sando vis+al
s!+dio .ne! Tools 2a""as!ando pelo Se"ve" 7plo"e"5 o+
p"o."am0!ica via c9di.o
3 Semel4an!e ao vel4o
"eco"dse!
3 Acesso mais len!o
3 Somen!e via *o"ma
p"o."am0!ica
3 1ncl+i va"ias !a'elas, "elacionamen!o, c4ave p"imei"a...
3 So *a6 'ind de +m
con!"ole
='se"va"emos +m de!al4amen!o nas abelas 20 e 21.
Ta'ela 02 3 De!al4amen!o Da!a&eade" 2Conec!ado5
Data?eader
:Conectado<
Connec!ion
Fo"necesse o acesso ao 'anco de dados, nessa classe -+e voc:
in*o"ma os dados de acesso ao 'anco de dados como +s+0"io e
sen4a. PConnS!"in.Q
Command
Nes!a classe voc: *o"nece a -+e"E s-l
2selec!,dele!e,inse"!,+pda!e, p"oced+"e5 pa"a p"ocessa" no 'anco
de dados
Da!a&eade" Fa6 a lei!+"a dos "e.is!"os no 'anco de dados.
Ta'ela 0@ 3 De!al4amen!o Da!aSe! Da!aSe! 2Desconec!ado5
DataSet
:Desconectado<
Connec!ion
Fo"necesse o acesso ao 'anco de dados, nessa classe -+e
voc: in*o"ma os dados de acesso ao 'anco de dados como
+s+0"io e sen4a. PConnS!"in.Q
Command
Nes!a classe voc: *o"nece a -+e"E s-l 2selec! , p"oced+"e5
pa"a p"ocessa" no 'anco dedados
Da!aAdap!e"
Fa6 a lei!+"a do 'anco de dados, e7!"ai !odos os dados de
aco"do com o command e p"eenc4e o Da!aSe!
Da!aSe!
&eposi!9"io de dados 'aseado em LM? -+e pode se"
!"anspo"!ado pelos 8e'se"vices.
T"a!a"emos com maio"es de!al4es so'"e Da!aSe! e so'"e Da!a&eade" nos p"97imos
!9picos, nes!e momen!o o'se"ve na &igura 2F, a "ep"esen!a/o das classes
ap"esen!adas na abelas 2/; 20 e 21.
Fi.+"a 0g 3 Modelo de acesso a dados 2Da!a&eade" e Da!aSe!5
A classe Connection % +!ili6ada em -+al-+e" !ipo de acesso ao SGBD sendo ele
conec!ado o+ n/o e a mesma "ece'e +m pa"Mme!"o m+i!o impo"!an!e de aco"do com o
!ipo de 'anco de dados -+e voc: vai +!ili6a". Tal como se voc: es!ivesse +!ili6ando
=?DB vai passa" +m pa"Mme!"o, se *o" =DBC vai passa" o+!"o. Ae)a al.+ns e7emplos na
abela 23.
Ta'ela 0_ 3 7emplos de s!"in. de cone7/o.
Connection ,6emplo
SN?Clien!
Da!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c
No"!48ind<
=leDB
2S-lSe"ve"5
P"ovide"cSN?=?DB.[<Da!a So+"ceclocal4os!<1ni!ial
Ca!alo.cNo"!48ind<Dse" 1Dcsa<Pass8o"dc<
=leD'
2Access5
P"ovide"cMic"oso*!.$e!.=?DB._.0<Da!a So+"cecC#]d']
no"!48ind.md'<Pe"sis! Sec+"i!E 1n*ocFalse<
?em'"e semp"e de ve"i*ica" se s+a s!"in. de cone7/o % a ade-+ada pa"a o se+ SGDB e
pa"a classe do AD=.NT -+e voc: es!0 +!ili6ando. Sendo -+e s+a p"e*e":ncia se"0
p"imei"o classes na!ivas 2SN?Clien!, ="acleClien!5 depois =leD' e po" (l!imo =DBC.
=+!"a ."ande novidade % a mel4o"ia no s+po"!e a !"ansaes d+"an!e o p"ocesso de
com+nica/o com o SGDB. T"ansaes % a capacidade de "e!o"na" as al!e"aes *ei!as
caso !en4a al.+m p"o'lema. 1sso % m+i!o com+m de se implemen!a" den!"o do 'anco de
dados, a.o"a *ico+ m+i!o *0cil de se implemen!a" !am'%m no c9di.o, incl+sive com
s+po"!e a Save Poin!, o+ se)a, "e!o"na a +m de!e"minado pon!o caso !en4a al.+ma *al4a
p"ocessando o T"ansac!3SN?.
Data)ind
s!e a.o"a % +m !e"mo m+i!o +!ili6ado no .NT pois % a capacidade do con!"ole de
a+!oma!icamen!e le" +m Da!a&eade" o+ Da!aSe! e e7i'i" os dados na !ela, se)a +m
?is!Bo7, Da!aG"id, D"opDo8n...
D!ili6ando des!e "ec+"so o p"o."amado" n/o p"ecisa mais *a6e" loop no "e!o"no do 'anco
de dados pa"a pop+la" es!es con!"oles. A (nica a!en/o -+e voc: p"ecisa !e" % -+e +m
Da!a&eade" s9 pode se" lido +ma ve6. Po" isso ele somen!e ca""e.a +m con!"ole. $0 o
Da!aSe! po" se" desconec!ado pode se" lido -+an!as ve6es *o" necess0"ias e pode
ca""e.a" mais de +m con!"ole.
As p"incipais p"op"iedades encon!"adas nos con!"oles pa"a +sa" o "ec+"so Da!aBind s/o#
3 DataSource 2De*ine *on!e de dados5
3 Data)ind 2Aciona a lei!+"a da *on!e de dados5
3 Datavalue&ield 2De*ine valo" pa"a ?is!Bo7, D"opdo8n5
3 Datate6t&ield 2De*ine !e7!o pa"a ?is!Bo7, D"opdo8n -+e se"0 ap"esen!ado na !ela5
As p"op"iedades Da!aAal+eField e Da!aTe7!Field devem se" p"eenc4idas com o nome da
col+na do 'anco de dados.
4tiliGando o Data?eader
C a *o"ma de acesso mais "0pido F 'ase de dados e !em +m cons+mo m+i!o 'ai7o de
mem9"ia, pois dispe de menos "ec+"sos em cima dos dados "e!o"nados, +ma ve6 -+e s9
vai n+ma di"e/o, sem "e!o"no. Po"%m como )0 vimos s9 conse.+e +!ili6a" o Da!a&eade"
pa"a ca""e.a" apenas +m con!"ole.
Pa"a cada classe de acesso voc: +sa !am'%m +m Da!a&eade" espec;*ico. Po" e7emplo,
pa"a classe SN?Clien!, +sa3se o S-lDa!a&eade" e pa"a =leD' +sa3se =leD'Da!a&eade"
e assim po" dian!e pois cada classe !em implemen!aes especi*icas.
= Da!a&eade" se assemel4a m+i!o ao AD= voc: p"ecisa e7plici!amen!e a'"i" e *ec4a" a
cone7/o 2Connec!ion5 com o SGDB. Con*o"me &igura 2F p"a +!ili6a" essa classe voc: vai
p"ecisa" dos se.+in!es passos.
1. Connection 3 A'"e e *ec4a cone7/o, necessi!a de +ma s!"in. de acesso con*o"me
abela 23.
,. Command 3 Aai po"cessa" se+ comando T"ansac!ion3SN? no SGDB.
-. Data?eader 3 Fa6 a lei!+"a do "e!o"no
A!% es!e pon!o voc: deve es!a" ac4ando m+i!o *0cil acessa" o 'anco de dados e
"ealmen!e % m+i!o simples mesmo, n/o !em po" -+e se" complicado. =+!"a -+es!/o
impo"!an!e % -+e o Da!a&eade" somen!e l: o "e!o"no do 'anco de dados 2&ead =nlE5.
Mas dependendendo do comando SN? -+e voc: es!e)a +!ili6ando voc: conse.+i"0
e7cl+i", al!e"a", inse"i". = !e"mo somen!e lei!+"a % ap9s o p"ocessamen!o do SN? no
SGDB, o+ se)a depois -+e o Command )0 p"ocesso+ e o Da!a&eade" es!0 "ece'endo a
"espos!a.
Como o Da!a&eade" do AD=.NT % m+i!o pa"ecido com o AD= -+e +!ili60vamos
an!i.amen!e vamos o'se"va" o c9di.o a'ai7o e depois c"ia"emos +m e7emplo simila".
ak
\A"-+ivo# Tes!e.asp
se! conn c se"ve".c"ea!eo')ec!2Wadod'.connec!ionW5
Conn.=pen WP"ovide"cSN?=?DB.[<Da!a So+"ceclocal4os!<1ni!ial
Ca!alo.cNo"!48ind<Dse" 1Dcsa<Pass8o"dc<W
s-lcWselec! ` *"om P"od+c!sW
se! "scConn.7ec+!e2SN?5
do 84ile no! "s.eo*
"esponse.8"i!e cs!"2"s.*ields2WP"od+c!1DW55>WaB&bW
"esponse.8"i!e cs!"2"s.*ields2WP"od+c!NameW55>Wa4"bW
"s.movene7!
loop
Conn.Close
"s.Close
se! "scno!4in.
se! conncno!4in.
kb
sse c9di.o % de +ma p0.ina !es!e.asp -+e es!0 acessando SGDB SN? Se"ve" +!ili6ando
=leDB, vamos a.o"a c"ia" +m c9di.o simila" +!ili6ando AD=.NT e como vamos +sa" SN?
Se"ve" )0 vamos mon!a" o e7emplo +sando a classe SN?Clien!. Pa"a comea" adicione
+ma nova p0.ina ao se+ p"o)e!o, no sol+!ion e7plo"e" 'o!/o di"ei!obAdd We' Fo"m e
colo-+e o nome !es!e.asp7, *ei!o isso e )0 !endo a p0.ina ca""e.ada e*e!+e dois cli-+es na
mesma pa"a i" pa"a pa"!e do c9di.o e modi*i-+e con*o"me con!e(do da .istagem 2/.
?is!a.em 0[3 C9di.o pa"a +!ili6a" S-lDa!a&eade"
1mpo"!s SEs!em.Da!a
1mpo"!s SEs!em.Da!a.S-lClien!
\1mpo"!s SEs!em.Da!a.=leD'
P+'lic Class !es!e
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad e
2BEAal sende" As SEs!em.=')ec!, e
BEAal e As SEs!em.ven!A".s5 Sandles MEBase.?oad
Dim conn As Ne8 S-lConnec!ion \C"iando o')e!o Connec!ion
Dim cmd As Ne8 S-lCommand \C"iando o')e!o Command
Dim d" As S-lDa!a&eade" \C"iando o')e!o Da!a&eade"
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c WSelec! ` *"om P"od+c!sW
cmd.CommandTEpe c CommandTEpe.Te7!
conn.=pen25 \A'"indo Cone7/o
d" c cmd.7ec+!e&eade"
Do W4ile d".&ead
&esponse.W"i!e2Conve"!.ToS!"in.2d"2WP"od+c!1DW55 > WaB&bW5
&esponse.W"i!e2Conve"!.ToS!"in.2d"2WP"od+c!NameW55 > WaS&bW5
?oop
conn.Close25 \Fec4ando Cone7/o
d".Close25
conn.Dispose25
nd S+'
nd Class

='se"vando o c9di.o da .istagem / locali6e o comando 1mpo"!s SEs!em.Da!a e 1mpo"!s
SEs!em.Da!a.S-lClien!, es!e comando es!0 ca""e.ando as classes de acesso a dados,
caso voc: *osse +!ili6a" =leDB deve"ia +!ili6a" o "e*e"ido NameSpace con*o"me
comen!ado no c9di.o. *e!+e o B+ild e !es!e, !e"0 o mesmo "es+l!ado da p0.ina *ei!a em
asp, po"%m +ma p0.ina mais "0pida, pois es!0 +!ili6ando c9di.o compilado e de acesso
na!ivo via S-lClien!.
Di.amos -+e voc: -+e"ia *a6e" +ma "o!ina pa"a e7cl+i" +m "e.is!"o o+ ."+po de "e.is!"o
no 'anco de dados, con*o"me )0 *alamos nesse a"!i.o, 'as!a voc: modi*ica" a cons+l!a
SN? colocando +m comando Dele!e ve)amos +m e7emplo na ?is!a.em 2. Pa"a !es!a"
esse c9di.o adicione +ma nova p0.ina e colo-+e +m 'o!/o 21Dc'!n7cl+i"5 depois cli-+e
d+as ve6es no mesmo e adicione o c9di.o.
?is!a.em 2 3 7cl+indo &e.is!"os
1mpo"!s SEs!em.Da!a
1mpo"!s SEs!em.Da!a.S-lClien!
\1mpo"!s SEs!em.Da!a.=leD'
P+'lic Class !emp
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad e
2BEAal sende" As SEs!em.=')ec!, e
BEAal e As SEs!em.ven!A".s5 Sandles MEBase.?oad
nd S+'
P"iva!e S+' '!n7cl+i"eClicH2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles '!n7cl+i".ClicH
Dim conn As Ne8 S-lConnec!ion
Dim cmd As Ne8 S-lCommand
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c WDele!e Y="de" De!ailsZ 84e"e ="de"1Dc[02_hW
cmd.CommandTEpe c CommandTEpe.Te7!
conn.=pen25
Dim in!&e!o"no As 1n!@2
in!&e!o"no c Conve"!.To1n!@22cmd.7ec+!eNonN+e"E5
1* in!&e!o"no b 0 T4en
&esponse.W"i!e2W&e.is!"o2s5 7cl+ido2s5#W > in!&e!o"no.ToS!"in.5
else
&esponse.8"i!e 2W&es.is!"o n/o e7cl+idoW5
nd 1*
conn.Close25
conn.Dispose25
nd S+'
nd Class

='se"vando o c9di.o da .istagem 0 voc: deve es!0 sen!indo *al!a do Da!a&eade", como
es!amos acessando o 'anco de dados pa"a p"ocessa" +ma cons+l!a SN? -+e n/o "e!o"na
nada o mesmo n/o % necess0"io nesse caso. = p"9p"io Command )0 "e!o"na +m valo"
in!ei"o indicando -+an!as lin4as *o"am a*e!adas pelo comando. &epi!a o mesmo p"ocesso
da .istagem 0 pa"a os o+!"os T"ansacion3SN? 21nse"! e Dpda!e5 e !e"0 o "es+l!ado
espe"ado. A.o"a *i-+e a!en!o F modela.em do 'anco, pois o mesmo vai impo" e o'"i.a"
-+e !en4a in!e."idade nos campos, voc: n/o vai e7cl+i" +m "e.is!"o em +ma !a'ela se ele
es!0 "elacionado com o+!"o em o+!"a. =+ se)a, p"imei"o voc: deve "espei!a" as "e."as do
SGDB.
A.o"a vamos *a6e" +m e7emplo do Da!aBind -+e como )0 *alamos % a capacidade do
con!"ole de le" a+!oma!icamen!e o "e!o"no do 'anco de dados. Pa"a isso insi"a +ma nova
p0.ina c4amada de DataGrideste.asp6, depois a""as!e +m componen!e do !ipo
Da!aG"id 21Dcd.Cons+l!a5 pa"a a p0.ina con*o"me &igura 2H e cli-+e no mesmo com
'o!/o di"ei!o depois escol4a A+!oFo"na! pa"a de*ini" +m laEo+! den!"e os pad"es )0
o*e"ecidos e adicione o c9di.o da .istagem 1.
Fi.+"a 0h 3 1nse"ido Da!aG"id e *o"ma!ando ?aEo+!
?is!a.em @ 3 Fa6endo Da!aBind no Da!aG"id
1mpo"!s SEs!em.Da!a.S-lClien!
1mpo"!s SEs!em.Da!a
P+'lic Class Da!aG"idTes!e
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
1* No! Pa.e.1sPos!BacH T4en
ca""e.aDG25
nd 1*
nd S+'
S+' ca""e.aDG25
Dim conn As Ne8 S-lConnec!ion
Dim cmd As Ne8 S-lCommand
Dim d" As S-lDa!a&eade"
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c WSelec! ` *"om P"od+c!sW
cmd.CommandTEpe c CommandTEpe.Te7!
conn.=pen25
d" c cmd.7ec+!e&eade"
Me.d.Cons+l!a.Da!aSo+"ce c d"
Me.d.Cons+l!a.Da!aBind25
conn.Close25
d".Close25
conn.Dispose25
nd S+'
nd Class
='se"vando o c9di.o da .istagem 1 voc: ve"0 apenas +ma pe-+ena novidade
2Me.d.Cons+l!a.Da!aSo+"ce c d" , Me.d.Cons+l!a.Da!aBind255 nes!as d+as lin4as
es!amos in*o"mando pa"a o Da!aG"id -+e ele p"ecisa le" esse Da!a&eade" e "eali6a" o
Da!aBind 2P"eenc4imen!o a+!om0!ico dos dados5. *e!+e o '+ild do c9di.o e ve"i*i-+e o
"es+l!ado con*o"me &igura 2I.
Fi.+"a 0j 3 Da!aG"id ca""e.ado pelo Da!aBind
A!% o momen!o, !odos e7emplos de acesso a dados ap"esen!ados s/o conec!ados ao
'anco de dados. Falando ainda da classe Command )0 +!ili6amos dois m%!odos
27ec+!e&eade", 7ec+!eno-+e"E5 vamos ve" +m o+!"o e7emplo com o m%!odo
7ec+!escala", esse m%!odo % a *o"ma de acesso mais "0pido ao 'anco de dados, pois
independen!e do "e!o"no ocasionado pela cons+l!a SN? ele somen!e vai le" +ma lin4a,
+ma col+na . C "ecomendado pa"a "e!o"no de S!o"ed P"oced+"es o+ o Co+n!2`5 do Selec!.
Con*i"a +m e7emplo na .istagem 3.
?is!a.em _ 3 D!ili6ando m%!odo 7ec+!eScala" da classe Command
1mpo"!s SEs!em.Da!a.S-lClien!
1mpo"!s SEs!em.Da!a
P+'lic Class Da!aG"idTes!e
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' B+!!on[eClicH2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles B+!!on[.ClicH
Dim conn As Ne8 S-lConnec!ion
Dim cmd As Ne8 S-lCommand
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c WSelec! co+n!2`5 To!al *"om P"od+c!sW
cmd.CommandTEpe c CommandTEpe.Te7!
conn.=pen25
Dim in!&e!o"no As 1n!@2
in!&e!o"no c Conve"!.To1n!@22cmd.7ec+!eScala"5
&esponse.W"i!e2WTo!al p"od+!os#W > in!&e!o"no.ToS!"in.5
conn.Close25
conn.Dispose25
nd S+'
nd Class
= c9di.o da .istagem 3 es!0 +!ili6ando o m%!odo 7c+!eScala" pa"a le" o "e!o"no do
co+n!2`5 in*o"mado pela cons+l!a SN?.
Pa"a !o"na" se+ c9di.o mais cla"o voc: pode +!ili6a" pa"Mme!"os em con)+n!o com as
cons+l!as SN?, essa *acilidade % pe"mi!ida po" meio da class S-lPa"ame!e" o+
=leD'Pa"ame!e" ve)a o e7emplo na .istagem D. Nes!a lis!a.em vamos modi*ica" a
cons+l!a s-l 2Selec! ` *"om P"od+c!s 84e"e P"od+c!1D c [5 pa"a acei!a" pa"Mme!"os. Como
o e7emplo % simila" a -+al-+e" o+!"o es!a"ei apenas demons!"ando no c9di.o.
?is!a.em 0^ 3 D!ili6ando pa"Mme!"os em con)+n!o com cons+l!a SN?
1mpo"!s SEs!em.Da!a.S-lClien!
1mpo"!s SEs!em.Da!a
P+'lic Class Da!aG"idTes!e
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
1* No! Pa.e.1sPos!BacH T4en
ca""e.aDG25
nd 1*
nd S+'
S+' ca""e.aDG25
Dim conn As Ne8 S-lConnec!ion
Dim cmd As Ne8 S-lCommand
Dim d" As S-lDa!a&eade"
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
\cmd.CommandTe7! c WSelec! ` *"om P"od+c!s 84e"e P"od+c!1Dc[W
cmd.CommandTe7! c WSelec! ` *"om P"od+c!s 84e"e P"od+c!1Dcl1DW
cmd.CommandTEpe c CommandTEpe.Te7!
cmd.Pa"ame!e"s.Clea"25
cmd.Pa"ame!e"s.Add2Ne8 S-lPa"ame!e"2Wl1DW, S-lD'TEpe.1n!55.Aal+e c [
conn.=pen25
d" c cmd.7ec+!e&eade"
Me.d.Cons+l!a.Da!aSo+"ce c d"
Me.d.Cons+l!a.Da!aBind25
conn.Close25
d".Close25
conn.Dispose25
nd S+'
nd Class
='se"vando o c9di.o da .istagem D ve)a -+e o c9di.o do p"od+!o -+e es!ava sendo
in*o"mado na cons+l!a passo+ a se" in*o"mado e7!e"namen!e. m cons+l!a SN? essa
modi*ica/o n/o % "e-+e"ida, po"%m pa"a S!o"ed P"oced+"es 2P"ocedimen!os
a"ma6enados5 % *+ndamen!al, dai +ma c4ance de i" !"einando.
Nosso p"97imo o')e!ivo se"0 e7ec+!a" +ma S!o"ed P"oced+"e 2p"ocedimen!o
a"ma6enado5. C +m T"ansac!3SN? -+e )0 *ica salvo no se"vido" de 'anco de dados, com
isso o 'anco conse.+e se p"epa"a" p"a e7ec+!a" mais "apidamen!e esse c9di.o, po" isso
% m+i!o "ecomendado a c"ia/o desses p"ocedimen!os den!"o do SGDB. = SN? Se"ve" )0
vem com +m p"ocedimen!o pad"/o c4amado de spe84o2 -+e "e!o"na !odos +s+0"ios
conec!ados no SGDB % m+i!o impo"!an!e pa"a .e"encia" -+e aplica/o es!0 +!ili6ando
SGDB no momen!o. ssa p"oced+"e n/o "e-+e" pa"Mme!"os. Ae)a o e7emplo na
.istagem E -+e es!0 ca""e.ando +m Da!aG"id com "e!o"no da p"oced+"e.
?is!a.em 06 3 D!ili6ando S!o"e P"oce+"e spe84o2
1mpo"!s SEs!em.Da!a.S-lClien!
1mpo"!s SEs!em.Da!a
P+'lic Class Da!aG"idTes!e
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
1* No! Pa.e.1sPos!BacH T4en
ca""e.aDG25
nd 1*
nd S+'
S+' ca""e.aDG25
Dim conn As Ne8 S-lConnec!ion
Dim cmd As Ne8 S-lCommand
Dim d" As S-lDa!a&eade"
conn.Connec!ionS!"in. c WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<
1ni!ial Ca!alo.cNo"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c Wspe84o2W
cmd.CommandTEpe c CommandTEpe.S!o"edP"oced+"e
conn.=pen25
d" c cmd.7ec+!e&eade"
Me.d.Cons+l!a.Da!aSo+"ce c d"
Me.d.Cons+l!a.Da!aBind25
conn.Close25
d".Close25
conn.Dispose25
nd S+'
nd Class
Como nes!e momen!o voc: )0 con4ece m+i!o 'em o c9di.o da .istagem E, a (nica
di*e"ena -+e vai encon!"a" % nas lin4as 2cmd.CommandTe7! c Wspe84o2W e
cmd.CommandTEpe c CommandTEpe.S!o"edP"oced+"e5 -+e in*o"ma a S!o"eP"oced+"e
spe84o2, con*i"a o "e!o"no da mesma na Fi.+"a [0.
Fi.+"a [0 3 &e!o"no da S!o"ed P"oced+"e spe84o2
Como voc: *ico+ c+"ioso pa"a ve" como se +!ili6a +ma S!o"ed P"oced+"e com pa"Mme!"os
vamos ao c9di.o da .istagem 2F. Nesse c9di.o vamos +!ili6a" a S!o"ed P"oce+"e
SalesBECa!e.o"E p"esen!e no Da!aBase No"!4Wind, po"!an!o n/o p"ecisamos nos
p"eoc+pa" com s+a c"ia/o a!% po"-+e n/o % o p"op9si!o desse a"!i.o. ssa p"oced+"e
"ece'e dois pa"Mme!"os de en!"ada pa"a voc: sa'e" -+e pa"Mme!"os a p"oced+"e
necessi!a +!ili6e o comando spe4elp nomeedaep"oced+"e pelo +!ili!0"io N+e"E AnalE6e"
con*o"me &igura //.
Fi.+"a [[ 3 ='!endo in*o"maes da p"oced+"e SalesBECa!e.o"E
?is!a.em 0g 3 D!ili6ando S!o"ed P"oced+"e SalesBECa!e.o"E com pa"Mme!"o.
1mpo"!s SEs!em.Da!a.S-lClien!
1mpo"!s SEs!em.Da!a
P+'lic Class Da!aG"idTes!e
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
1* No! Pa.e.1sPos!BacH T4en
ca""e.aDG25
nd 1*
nd S+'
S+' ca""e.aDG25
Dim conn As Ne8 S-lConnec!ion
Dim cmd As Ne8 S-lCommand
Dim d" As S-lDa!a&eade"
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c WSalesBECa!e.o"EW
cmd.CommandTEpe c CommandTEpe.S!o"edP"oced+"e
cmd.Pa"ame!e"s.Clea"25
cmd.Pa"ame!e"s.Add2Ne8 S-lPa"ame!e"2WlCa!e.o"ENameW,
S-lD'TEpe.Aa"C4a"55.Aal+e c WBeve"a.esW
cmd.Pa"ame!e"s.Add2Ne8 S-lPa"ame!e"2Wl="dmea"W, S-lD'TEpe.Aa"C4a"55.Aal+e
c W200W
conn.=pen25
d" c cmd.7ec+!e&eade"
Me.d.Cons+l!a.Da!aSo+"ce c d"
Me.d.Cons+l!a.Da!aBind25
conn.Close25
d".Close25
conn.Dispose25
nd S+'
nd Class
Como voc: aca'o+ de ve" na .istagem F o c9di.o % pa"ecido com o *ei!o na .istagem D
pode se" con*e"ido na &igura /0.
Fi.+"a [2 3 &e!o"no da S!o"deP"oced+"e 2SalesBECa!e.o"E5
Con*o"me vis!o d+"an!e !odos os e7emplos de Da!a&eade" s+a implemen!a/o % m+i!o
simples, 'as!a mesmo se.+i" os passos apon!ados nesse a"!i.o e +s+*"+i" de !odas as
van!a.ens do AD=.NT -+e )0 !"a6 den!"o de d+as classes !oda com+nica/o das AP1s
de cada SGDB. Dei7ando pa"a o p"o."amado", simples comandos com 9!imos "es+l!ados.
4tiliGando o DataSet
= Da!aSe! % +ma das ."andes novidades o*e"ecidas pelo novo AD=.NT. le % +ma
es!"+!+"a de dados !o!almen!e desconec!ada do 'anco de dados, 'asea3se em 7ml e
a"ma6enada na mem9"ia !odos os dados "ece'idos da 'ase de dados. Ga"an!indo com
isso !oda +ma manip+la/o *o"a do 'anco de dados pa"a depois devolve" os dados
modi*icados. = Da!aSe! se assemel4a m+i!o com +m 'anco de dados pois ele a"ma6ena
as in*o"maes em +ma es!"+!+"a semel4an!e, sendo -+e den!"o voc: pode c"ia" va"ias
!a'elas, e den!"o das !a'elas voc: incl+i as col+nas e os dados. Ainda den!"o do mesmo
voc: pode c"ia" "elacionamen!os en!"e as !a'elas, +!ili6a" !a'elas de o"i.em de dados
di*e"en!es, percorrer @ual@uer um dos registros a @ual@uer momento e incl+sive
!"anspo"!a" essa es!"+!+"a de +m pon!o pa"a o+!"o +!ili6ando 8e' se"vices 2Componen!es
8e' 'aseados em 7ml e soap5. Ae"i*i-+e +m modelo simpli*icado na &igura /1 e &igura
/3.
Fi.+"a [@ 3 Ais/o simpli*icada Da!a Se!
Fi.+"a [_ 3 Ais/o simpli*icada do Da!a Se!
Pa"a +!ili6a"! o Da!a Se! vamos p"ecisa" se.+i" os passos -+e *i6emos pa"a o Da!a&eade"
com al.+mas modi*icaes con*o"me os !9picos a'ai7o#
1. Connection 3 A'"e e *ec4a cone7/o, necessi!a de +ma s!"in. de acesso con*o"me
Ta'ela 0_.
,. Command 3 Aai p"ocessa" se+ comando T"ansac!ion3SN? no SGDB.
-. Data%dapter 3 ='!%m dados do SGDB e p"eenc4e o Da!aSe!
.. DataSet 3 s!"+!+"a de dados 7ml, se"0 p"eenc4ida pelo Da!aAdap!e"
Como voc: )0 +!ili6o+ o Da!a&eade" o Da!aSe! !am'%m % de simples +!ili6a/o, vamos
*a6e" o mesmo e7emplo +!ili6ando +ma p0.ina *ei!a em asp e conve"!endo pa"a asp.ne!
+!ili6ando AD=.NT e Da!aSe!.
ak
\A"-+ivo# Tes!e.asp
se! conn c se"ve".c"ea!eo')ec!2Wadod'.connec!ionW5
Conn.=pen WP"ovide"cSN?=?DB.[<Da!a So+"ceclocal4os!<1ni!ial
Ca!alo.cNo"!48ind<Dse" 1Dcsa<Pass8o"dc<W
s-lcWselec! ` *"om P"od+c!sW
se! "scConn.7ec+!e2SN?5
do 84ile no! "s.eo*
"esponse.8"i!e cs!"2"s.*ields2WP"od+c!1DW55>WaB&bW
"esponse.8"i!e cs!"2"s.*ields2WP"od+c!NameW55>Wa4"bW
"s.movene7!
loop
Conn.Close
"s.Close
se! "scno!4in.
se! conncno!4in.
%>
A.o"a adicione +ma nova p0.ina 8e'*o"m ao se+ p"o)e!o com o nome de
!es!eda!ase!.asp7, depois e*e!+e dois cli-+es e adicione o c9di.o da .istagem H.
?is!a.em h 3 C9di.o pa"a !es!eda!ase!.asp7
1mpo"!s SEs!em.Da!a
\1mpo"!s SEs!em.Da!a.S-lClien!
\1mpo"!s SEs!em.Da!a.=leD'
P+'lic Class !es!eda!ase!
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 Sandles MEBase.?oad
Dim conn As Ne8 S-lConnec!ion \C"iando o')e!o Connec!ion
Dim cmd As Ne8 S-lCommand \C"iando o')e!o Command
Dim da As Ne8 S-lDa!aAdap!e" \C"ianda Da!aAdape!e"
Dim ds As Ne8 Da!aSe! \C"iando o')e!o Da!aSe!
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c WSelec! ` *"om P"od+c!sW
cmd.CommandTEpe c CommandTEpe.Te7!
da.Selec!Command c cmd
da.Fill2ds, WP"od+!osW5 \P"eenc4endo Da!aSe!

\Desconec!ado do 'anco de dados
conn.Dispose25
da.Dispose25
\?endo Da!aSe!
\Nes!e pon!o n/o es!amos mais conec!ados ao 'anco de dados
Dim in!1 As 1n!@2
Fo" in!1 c 0 To ds.Ta'les205.&o8s.Co+n! 3 [
&esponse.W"i!e2Conve"!.ToS!"in.2ds.Ta'les205.&o8s2in!152055 > WaB&bW5
&esponse.W"i!e2Conve"!.ToS!"in.2ds.Ta'les205.&o8s2in!152[55 > WaS&bW5
Ne7!
nd S+'
nd Class
='se"vando o c9di.o acima vamos encon!"a" m+i!a semel4ana com o p"imei"o e7emplo
de Da!a&eade" ap"esen!ado na .istagem 2/, a p"incipal di*e"ena -+e voc: vai encon!"a"
% -+e n/o es!amos c4amando o m%!odo Conn.=pen pois isso es!0 sendo *ei!o pelo
Da!aAdap!e" -+e se enca""e.a de acessa" os dados e p"eenc4e" o Da!aSe! pa"a -+e
possa se" !"a'al4ando de *o"ma desconec!ada. Po"%m se voc: e7plici!amen!e +!ili6a" o
Conn.=pen !e"0 -+e e*e!+a" o Conn.Close. ?o.o em se.+ida no *inal no loop -+e es!amos
"eali6ando colocamos pa"a va""e" a!% a +l!ima lin4a do Da!aSe!, de *o"ma -+e o'!emos
essa -+an!idade pelo &o8n.Co+n!. Nes!e e7emplo es!amos *a6endo "e*e":ncias a !odos
i!ens do Da!aSe! +!ili6ando W1ndicesW no l+.a" de coloca" o nome das col+nas e !a'elas.
Con*o"me )0 a*i"mamos an!e"io"men!e % poss;vel c"ia" +m Da!aSe! +!ili6ando a 1D do
Ais+al S!+dio pa"a -+e de *o"ma vis+al possamos es!a'elece" o acesso ao SGDB. Pa"a
mon!a"mos esse e7emplo si.a os passos a'ai7o#
[. Adicione +m novo 8e'*o"m c4amado de !es!eide.asp7
2. Acione o Se"ve" 7plo"e" con*o"me Fi.+"a [^. D!ili6ando o men+ vie8bse"ve"
e7plo"e" o+ CT&?>A?T>S
&igura /D * Server ,6plorer
= Se"ve" 7plo"e" % +m novo +!ili!0"io o*e"ecido pela 1D do Ais+al S!+dio -+e pe"mi!e a
.e":ncia do 'anco de dados, ele *+nciona p"a!icamen!e com !odos os 'anco de dados
compa!;veis com =?DB. C +ma *e""amen!a m+i!o (!il, pois no p"9p"io Ais+al S!+dio voc:
!em "ec+"sos o*e"ecidos pelo n!e"p"ise Manan.e" 2&igura 05 do SN? Se"ve". Aoc: pode
c"ia" !a'elas, col+nas, modi*ica" e e7i'i" dados con*o"me &igura /E.
Ap9s esse '"eve "es+mo so'"e o Se"ve" 7plo"e", cli-+e na !a'ela p"od+c!s e a""as!e
di"e!amen!e pa"a o *o"m+l0"io, a+!oma!icamen!e se"0 c"iado +m S-lConnec!ion e +m
S-lDa!aAdap!e" con*o"me &igura /F.
&igura /F * S@lConnection e S@lData%dapter criados pelo (D,
= p"97imo passo a.o"a % c"ia" o Da!aSe!, pa"a isso 'as!a c"ia" no 'o!/o di"ei!o do
S-lDa!aAdap!e" e escol4e" a op/o WGene"a!e Da!aSe!W con*o"me &igura /H e &igura /I.
&igura /H * Criando DataSet pelo (D,
&igura /I * Criando DataSet pelo (D,
Concl+;do esse passo voc: )0 c"io+ o Da!aSe! e ele )0 deve es!0 apa"ecendo na 1D do
Ais+al S!+dio. A ."ande novidade do .NT % -+e !odo o c9di.o pa"a c"ia" !odos passos
-+e se.+imos a!% o momen!o es!0 vis;vel, 'as!a e*e!+a" dois cli-+es no *o"m+l0"io e i" a
0"ea de c9di.o depois cli-+e na &e.i/o WWe' Fo"m Desi.ne" Gene"a!ed CodeW, com isso
voc: vai acompan4a" !odos os passos -+e o Ais+al S!+dio es!0 *a6endo a!% c"ia" se+
Da!aSe!. Todo p"ocedimen!o -+e es!amos *a6endo a-+i % simila" ao da .istagem H com a
di*e"ena -+e es!amos +!ili6ando a in!e"*ace vis+al pa"a c"ia". Ae)a a.o"a a mesma
"ep"esen!a/o na .istagem I -+e di*e"e da .istagem H po" n/o p"ecisa" c"ia" os o')e!os
de acesso a dados sendo -+e )0 *oi c"iado pelo 1D.
?is!a.em j 3 D!ili6ando 1D do Ais+al S!+dio pa"a .e"a" Da!aSe!
P+'lic Class !es!eide
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
\=pcionalmen!e es!o+ !"ocando a S!"in. de cone7/o po"-+e
\o pad"/o do 1D % Windo8s 1n!e."ado, e a ma-+ina p"ecisa es!0
\co""e!amen!e con*i.+"ada.
Me.S-lConnec!ion[.Connec!ionS!"in. c e
WDa!a So+"ceclocal4os!<+se" idcsa<Pass8o"dc<1ni!ial ca!alo.cNo"!48ind<W
Me.S-lDa!aAdap!e"[.Fill2Me.DsTes!e[5
Dim in!1 As 1n!@2
Fo" in!1 c 0 To DsTes!e[.Ta'les205.&o8s.Co+n! 3 [
&esponse.W"i!e2Conve"!.ToS!"in.2DsTes!e[.Ta'les205.&o8s2in!152055 > WaB&bW5
&esponse.W"i!e2Conve"!.ToS!"in.2DsTes!e[.Ta'les205.&o8s2in!152[55 > WaS&bW5
Ne7!
nd S+'
nd Class
='se"vado as di*e"enas en!"e os c9di.os, comen!e o c9di.o na p0.ina 2!es!eide.asp75 e
a""as!e pa"a p0.ina +m componen!e Da!aG"id 21Dcd.Cons+l!a5 al!e"ando se+ 1D con*o"me
especi*icado. Depois al!e"e as p"op"iedades Da!aSo+"ce e Da!aMem'e" con*ome &igura
02. ='se"ve -+e es!0 m+dando na )anela de p"op"iedades, isso es!0 sendo poss;vel
po"-+e voc: c"io+ o Da!aSe! pelo 1D. Depois m+de a apa":ncia do Da!aG"id clicando
com 'o!/o di"ei!o em cima do mesmo e escol4endo A+!oFo"ma!.
&igura 02 * Con!igurando DataGrid
Con*i.+"ado o Da!aG"id, vamos ao c9di.o na ?is!a.em [0 pa"a a!iva" o *+ncionamen!o.
?is!a.em [0 3 Ca""e.ando Da!aG"id
P+'lic Class !es!eide
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
Me.S-lConnec!ion[.Connec!ionS!"in. c e
WDa!a So+"ceclocal4os!<+se" idcsa<Pass8o"dc<1ni!ial Ca!alo.cNo"!48ind<W
Me.S-lDa!aAdap!e"[.Fill2Me.DsTes!e[5
Me.d.Cons+l!a.Da!aBind25
nd S+'
nd Class
Ap9s adiciona" o c9di.o e*e!+e o B+ild e !es!e vai no!a" -+e apenas com essas lin4as de
c9di.o voc: vai ca""e.a" os dados no Da!aG"id con*o"me &igura 0/.
&igura 0/ * DataGrid usando (D,
A van!a.em de se +!ili6a" o 1D % pode" "eali6a" as con*i.+"aes de acesso ao 'anco de
dados pela )anela de p"op"iedades e "ed+6i" a -+an!idade de c9di.o a se" di.i!ado. N/o
implica na "ed+/o de c9di.o .e"ado, pois o Ais+al S!+dio .e"a +ma -+an!idade eno"me
de c9di.o pa"a pe"mi!i" essas *acilidades.
No en!an!o n+nca +!ili6o esse "ec+"so da 1D, pois conside"o m+i!o *0cil o acesso
+!ili6ando o c9di.o di"e!o e *ica mais cla"o o en!endimen!o. se voc: *o" se.+i" o pad"/o
pa!!e"ns n p"a!ices da Mic"oso*!, !oda implemen!a/o do Da!a Access BlocH % *ei!a
+!ili6ando c9di.o. Fica a s+a escol4a, escol4e" o camin4o.
&es+mindo o -+e )0 *i6emos a!% esse momen!o, n9s ca""e.amos +m Da!aSe! com os
dados de +m SGDB. Mas sa'emos -+e o Da!aSe! con!%m Da!aTa'le -+e con!%m
Da!aCol+mn e Da!a&o8 con*o"me )0 vis!o na &igura /1 e na &igura /3. Aamos a.o"a
c"ia" +m Da!aTa'le !o!almen!e via c9di.o e inse"i" dados via c9di.o. Pa"a isso insi"a +m
novo 8e'*o"m 2da!a!a'lecodi.o.asp75 e depois adicione o c9di.o da .istagem //.
?is!a.em [[ 3 C"iando Da!aTa'le +sando c9di.o
P+'lic Class Da!aTa'leCodi.o
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
1* No! Me.Pa.e.1sPos!BacH T4en
ca""e.a25
nd 1*
nd S+'
S+' ca""e.a25
Dim d! As Ne8 Da!aTa'le
\C"iando Col+na Co9di.o
\com a+!o n+me"a/o.
Dim dc As Ne8 Da!aCol+mn
dc c Ne8 Da!aCol+mn
dc.Da!aTEpe c SEs!em.TEpe.Ge!TEpe2WSEs!em.1n!@2W5
dc.Col+mnName c WCodi.oW
dc.&ead=nlE c T"+e \N/o pode se" al!e"ado
dc.Dni-+e c T"+e \N/o "epe!e
dc.A+!o1nc"emen! c T"+e \ De*ine A+!o1nc"emen!o
dc.Allo8DBN+ll c False \N/o acei!a" n+los
d!.Col+mns.Add2dc5 \Adicionando Col+na
\C"iando Col+na Nome
d!.Col+mns.Add2Ne8 Da!aCol+mn2WNomeW, Ge!TEpe2S!"in.555
\C"iando Col+na mail
d!.Col+mns.Add2Ne8 Da!aCol+mn2WmailW, Ge!TEpe2S!"in.555
\33333 Fim C"ia/o Da!aTa'le 333333333333333
\Adicionando ?in4as
Dim d" As Da!a&o8 c d!.Ne8&o8
d"2WNomeW5 c W&amon D+"/esW
d"2WmailW5 c W"amond+"aeslm+!e7.com.'"W
d!.&o8s.Add2d"5
d" c d!.Ne8&o8
d"2[5 c WMiHe Silve"W
d"225 c WmHlmsspace.comW
d!.&o8s.Add2d"5
\GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
\C"iando Da!aG"id Dinamicamen!e
\e adicionando a p0.ina
\GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
Dim d. As Ne8 Da!aG"id
d..Da!aSo+"ce c d!.De*a+l!Aie8
d..Da!aBind25
Me.Pa.e.FindCon!"ol2WFo"m[W5.Con!"ols.Add2d.5
nd S+'
nd Class
Ap9s adiciona" o c9di.o e*e!+e o B+ild e !es!e essa p0.ina, o "es+l!ado deve se" simila" a
&igura 00. Nes!e e7emplo es!amos c"iando +m Da!aTa'le, adicionando as col+nas, e
depois as lin4as. T+do isso *ei!o sem nen4+m acesso ao SGDB. = de!al4e impo"!an!e % a
col+na WCodi.oW -+e *oi c"iada como a+!o3n+me"a/o e o Da!aTa'le a+!oma!icamen!e
adiciona o n+me"o a col+na. ='se"ve -+e nesse e7emplo n/o +!ili6amos Da!aSe!.
&igura 00 * Dataable Jia c>digo
Di.amos a.o"a -+e voc: -+ei"a ve" o con!e(do do Da!aTa'le -+e es!0 a"ma6enado na
mem9"ia, en!/o vamos salva" o con!e(do do mesmo em +m a"-+ivo LM? con*o"me
.istagem /0. ssa ?is!a.em % semel4an!e a an!e"io" e pode"ia se" -+al-+e" o+!"a -+e se
!en4a +m Da!aSe! pois o mesmo -+e es!a no *o"ma!o de LM?, pa"a esse caso c"iamos
+m Da!aSe! e a"ma6enamos o Da!aTa'le den!"o. = Lml .e"ado % mos!"ado na &igura 01.
?is!a.em [2 3 Ge"ando a"-+ivo 7ml apa"!i" de +m Da!aSe!
P+'lic Class Da!aTa'leCodi.o
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
1* No! Me.Pa.e.1sPos!BacH T4en
ca""e.a25
nd 1*
nd S+'
S+' ca""e.a25
Dim d! As Ne8 Da!aTa'le
\C"iando Col+na Co9di.o
\com a+!o n+me"a/o.
Dim dc As Ne8 Da!aCol+mn
dc c Ne8 Da!aCol+mn
dc.Da!aTEpe c SEs!em.TEpe.Ge!TEpe2WSEs!em.1n!@2W5
dc.Col+mnName c WCodi.oW
dc.&ead=nlE c T"+e \N/o pode se" al!e"ado
dc.Dni-+e c T"+e \N/o "epe!e
dc.A+!o1nc"emen! c T"+e \ De*ine A+!o1nc"emen!o
dc.Allo8DBN+ll c False \N/o acei!a" n+los
d!.Col+mns.Add2dc5 \Adicionando Col+na
\C"iando Col+na Nome
d!.Col+mns.Add2Ne8 Da!aCol+mn2WNomeW, Ge!TEpe2S!"in.555
\C"iando Col+na mail
d!.Col+mns.Add2Ne8 Da!aCol+mn2WmailW, Ge!TEpe2S!"in.555
\33333 Fim C"ia/o Da!aTa'le 333333333333333
\Adicionando ?in4as
Dim d" As Da!a&o8 c d!.Ne8&o8
d"2WNomeW5 c W&amon D+"/esW
d"2WmailW5 c W"amond+"aeslm+!e7.com.'"W
d!.&o8s.Add2d"5
d" c d!.Ne8&o8
d"2[5 c WMiHe Silve"W
d"225 c WmHlmsspace.comW
d!.&o8s.Add2d"5
\GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
\C"iando Da!aG"id Dinamicamen!e
\e adicionando a p0.ina
\GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
Dim d. As Ne8 Da!aG"id
d..Da!aSo+"ce c d!.De*a+l!Aie8
d..Da!aBind25
Me.Pa.e.FindCon!"ol2WFo"m[W5.Con!"ols.Add2d.5
\GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
\C"iando LM?
\GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
Dim ds As Ne8 Da!aSe!
ds.Ta'les.add2DT5
ds.W"i!eLml2WC#]!emp]da!ase!codi.o.7mlW5
nd S+'
nd Class
&igura 01 * K+. Gerado pelo 5riteK+.
= Da!aSe! poss+i dois m%!odos impo"!an!es o W"i!eLM? e o &eadLml, sendo +sados
pa"a esc"i!a e pa"a lei!+"a, po" es!0 no *o"ma!o 7ml, Da!aSe! pode se" !"anspo"!ado pela
in!e"ne! po" meio de 8e' se"vices.
Aamos a.o"a *a6e" o con!"0"io, vamos ca""e.a" +m Da!aSe! a pa"!i" de +m a"-+ivo 7ml
+!ili6ando m%!odo &eadLM?, pa"a isso vamos c"ia" +m novo LM?, en!/o 'o!/o di"ei!o no
p"o)e!o 2sol+!ion e7plo"e"5bAdd ne8 i!embLM? con*o"me &igura 03, e d: o nome de
demo7ml.7ml.
&igura 03 * Criando ar@uivo 6ml
Depois di.i!e o c9di.o 7ml con*o"me a &igura 0D. Ap9s adiciona" essa pa"!e, cli-+e na
op/o Da!a lo.o no *inal e !e"0 o "es+l!ado mos!"ado na &igura 0E.
&igura 0E * %dicionando registros
Aoc: pode adiciona" a.o"a mais "e.is!"os +sando essa in!e"*ace vis+al, ap9s !e"mina"
cli-+e novamen!e em 7ml e vai ve" o c9di.o .e"ado. Ap9s !e"mina" insi"a +m novo
8e'*o"m 2da!ase!"ead.asp75 e adicione o c9di.o da .istagem /1.
?is!a.em [@ 3 Ca""e.ando Da!aSe! +sando 7ml
P+'lic Class da!ase!"ead
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 Sandles MEBase.?oad
Dim ds As Ne8 Da!aSe!
ds.&eadLml2Se"ve".MapPa!42Wdemo7ml.7mlW55
d.Cons+l!a.Da!aSo+"ce c ds.Ta'les205
d.Cons+l!a.Da!aBind25
nd S+'
nd Class
Ap9s e*e!+a" B+ild e !es!a" o c9di.o !e"emos o "es+l!ado na &igura 0F.
&igura 0F * .endo 6ml e carregando DataSet
Con*o"me vis!o com po+cas lin4as )0 !emos +m Da!aSe! -+e es!0 sendo alimen!ado a
pa"!i" de +m a"-+ivo LM?. Aamos a.o"a c"ia" +m Da!aG"id com p0.ina/o e +!ili6ando +m
Da!aSe!. Pa"a inicia" adicione +m novo We'Fo"m 2Da!aG"idp0.ina.asp75, depois adicione
+m Da!aG"id 21Dcd.Cons+l!a5 e *o"ma!e com laEo+! p"e*e"ido, depois cli-+e no mesmo
com 'o!/o di"ei!o e escol4a P"ope"!E B+ilde"bPa.in. e con*i.+"e con*o"me a &igura 0H.
Fei!o isso e*e!+e dois cli-+es na p0.ina e adicione o c9di.o de aco"do com a .istagem
/3.
&igura 0H * Con!igurando DataGrid para p"ginao
?is!a.em [_ 3 p0.inando Da!aG"id com Da!aSe!
1mpo"!s SEs!em.Da!a
1mpo"!s SEs!em.Da!a.S-lClien!
P+'lic Class da!a."idp0.ina
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
1* No! Pa.e.1sPos!BacH T4en
ca""e.aDG25
nd 1*
nd S+'
S+' ca""e.aDG25
Dim conn As Ne8 S-lConnec!ion
Dim cmd As Ne8 S-lCommand
Dim da As Ne8 S-lDa!aAdap!e"
Dim ds As Ne8 Da!aSe!
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c WSelec! ` *"om P"od+c!sW
da.Selec!Command c cmd
da.Fill2ds5
conn.Dispose25
cmd.Dispose25
da.Dispose25
Me.d.Cons+l!a.Da!aSo+"ce c ds
Me.d.Cons+l!a.Da!aBind25
nd S+'
P"iva!e S+' d.Cons+l!aePa.e1nde7C4an.ed2BEAal so+"ce As =')ec!, e
BEAal e As SEs!em.We'.D1.We'Con!"ols.Da!aG"idPa.eC4an.edven!A".s5
e
Sandles d.Cons+l!a.Pa.e1nde7C4an.ed
Me.d.Cons+l!a.C+""en!Pa.e1nde7 c e.Ne8Pa.e1nde7
ca""e.aDG25
nd S+'
nd Class
Ap9s adiciona" o c9di.o e e*e!+a" B+ild con*i"a o "es+l!ado semel4an!e a &igura 0I. Fi-+e
apenas a!en!o ao even!o Pa.e1nde7C4an.ed do Da!aG"id pois % mesmo -+e % dispa"ado
-+ando se clica na m+dana de p0.ina no Da!aG"id.
&igura 0I * DataGrid com p"ginao
Falando so'"e Da!aSe! n/o podemos !am'%m de dei7a" de *a6e" +m e7emplo so'"e
Da!aAie8 -+e +m pad"/o de p"o)e!o Model3Aie8, -+e pe"mi!e a c"ia/o de vises dos
dados "ec+pe"ados, podendo *il!"a", o"dena" os dados -+e es!/o no Da!aTa'leGDa!aSe!.
7is!e al.+ns casos -+e voc: n/o conse.+e m+da" a o"dem dos dados, como o "e!o"no
de +ma p"oced+"e. n!/o voc: +sa o Da!aAie8 pa"a m+da" a o"dem dos dados. Aamos
a.o"a ap"ovei!a" e *a6e" +m e7emplo -+e en.lo'e d+as coisas Da!aAie8 e
S!o"edP"oced+"es. Pa"a essa !a"e*a adiciona +m novo 8e'*o"m 2Da!aSe!Aie8.asp75,
depois adicione +m Da!aG"id 21Dcd.Cons+l!a5 e adicicione o c9di.o da .istagem /D.
?is!a.em [^ 3 D!ili6ando Da!aAie8
1mpo"!s SEs!em.Da!a
1mpo"!s SEs!em.Da!a.S-lClien!
P+'lic Class da!ase!vie8
1n4e"i!s SEs!em.We'.D1.Pa.e
P"iva!e S+' Pa.ee?oad2BEAal sende" As SEs!em.=')ec!, BEAal e As
SEs!em.ven!A".s5 e
Sandles MEBase.?oad
ca""e.aDG25
nd S+'

S+' ca""e.aDG25
Dim conn As Ne8 S-lConnec!ion
Dim cmd As Ne8 S-lCommand
Dim da As Ne8 S-lDa!aAdap!e"
Dim ds As Ne8 Da!aSe!
conn.Connec!ionS!"in. c e
WDa!a So+"ceclocalSos!< Dse" 1Dcsa< Pass8o"dc<1ni!ial Ca!alo.c No"!48ind<W
cmd.Connec!ion c conn
cmd.CommandTe7! c WSalesBECa!e.o"EW
cmd.CommandTEpe c CommandTEpe.S!o"edP"oced+"e
cmd.Pa"ame!e"s.Clea"25
cmd.Pa"ame!e"s.Add2Ne8 S-lPa"ame!e"2WlCa!e.o"ENameW,
S-lD'TEpe.Aa"C4a"55.Aal+e c WBeve"a.esW
cmd.Pa"ame!e"s.Add2Ne8 S-lPa"ame!e"2Wl="dmea"W, S-lD'TEpe.Aa"C4a"55.Aal+e
c W2002W
da.Selec!Command c cmd
da.Fill2ds5
conn.Dispose25
da.Dispose25
cmd.Dispose25
\D!ili6ando Da!aAie8 pa"a o"dena"
Dim dv As Ne8 Da!aAie82ds.Ta'les2055
dv.So"! c WP"od+c!Name DSCW
Me.Da!aG"id[.Da!aSo+"ce c dv
Me.Da!aG"id[.Da!aBind25
nd S+'
nd Class
Ap9s adiciona" o c9di.o e e*e!+a" o B+ild con*i"a na &igura 12, nes!e e7emplo o"denamos
pela col+na P"od+c!Name, isso den!"o do Da!aAie8 e n/o no 'anco de dados, a!% po"-+e
o "e!o"no do mesmo % +ma p"oced+"e. es!amos passando o Da!aAie8 pa"a o Da!aG"id
e n/o o Da!aSe!.
&igura 12 * ,6ibindo DataJie$
Con*o"me "es+l!ado na &igura 12, o "e!o"no do 'anco de dados es!0 o"denado.

Das könnte Ihnen auch gefallen