Вы находитесь на странице: 1из 49

CARRERA PROFESIONAL

INGENIERIA DE SISTEMAS E INFORMATICA


ASIGNATURA
LABORATORIO DE PROGRAMACIN
Qu es .NET?
.NET es toda una nueva arquitectura tecnolica! desarrollada "or #icroso$t
"ara la creacin % distri&ucin del so$t'are co(o un servicio. Esto quiere decir!
que (ediante las )erra(ientas de desarrollo "ro"orcionadas "or esta nueva
tecnolo*a! los "rora(adores "odr+n crear a"licaciones &asadas en servicios
"ara la 'e&.
Las caracter*sticas "rinci"ales que con$or(an .NET son las siuientes,
- La "lata$or(a .NET Fra(e'or.! que "ro"orciona la in$raestructura "ara crear
a"licaciones % el entorno de e/ecucin "ara las (is(as.
- Los "roductos de #icroso$t en$ocados )acia .NET! entre los que se
encuentran 0indo's .NET Server! co(o siste(a o"erativo que incluir+ de
$or(a nativa la "lata$or(a .NET Fra(e'or.1 2isual Studio .NET! co(o
)erra(ienta interada "ara el desarrollo de a"licaciones1 O$$ice .NET1 &.Central
"ara .NET! etc.
- Servicios "ara .NET desarrollados "or terceros $a&ricantes! que "odr+n ser
utili3ados "or otras a"licaciones que se e/ecuten en Internet.
E4isten adicional(ente un con/unto de "roductos! que &a/o la etiqueta de
Servidores E("resariales "ara .NET 5.NET Enter"rise Servers6 se inclu%en
dentro de la estrateia .NET. Entre estos "roductos "ode(os encontrar a S7L
Server 8999! :i3Tal. Server! Co((erce Server 8999! etc. Sin e(&aro! )e(os
de )acer una "untuali3acin i("ortante, estos "roductos no est+n &asados
en .NET Fra(e'or.! "ueden $uncionar dentro del entorno de e/ecucin de
.NET Fra(e'or.! "ero el ;nico "roducto actual(ente desarrollado &a/o el
nuevo entorno es 2isual Studio .NET.
Gracias a .NET % a su (odelo de desarrollo &asado en servicios! se $le4i&ili3a %
enriquece el (odo en el que )asta a)ora se constru*an a"licaciones "ara
Internet. La idea que su&%ace &a/o esta tecnolo*a! es la de "o&lar Internet con
un e4tenso n;(ero de a"licaciones! que &asadas en servicios "ara la 'e&
50e& Services6! $or(en un (arco de interca(&io lo&al! racias a que dic)os
servicios est+n $unda(entados en los est+ndares SOAP % <#L! "ara el
interca(&io de in$or(acin.
En este sentido! un "rora(ador "uede crear 0e& Services "ara que sean
utili3ados "or sus "ro"ias a"licaciones a (odo de co("onentes 5"ero de una
$or(a (uc)o (+s avan3ada que e("leando el (odelo CO# cl+sico6!
siuiendo una estructura de "rora(acin %a conocida.
.NET FRAMEWORK
CONCEPTOS INICIALES
#as reciente "lata$or(a de desarrollo "ro"uesta "or #icroso$t
So"orta (ultilenua/e
Provee un nuevo nivel de intero"erati&ilidad que "er(ite reutili3ar
co("onentes )ec)os en otros lenua/es de "rora(acin.
Inclu%e caracter*sticas nuevas co(o,
#ane/o din+(ico de (e(oria
Seuridad
#ane/o de Errores
E/ecucin controlada
=e"uracin a trav>s de (;lti"les lenua/es
PRCTICA EN LABORATORIO
La "resente clase "retende deter(inar la "otencialidad de .Net Fra(e'or.
2ISUAL :ASIC .NET
- Utili3ando el :loc de notas diite el siuiente cdio.
I("orts s%ste(
#odule #odulo?
Pu&lic su& (ain56
console.'riteline5@Aola visual &asicB6
End su&
End #odule
- Guarde el arc)ivo en la unidad C, con el no(&re Pror!"!#$.#$.
- Aaa clic en Inicio CD Prora(as CD #icroso$t 2isual Studio .NET 899E CD
Aerra(ientas de 2isual Studio 899E CD 2isual Studio 899E Co((and
Pro("t.
- =iite al siuiente orden v&c Prora(av&.v&
- O&serve que .NET Fra(e'or. )a enerado el arc)ivo e/ecuta&le
Prora(av&.e4e.
- E/ecute el arc)ivo .e4e
2ISUAL CF
- Utili3ando el :loc de notas diite el siuiente cdio.
usin S%ste(1
class )ola
G
"u&lic static void #ain56
G
Console.0riteLine5HAola visual CFH61
I
I
- Guarde el arc)ivo en la unidad C, con el no(&re Pror!"!%s.%s
- Aaa clic en Inicio CD Prora(as CD #icroso$t 2isual Studio .NET 899E CD
Aerra(ientas de 2isual Studio 899E CD 2isual Studio 899E Co((and
Pro("t.
- =iite al siuiente orden csc Prora(acs.cs
- O&serve que .NET Fra(e'or. )a enerado el arc)ivo e/ecuta&le
Prora(acs.e4e.
- E/ecute el arc)ivo .e4e.
CONOCIENDO EL ENTORNO &IS'AL
Pu&lic Class For(?
In)erits S%ste(.0indo's.For(s.For(
Private Su& :utton?JClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles :utton?.Clic.

#essae:o4.S)o'5HIn. )olaH6
Te4t:o4?.Te4t K HUniv. ContinentalH
End Su&
Private Su& Ti(er?JTic.5:%2al sender As O&/ect! :%2al e As
S%ste(.EventArs6 Aandles Ti(er?.Tic.

#e.O"acit% CK 9.9E
I$ #e.O"acit% K 9 T)en
#e.Close56
End I$
End Su&
El formulario es una clase
Private Su& For(?JClosin5:%2al sender As O&/ect! :%2al e As
S%ste(.Co("onent#odel.CancelEventArs6 Aandles #%:ase.Closin
e.Cancel K True
#e.Ti(er?.Ena&led K True
End Su&
End Class
BASE DE DATOS
Qu es SQL SERVER?.
S7L Server es un Ad(inistrador de :ase de datos Relacional de arquitectura
clienteL servidor 5R=:#S6 que usa ordenes S7L! conocidas co(o
TransactCS7L! "ara (andar requeri(ientos desde un cliente al S7L
Server.
Ar(u)*e%*ur! C+)e,*e- Ser#).or.
=e la (anera (+s si("le un cliente es cualquier co("onente del siste(a que
requiere servicios o recursos de otros co("onentes del siste(a. Un servidor es
un co("onente del siste(a que "ro"orciona servicios o recursos a otros
co("onentes del siste(a. Co("onentes de un ClienteL Servidor dataL &ase
s%ste(.
Ser#).or.
Coleccin de datos % o&/etos orani3ados que $acilitan servicios co(o
&;squedas! ordena(ientos! recu"eracin! actuali3aciones % an+lisis de datos.
Todos los servicios de acceso a datos ocurren "or (edio del servidor. La &ase
de datos se co("one de es"acio $*sico de datos % los servicios de &ase de
datos.
C+)e,*e.
Es un so$t'are que "odr*a ser usado "or una "ersona o "or un
"roceso auto(ati3ado. Inclu%e el so$t'are que interact;a con el servidor
requiriendo datos del servidor o (andando datos.
Co(unicando datos entre el cliente % el servidor.
=e"enden de c(o )a%an sido i("le(entados el cliente % el servidor. El (edio
de co(unicacin $*sico "uede ser una red Local % el (edio de co(unicacin
lica lo constitu%e el lenua/e S7L 5Structured 7uer% Lanuae6.
Cateor*as de las i("le(entaciones dataC&ase s%ste(.
!. F)+e/B!se. S0s*e"
Estos siste(as usan una a"licacin que directa(ente accede a los
arc)ivos de datos u&icados en un equi"o local o un servidor de red.
Estos siste(as i("le(entan los servicios de : = % el nivel lico de
co(unicacin co(o "arte de la a"licacin cliente
b. . 1os*/B!se. S0s*e".
Usados en (ain$ra(es % (inico("utadorasI. Estos siste(as
i("le(entan todos los servicios de la : = % la $uncionalidad del cliente
en un ran co("utador.
CREACIN DE BASE DE DATOS
?. Cree una &ase de datos lla(ada 'CCI utili3ando S7L Server 899M tal
co(o se (uestra en la $iura.
8. Es"eci$ique le no(&re de al &ase de datos
N. O&serve las o"ciones de "ro"iedades a con$iurar
O. Una ve3 creada la &ase de datos "rocedere(os a crear las ta&las de de
la :=

BASE DE DATOS
SENTENCIAS SQL
SENTENCIA 23
SELECT O P N AS Su(a! ?8 L Q AS =ivision
GO
SENTENCIA 43
SELECT $na(e!
UPPER5$na(e6 AS R#a%;sculasS!
LO0ER5$na(e6 AS R#in;sculasS!
SU:STRING5$na(e! N! N6 AS RSu&cadenaS
FRO#e("lo%ee
GO
SENTENCIA 53
SELECT /o&Jid!
CASE /o&Jid
0AEN ? TAEN TNuecesT
0AEN 8 TAEN TFrutaT
0AEN N TAEN TNuecesT
0AEN Q TAEN TFrutaT
0AEN M TAEN TNuecesT
0AEN ?O TAEN TNuecesT
0AEN ?8 TAEN TFrutaT
0AEN ?E TAEN TFrutaT
ELSE TOtrosT
EN= AS /o&Jid
FRO# /o&s
SENTENCIA 63
LU Lista todos los aceites cu%o no(&re co(;n co(ien3a con la
(is(a letra que su no(&re latino UL
SELECT OilNa(e! LatinNa(e
FRO# Oils
0AERE LEFT5OilNa(e! ?6 K LEFT5LatinNa(e! ?6
CC Crear la varia&le t)e local
=ECLARE VOilNa(e c)ar5E96
CC Ca(&iar el valor
SET VOilNa(e K TGer(an C)a(o(ileT
CC #ostrar el valor de la varia&le
SELECT VOilNa(e
SENTENCIA 73
CC =e(uestra las $unciones de $ec)a % )ora
SELECT
=ATENA#E5#ont)! GET=ATE566 AS RNo(&re Fec)aS!
=AW5GET=ATE566 AS R=iaS!
#ONTA5GET=ATE566 AS R#esS!
WEAR5GET=ATE566 AS RAXoS
SENTENCIA 83
PRINT TWo (e e/ectuoT
GOTO PuntoSalto
PRINT TWo no (e e/ecutoT
PuntoSalto,
PRINT TWo ta(&i>n (e e/ecutoT
SENTENCIA 93
CC Crear una varia&le local de ti"o ta&la
=ECLARE Vta&laLocal TA:LE 5a c)ar5E96!
& c)ar5E966
CC Utili3ar INSERT INTO "ara crear $ilas
INSERT INTO Vta&laLocal
SELECT $na(e! lna(e
FRO# e("lo%ee

CC #ostrar los resultados
SELECT a!&
FRO#Vta&laLocal
SENTENCIA :3
CC Utili3ar una varia&le local co(o contador
=ECLARE Vcontador int
SET Vcontador K ?
0AILE Vcontador Y ??
:EGIN
PRINT Vcontador
SET Vcontador K Vcontador P ?
EN=
E;ERCICIOS DE SENTENCIAS SQL
=escri&a el resultado de cada sentencia S7L
HSelect artJid! artJno(&! artJ"cos $ro( Articulos ')ere artJ"cosDO99 and
artJ"cosYQ99H
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Z.
HSelect su(5artJstoc6 $ro( ArticulosH
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Z.
HSelect catJid! su(5artJstoc6 $ro( Articulos rou" &% catJidH
Select Cateor%I=! u(5UnitsInStoc.6 $ro( "roducts rou" &% Cateor%I=
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Z.
HSelect su(5artJstoc6 $ro( Articulos ')ere catJidKT#UL99?T OR
catJidKTCO#99?TH
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Z.
HSelect U $ro( Articulos ')ere artJstoc :ET0EEN E and ?EH
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Z.
HSelect (a45artJstoc6 $ro( ArticulosH
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
HSelect (in5artJstoc6 $ro( ArticulosH
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
HSelect av5artJstoc6 $ro( ArticulosH
PROCEDIMIENTOS ALMACENADOS
STORED PROCED'RE
?. Crear un Store Procedure que "er(ita "asar co(o "ar+(etro el no(&re de
una ta&la que se desea visuali3ar sus datos
CREATE PROCE=URE ta&la
Vta&la? c)ar5N96
AS
declare Vc(d c)ar5M96
set Vc(dK TSELECT U FRO# T P Vta&la?
e4ec5Vc(d6
GO
E/ecutar el Store Procedure Tabla
Exec tabla 'Cliente'
8. Crear un Store Procedure que "er(ita actuali3ar los datos de un cliente
deter(inado
CREATE PROCE=URE actuali3ar
VIdCliente int!
VNo(&re c)ar5896!
VA"ellido c)ar5896!
V=ireccion c)ar 5896
AS
UP=ATE cliente
SET No(&reKVNo(&re! A"ellidoKVA"ellido!=ireccionKV=ireccion
0AERE idclienteKVIdCliente
GO
E/ecutar el Store Procedure Actualizar
E4ec actuali3ar ?!T[oseT!TGarciaT!TCastroT
N. Crear N Store Procedure que nos "er(itan Insertar! Actuali3ar % eli(inar un
reistro de la ta&la Productos.
WINDOWS FORM< CONTROLES
=iseXe los siuientes $or(ularios
FORM'LARIO MEN' =FORM2>
Pu&lic Class #enu
In)erits S%ste(.0indo's.For(s.For(
LOAD
=i( )i/o As Ne' Fr()i/o
)i/o.#diParent K #e
)i/o.S)o'56
End Su&
GRABAR
=i( ra&ar As Ne' S%ste(.IO.Strea(0riter5HC,\arc)ivo.t4tH6
=i( te4to As Strin
te4to K CT%"e5#e.Active#diC)ild! Fr()i/o6.Te4t:o4?.Te4t
ra&ar.0rite5te4to6
ra&ar.Close56
COPIAR
=i( dato As Strin
dato K CT%"e5#e.Active#diC)ild! Fr()i/o6.Te4t:o4?.SelectedTe4t
Cli"&oard.Set=ataO&/ect5dato6
PEGAR
=i( dato As Strin
dato K Cli"&oard.Get=ataO&/ect.Get=ata5=ataFor(ats.Te4t6
#s:o45dato6
COLOR
CT%"e5#e.Active#diC)ild! Fr()i/o6.Te4t:o4?.ForeColor K
S%ste(.=ra'in.Color.Ros%:ro'n
CASCADA
#e.La%out#di5#diLa%out.Cascade6
FORM'LARIO 1I;O
Private Su& Fr()i/oJLoad5:%2al sender As O&/ect! :%2al e As
S%ste(.EventArs6 Aandles #%:ase.Load
=i( lee As Ne' S%ste(.IO.Strea(Reader5HC,\arc)ivo.t4tH6
Te4t:o4?.Te4t K lee.ReadToEnd
lee.Close56
End Su&
LISTBO? AND ADDING CONTROLS AT R'N TIME
=iseXe el $or(ularios,
Private Su& FcontrolesJLoad5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles #%:ase.Load
Lstlista.Ite(s.AddRane5Ne' Strin56 GHAlanH! HAl$redoH! HAlvaroH! HAndresH!
HAntonioH! H[uanH! H[ulietaH! H[ulioH! H[uliusH! H#iuelH! H#ilarosH! H#innieHI6
End Su&
Private Su& t4tno(&reJTe4tC)aned5:%2al sender As S%ste(.O&/ect! :%2al e
As S%ste(.EventArs6 Aandles t4tno(&re.Te4tC)aned
Lstlista.SelectedInde4 K Lstlista.FindStrin5t4tno(&re.Te4t6
End Su&
Private Su& LstlistaJ=ou&leClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles Lstlista.=ou&leClic.
t4tno(&re.Te4t K Lstlista.SelectedIte(
End Su&
Private Su& :tnarearJClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles :tnarear.Clic.
=i( #iTe4t:o4 As Ne' S%ste(.0indo's.For(s.Te4t:o4
Posicionto" PK 89
T&.To" K Posicionto"
Controls.Add5T&6
=i( #iList:o4 As Ne' S%ste(.0indo's.For(s.List:o4
Posicionto" PK O9
a.To" K Posicionto"
Controls.Add5a6
End Su&
CLASES Y OBJETOS
=iseXe EL siuiente $or(ulario
Private Su& :utton?JClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles :utton?.Clic.

=i( a As Ne' Avion
Te4t:o4?.Te4t K a.(arca
a.i("ri(ir56
=i( & As Ne' Aco(&ate
&.(arca K HACo(&ate To%otaH
&.(odelo K HACo(&ate A<=H
&.(isil K HFRACNQH
&.(ostrar56
&.i("ri(ir56
=i( c As Ne' Aes"ia
c.i("ri(ir56
End Su&
CLASES3
Pu&lic Class Avion
Private (i(odelo As Strin K H:OINGH
Private (i(arca As Strin K H''H
Pu&lic Pro"ert% (odelo56
Get
Return (i(odelo
End Get
Set5:%2al 2alue6
(i(odelo K 2alue
End Set
End Pro"ert%
Pu&lic Pro"ert% (arca56
Get
Return (i(arca
End Get
Set5:%2al 2alue6
(i(arca K 2alue
End Set
End Pro"ert%
Pu&lic Su& (ostrar56
#essae:o4.S)o'5(i(odelo6
#essae:o4.S)o'5(i(arca6
End Su&
Pu&lic Overrida&le Su& i("ri(ir56
#essae:o4.S)o'5HO&/eto AvionH6
#essae:o4.S)o'5(i(odelo6
#essae:o4.S)o'5(i(arca6
End Su&
End Class
Pu&lic Class Aco(&ate
In)erits Avion
Private (isiles As Strin
Pu&lic Pro"ert% (isil56
Get
Return (isiles
End Get
Set5:%2al 2alue6
(isiles K 2alue
End Set
End Pro"ert%
Pu&lic Overrides Su& i("ri(ir56
#essae:o4.S)o'5HO&/eto Avion Co(&ateH6
#essae:o4.S)o'5(isiles6
End Su&
End Class
Pu&lic Class Aes"ia
In)erits Aco(&ate
Private (icodio As Strin K HESPIAH
Pu&lic Pro"ert% codio56
Get
Return (icodio
End Get
Set5:%2al 2alue6
(icodio K 2alue
End Set
End Pro"ert%
Pu&lic Overrides Su& i("ri(ir56
#essae:o4.S)o'5HO&/eto Avion Es"iaH6
#essae:o4.S)o'5(icodio6
End Su&
End Class
ACCESO A DATOS CON ADO .NET
En los siuientes te(as va(os a tratar el acceso a datos desde 2:.NET!
)aciendo uso del nuevo (odelo de acceso a datos incluido en la "lata$or(a
.NET Fra(e'or., A=O .NET. #ostrare(os las tareas &+sicas "ara el acceso a
datos desde a"licaciones &asadas en $or(ularios 0indo's! e("leando la
tecnolo*a "ro"orcionada "or A=O .NET.
A=O .NET es la nueva versin del (odelo de o&/etos A=O 5Active< =ata
O&/ects6! es decir! la estrateia que o$rece #icroso$t "ara el acceso a datos.
A=O .NET )a sido a("liado "ara cu&rir todas las necesidades que A=O no
o$rec*a! % est+ diseXado "ara tra&a/ar con con/untos de datos desconectados!
lo que "er(ite reducir el tr+$ico de red. A=O .NET utili3a <#L co(o $or(ato
universal de trans(isin de los datos.
A=O .NET "osee una serie de o&/etos que son los (is(os que a"arecen en la
versin anterior de A=O! co(o "ueden ser el o&/eto Connection o Co((and! e
introduce nuevos o&/etos tales co(o el o&/eto =ataReader! =ataSet o
=ata2ie'.
A=O .NET se "uede de$inir co(o,
- Un con/unto de inter$aces! clases! estructuras % enu(eraciones que "er(iten
el acceso a datos
desde la "lata$or(a .NET de #icroso$t
- La evolucin lica del API A=O tradicional de #icroso$t
- Per(ite un (odo de acceso desconectado a los datos! los cuales "ueden
"rovenir de (;lti"les
$uentes de datos! de di$erente arquitectura de al(acena(iento
Be,e@)%)os .e ADO .NET
A=O .NET o$rece una &uena cantidad de (e/oras res"ecto a (odelos
anteriores de A=O. Los &ene$icios los "ode(os aru"ar en las cateor*as
descritas a continuacin.
I,*eroAer!$)+).!.
Las a"licaciones &asadas en A=O .NET o&tienen venta/a de la $le4i&ilidad % la
(asiva ace"tacin del est+ndar <#L "ara el interca(&io de datos. Puesto que
<#L es el est+ndar de env*o de in$or(acin entre ca"as! cualquier
co("onente ca"a3 de Inter"retar los datos <#L "uede acceder a la
in$or(acin de A=O .NET! se encuentre donde se encuentre! % "rocesarla.
Ade(+s! "uesto que la in$or(acin se env*a en $lu/os de <#L! no i("orta la
i("le(entacin e("leada "ara enviar o recoer la in$or(acin ]as* co(o la
"lata$or(a e("leadaC. Si("le(ente se e4ie a los co("onentes que
recono3can el $or(ato <#L e("leado "ara el "roceso! env*o % rece"cin de un
=ataSet.
M!,*e,)")e,*o
En el ciclo de vida de una a"licacin los ca(&ios "oco sustanciales % (odestos
son "er(isi&les. Pero cuando es necesario a&ordar un ca(&io estructural o
arquitectnico del siste(a! la tarea se vuelve de(asiado co("le/a % a veces
invia&le. Esto es una ran desventa/a de los siste(as actuales! "ues (uc)as
veces se trata de una cuestin de actuali3acin de los "rocesos de la "ro"ia
e("resa. Ade(+s! cuanto (+s se au(enta el "roceso de la o"erativa de la
e("resa! las necesidades de "roceso crecen
)asta des&ordar las (+quinas. Es "or ello que se se"ara la estructura de un
"rora(a en varias ca"as. Una de esas ca"as es la de datos! que es
$unda(ental desarrollar correcta(ente. Gracias a los =ataSets! la tarea de
"ortar % au(entar los "rocesos de datos % de neocio ser+ (as sencillo, el
interca(&io de in$or(acin a trav>s de <#L! )ace que sea (+s sencilla la
tarea de estructurar en (+s ca"as la a"licacin! convirti>ndola en (+s (odular
% $+cil de (antener.
Pror!"!%)B,
Los "rora(adores "ueden acceder a un API de "rora(acin estructurado!
de $uerte ti"i$icado % que ade(+s se concentra en la correcta $or(a de
"resentar los datos. Centra en la estructura del lenua/e lo que un "rora(ador
necesita "ara diseXar los "rora(as sin dar (uc)os rodeos. El Cdio $uente
(uestra un e/e("lo de cdio sin ti"i$icar,
^....
I$ CosteTotal D Ta&le5HClienteH65HLuisH6.Colu(n5HCredito=is"oni&leH6 T)en
^....
Co(o se "uede o&servar! a"arecen no(&res de o&/etos en>ricos del siste(a
que co("lican la lectura del cdio! a la "ar que los o"eradores co("lican
ta(&i>n la visin de la secuencia de acceso a los datos. Podr*a(os inter"retar
lo que )ace racias a que a"arecen los no(&res "ro"ios de los datos que
necesita(os. El Cdio $uente (uestra un e/e("lo un "oco (+s ti"i$icado,
^....
I$ CosteTotal D =ataSet?.Cliente5HLuisH6.Credito=is"oni&le T)en
^....
El e/e("lo es e4acta(ente iual al anterior! "ero en este caso! el cdio se
centra (+s en los o&/etos reales que en el o&/eto del lenua/e en s*, las
"ala&ras Table % Column %a no a"arecen. En su luar ve(os que a"arecen los
no(&res de los o&/etos e("leados de la vida real! lo que )ace el cdio (+s
lei&le. Si a esto uni(os que los entornos %a son ca"aces de a%udarnos a
escri&ir el cdio! todav*a lo
tene(os (+s sencillo! %a que "ode(os ver con nuestras "ala&ras el (odelo de
o&/etos de datos que necesita(os en cada (o(ento. Incluso a nivel de
e/ecucin nos ve(os res"aldado "or un siste(a de control de ti"os % errores
que nos "er(itir+n "ro"orcionar una ro&uste3 innata! que antes no se ten*a sin
"asar "or el uso de $unciones e4ternas.
Re,.)")e,*o
Puesto que tra&a/a(os con o&/etos de datos desconectados! todo el "roceso
se acelera! %a que no tene(os que estar co(unic+ndonos "or #ars)allin con
el servidor. Ade(+s! racias al (odelo de <#L la conversin de ti"os no es
necesaria a nivel de CO#. Se reduce "ues el anc)o de &anda dis"oni&le! se
inde"endi3a (+s el cliente del servidor! % se descara (+s a >ste! que "uede
estar dedicado a otras tareas en lo que el cliente anali3a sus datos.
Es%!+!$)+).!.
Las a"licaciones 0e& tienen un n;(ero ili(itado de cone4iones "otenciales
de&ido a la naturale3a de Internet. Los servidores son ca"aces de atender (u%
&ien decenas % decenas de cone4iones. Pero cuando )a&la(os de (iles %
(illones! los servidores %a no son ca"aces de reali3ar correcta(ente su
tra&a/o. Esto es de&ido a que "or cada usuario se (antiene una (e(oria de
"roceso % cone4in! un con/unto de &loqueos de recursos co(o "uedan ser
ta&las! *ndices! etc.! % una co("ro&acin de sus "er(isos1 todo ello consu(e
tie("o % recursos. A=O .NET $avorece la escala&ilidad! "uesto que su (odelo
de cone4in O$$CLine evita que se (antenan los recursos reservados (+s
tie("o del considerado necesario. Esto "er(ite que (+s usuarios "or unidad
de tie("o "uedan acceder a la a"licacin sin "ro&le(as de tie("os. Ade(+s
se "ueden (ontar servicios en Cluster de alta dis"oni&ilidad que ser+n
&alanceados auto(+tica(ente "or el siste(a sin a$ectar a las cone4iones A=O.
Lo cual aranti3a la a("liacin del servicio sin re"resentar un ca(&io de
arquitectura de diseXo.
Ar(u)*e%*ur! .e .!*os .es%o,e%*!.os
A=O .NET est+ &asado en una arquitectura desconectada de los datos. En una
a"licacin de datos se )a co("ro&ado que (antener los recursos reservados
(uc)o tie("o! i("lica reducir el n;(ero de usuarios conectados % au(enta el
"roceso del siste(a al (antener una "ol*tica de &loqueos % transacciones. Al
(is(o tie("o! si la a"licacin (antiene (+s de un o&/eto si(ult+nea(ente! se
encuentra con el "ro&le(a de tener que estar continua(ente conectando con
el servidor "ara ali(entar las relaciones e4istentes entre a(&as! su&iendo %
&a/ando in$or(acin v*a RPC.
Con A=O .NET se consiue estar conectado al servidor slo lo estricta(ente
necesario "ara reali3ar la o"eracin de cara de los datos en el =ataSet. =e
esta (anera se reducen los &loqueos % las cone4iones a la (*ni(a e4"resin.
Se "ueden so"ortar (uc)os (+s usuarios "or unidad de tie("o % dis(inu%en
los tie("os de res"uesta! a la "ar que se aceleran las e/ecuciones de los
"rora(as.
Tradicional(ente! el recoer in$or(acin de una &ase de datos )a ido
destinado a reali3ar un "roceso con dic)a in$or(acin, (ostrarla "or "antalla!
"rocesarla o enviarla a al;n co("onente. Frecuente(ente! la a"licacin no
necesita una ;nica $ila! sino un &uen con/unto de ellas. Ade(+s! ta(&i>n
$recuente(ente! ese con/unto de $ilas "rocede no de una ta&la sino de una
unin de (;lti"les ta&las 5/oin de ta&las6. Una ve3 que estos datos son
carados! la a"licacin los trata co(o un &loque co("acto. En un (odelo
desconectado! es invia&le el tener que conectar con la &ase de datos cada ve3
que avan3a(os un reistro "ara recoer la in$or(acin asociada a ese reistro
5condiciones del /oin6.
Para solucionarlo! lo que se reali3a es al(acenar te("oral(ente toda la
in$or(acin necesaria donde sea necesario % tra&a/ar con ella. Esto es lo que
re"resenta un =ataSet en el (odelo A=O .NET. Un =ataSet es una cac)> de
reistros recu"erados de una &ase de datos que act;a co(o un siste(a de
al(acena(iento virtual! % que contiene una o (+s ta&las &asadas en las ta&las
reales de la &ase de datos. Adicional(ente! al(acena las relaciones % relas
de interidad e4istentes entre ellas "ara aranti3ar la esta&ilidad e interidad
de la in$or(acin de la &ase de datos. #u% i("ortante es recalcar! que los
=ataSets son al(acenes "asivos de datos! esto es! no se ven alterados ante
ca(&ios su&%acentes de la &ase de datos. Es necesario recararlos sie("re
que quera(os estar al da, en cuanto a datos se re$iere.
Una de las (a%ores venta/as de esta i("le(entacin! es que una ve3 o&tenido
el =ataSet! >ste "uede ser enviado 5en $or(a de $lu/o <#L6 entre distintos
co("onentes de la ca"a de neocio! co(o si de una varia&le (+s se tratase!
a)orrando as* co(unicaciones a trav>s de la &ase de datos.
Una consecuencia lica de este ti"o de arquitecturas! es la de conseuir que
los =ataSets sean inde"endientes de los or*enes de datos. Los drivers OLEC
=: trans$or(ar+n la consulta S7L en un cursor re"resentado con una
estructura <#L! que es inde"endiente del (otor de la &ase de datos.
Esto nos "er(itir+ tra&a/ar con (;lti"les or*enes de datos! de distintos
$a&ricantes e incluso en $or(atos que no "ertene3can a &ases de datos! "or
e/e("lo! $ic)eros "lanos u )o/as de c+lculo! lo que re"resenta un i("ortante
"unto de co("ati&ilidad % $le4i&ilidad. Si a esto uni(os el )ec)o de que
dis"one(os de un (odelo consistente de o&/etos 54(l=O#6 que es
inde"endiente del orien de datos! las o"eraciones de los =ataSets no se
ver+n a$ectadas "or dic)o orien.
La "ersistencia es un conce"to (u% interesante en el (undo del desarrollo. Es
un (ecanis(o "or el cual un co("onente "uede al(acenar su estado 5valores
de varia&les! "ro"iedades! datos...en un (o(ento concreto del tie("o6 en un
so"orte de al(acena(iento $i/o. =e (anera! que cuando es necesario! se
"uede recarar el co("onente tal % co(o qued en una o"eracin anterior.
En un siste(a de tra&a/o O$$CLine co(o el que "lantea A=O .NET! la
"ersistencia es un (ecanis(o $unda(ental. Pode(os cerrar la a"licacin %
(antener "ersistentes todos los =ataSets necesarios! de (anera que al
reiniciarla! nos encontra(os los =ataSets tal % co(o los de/a(os. A)orrando el
tie("o que )u&iera sido necesario "ara recu"erar de nuevo toda esa
in$or(acin del servidor. O"ti(i3ando todav*a (+s el rendi(iento del siste(a
distri&uido.
El $or(ato que e("lea A=O .NET "ara al(acenar su estado es <#L. Puesto
que %a es un est+ndar de la industria! esta "ersistencia nos o$rece las
siuientes cualidades,
- La in$or(acin "uede estar accesi&le "ara cualquier co("onente del siste(a
que entienda <#L.
- Es un $or(ato de te4to "lano! no &inario! que lo )ace co("ati&le con
cualquier co("onente de cualquier "lata$or(a! % recu"era&le en cualquier
circunst
LA CLASE CONNECTION
En los e/e("los con datos que va(os a reali3ar! se )a utili3ado S7L Server
8999 co(o servidor de datos! % $unda(ental(ente! la &ase de datos
Nort)'ind. El "ri(er "aso o&liado en un acceso a datos consiste en
esta&lecer una cone4in con un al(ac>n de datos. Esto lo va(os a conseuir
racias a las clases Connection de A=O .NET! que nos "er(itir+n conectarnos
a un orien de datos 5%a sea una &ase de datos o no6 ! al iual que en A=O
cl+sico e("le+&a(os el o&/eto Connection.
En A=O se "od*a e/ecutar directa(ente una sentencia contra el al(ac>n de
datos! o &ien a&rir un con/unto de reistros 5Recordset6! "ero en A=O .NET no
va(os a reali3ar esta o"eracin con este ti"o de o&/etos.
=e&e(os recordar que e4isten dos i("le(entaciones "ara alunos de los
o&/etos de A=O .NET! cada uno es"ec*$ico del orien de datos con el que nos
va(os a conectar. Esto ocurre con el o&/eto Connection! que tiene dos
versiones! una co(o "roveedor de datos de S7L Server! a trav>s de la clase
S%ste(.=ata.SqlClient.SqlConnection! % otra co(o "roveedor de datos OLE=:!
a trav>s de la clase S%se(.=ata.Ole=&.Ole=&Connection.
Por nor(a eneral! del o&/eto Connection utili3are(os los (>todos O"en5 6 %
Close5 6! "ara a&rir % cerrar cone4iones res"ectiva(ente! con el al(ac>n de
datos adecuado. Aunque tene(os el recolector de &asura que estiona de
$or(a auto(+tica los recursos % o&/etos que no son utili3ados! es
reco(enda&le cerrar las cone4iones de $or(a e4"l*cita utili3ando el (>todo
Close5 6.
Las cone4iones se a&rir+n de $or(a e4"l*cita utili3ando el (>todo O"en56! "ero
ta(&i>n se "uede )acer de $or(a i("l*cita utili3ando un o&/eto =ataAda"ter!
esta "osi&ilidad la vere(os (+s adelante.
Cuando e/ecuta(os el (>todo O"en56 so&re un o&/eto Connection
5SqlConnection o Ole=&Connection6! se a&rir+ la cone4in que se )a indicado
en su "ro"iedad ConnectionStrin! es decir! esta "ro"iedad indicar+ la cadena
de cone4in que se va a utili3ar "ara esta&lecer la cone4in con el al(ac>n de
datos corres"ondiente. El (>todo O"en56 no "osee "ar+(etros.
El constructor de la clase Connection 5al decir clase Connection de $or(a
en>rica nos esta(os re$iriendo en con/unto a las clases SqlConnection %
Ole=&Connection de A=O .NET6 se encuentra so&recarado! % en una de sus
versiones reci&e co(o "ar+(etro una cadena que ser+ la cadena de cone4in
que se a"lique a su "ro"iedad ConnectionStrin.
Si )ace(os uso de la clase SqlConnection! en la cadena de cone4in no
"odre(os es"eci$icar una =SN de O=:C! %a que la cone4in se va a reali3ar
en este caso directa(ente con S7L Server. W si utili3a(os la clase
Ole=&Connection de&e(os es"eci$icar el "roveedor OLE=: que se va a
utili3ar "ara esta&lecer la cone4in! una e4ce"cin es el "roveedor OLE=:
"ara O=:C 5#S=AS7L6! que no "uede ser utili3ado! %a que el "roveedor
OLE=: de .NET no so"orta el "roveedor de O=:C! en este caso de&ere(os
reali3ar la cone4in utili3ando el "roveedor adecuado al al(ac>n de datos. Los
"roveedores OLE=: que son co("ati&les con A=O .NET son,
S7LOLE=:, #icroso$t OLE =: Provider $or S7L Server.
#S=AORA, #icroso$t OLE =: Provider $or Oracle.
#icroso$t.[et.OLE=:.O.9, OLE =: Provider $or #icroso$t [et.
La sinta4is utili3ada "ara indicar la cadena de cone4in! con las
"articularidades "ro"ias de cada "roveedor! vere(os que es (u% si(ilar a la
utili3ada en A=O cl+sico. El Cdio $uente EEM (uestra un e/e("lo de cone4in
con un servidor S7L Server 8999! % su "osterior descone4in! utili3ando un
o&/eto SqlConnection. =e&e(os i("ortar el es"acio de no(&res =ata.SqlClient
"ara "oder utili3ar el o&/eto. Este cdio lo "ode(os asociar a la "ulsacin de
un &otn en un $or(ulario.
I("orts S%ste(.=ata.SqlClient
T....
Tr%
T crear el o&/eto de cone4in
=i( oCone4ion As Ne' SqlConnection56
T "asar la cadena de cone4in
oCone4ion.ConnectionStrin K HserverK5local61H _
Hdata&aseKNort)'ind1uidKsa1"'dK1H
T a&rir cone4in
oCone4ion.O"en56
#essae:o4.S)o'5HConectadoH6
T cerrar cone4in
oCone4ion.Close56
#essae:o4.S)o'5H=esconectadoH6
Catc) oE4ce" As SqlE4ce"tion
T si se "roduce al;n error!
T lo ca"tura(os (ediante el o&/eto
T de e4ce"ciones "articular "ara
T el "roveedor de S7L Server
#essae:o4.S)o'5HError al conectar con datosH _ ControlC)ars.CrL$ _
oE4ce".#essae _ ControlC)ars.CrL$ _
oE4ce".Server6
End Tr%
El Cdio $uente EE` (uestra la (is(a o"eracin "ero usando el o&/eto de
cone4in "ara el "roveedor de OLE=:. O&serve el lector las di$erencias en las
cadenas de cone4in % el o&/eto de e4ce"cin con res"ecto al anterior e/e("lo!
as* co(o el es"acio de no(&res a i("ortar.
I("orts S%ste(.=ata.Ole=&
T....
Tr%
T crear el o&/eto de cone4in
=i( oCone4ion As Ne' Ole=&Connection56
oCone4ion.ConnectionStrin K HProviderKS7LOLE=:1H _
HServerK5local61=ata&aseKNort)'ind1uidKsa1"'dK1H
T a&rir cone4in
oCone4ion.O"en56
#essae:o4.S)o'5HConectadoH6
T cerrar cone4in
oCone4ion.Close56
#essae:o4.S)o'5H=esconectadoH6
Catc) oE4ce" As Ole=&E4ce"tion
T si se "roduce al;n error!
T lo ca"tura(os (ediante el o&/eto
T de e4ce"ciones "articular "ara
T el "roveedor de OLE=:
#essae:o4.S)o'5HError al conectar con datosH _ ControlC)ars.CrL$ _
oE4ce".#essae _ ControlC)ars.CrL$ _
oE4ce".Source566
End Tr%
LA CLASE COMMAND
Esta&lecida una cone4in con un al(ac>n de datos! la siuiente o"eracin
lica consiste en enviarle sentencias "ara reali3ar los distintos ti"os de
o"eraciones que )a&itual(ente reali3a(os con los datos.
Las clases Co((and de A=O .NET ser+n las usare(os "ara reali3ar tales
o"eraciones. SqlCo((and % Ole=&Co((and! son (u% si(ilares al o&/eto
Co((and e4istente en A=O. El o&/eto Co((and nos va a "er(itir e/ecutar
una sentencia S7L o un "rocedi(iento al(acenado so&re la $uente de datos a
la que esta(os accediendo.
A trav>s de un o&/eto Co((and ta(&i>n "odre(os o&tener un con/unto de
resultados del al(ac>n de datos. En este caso! los resultados se "asar+n a
otros o&/etos de A=O .NET! co(o =ataReader o =ataAda"ter1 estos dos
o&/etos los co(entare(os (+s adelante.
Un o&/eto Co((and lo va(os a crear a "artir de una cone4in %a e4istente! %
va a contener una sentencia S7L "ara e/ecutar so&re la cone4in esta&lecida
con el orien de datos.
Entre las "ro"iedades que o$recen los o&/etos SqlCo((and %
Ole=&Co((and! ca&en destacar las siuientes.
Co""!,.TeC*. Contiene una cadena de te4to que va a indicar la sentencia
S7L o "rocedi(iento al(acenado que se va a e/ecutar so&re el orien de los
datos.
Co""!,.T)"eou*. Tie("o de es"era en seundos que se va a a"licar a la
e/ecucin de un o&/eto Co((and. Su valor "or de$ecto es de N9 seundos.
Co""!,.T0Ae. Indica el ti"o de co(ando que se va a e/ecutar contra el
al(ac>n de datos! es decir! indica co(o se de&e inter"retar el valor de la
"ro"iedad Co((adTe4t. Puede tener los siuientes valores,
StoredProcedure! "ara indicar que se trata de un "rocedi(iento al(acenado1
Ta&le=irect se trata de o&tener una ta&la "or su no(&re 5;nica(ente
a"lica&le al o&/eto Ole=&Co((and61 % Te4t que indica que es una sentencia
S7L. EL valor "or de$ecto es Te4t.
Co,,e%*)o,. =evuelve el o&/eto SqlConnection o Ole=&Connection utili3ado
"ara e/ecutar el o&/eto Co((and corres"ondiente.
P!r!"e*ers. Coleccin de "ar+(etros que se "ueden utili3ar "ara e/ecutar el
o&/eto Co((and! esta coleccin se utili3a cuando desea(os e/ecutar
sentencias S7L que )acen uso de "ar+(etros! esta "ro"iedad devuelve un
o&/eto de la clase SqlPara(eterCollection o un o&/eto de la clase
Ole=&Para(eterCollection. Estas colecciones contendr+n o&/etos de la clase
SqlPara(ter % Ole=&Para(eter! res"ectiva(ente! "ara re"resentar a cada
uno de los "ar+(etros utili3ados. Estos "ar+(etros ta(&i>n son utili3ados
"ara e/ecutar "rocedi(ientos al(acenados.
Una ve3 vistas alunas de las "ro"iedades de las clases SqlCo((and %
Ole=&Co((and! va(os a "asar a co(entar &reve(ente los "rinci"ales
(>todos de estas clases.
Cre!*eP!r!"e*er. Crea un "ar+(etro "ara el que des"u>s "odre(os de$inir
una serie de caracter*sticas es"ec*$icas co(o "ueden ser el ti"o de dato! su
valor! ta(aXo! etc. =evolver+ un o&/eto de la clase SqlPara(eter u
Ole=&Para(eter.
ECe%u*eNo,Quer0. E/ecuta la sentencia S7L de$inida en la "ro"iedad
Co(andTe4t contra la cone4in de$inida en la "ro"iedad Connection. La
sentencia a e/ecutar de&e ser de un ti"o que no devuelva un con/unto de
reistros! "or e/e("lo U"date! =elete o Insert. Este (>todo devuelve un
entero indicando el n;(ero de $ilas que se )an visto a$ectadas "or la
e/ecucin del o&/eto Co((and.
ECe%u*eRe!.er. E/ecuta la sentencia S7L de$inida en la "ro"iedad
Co(andTe4t contra la cone4in de$inida en la "ro"iedad Connection. En este
caso! la sentencia s* devolver+ un con/unto de reistros. El resultado de la
e/ecucin de este ser+ un o&/eto de la clase
Sql=ataReaderLOle=&=ataReader! que nos va a "er(itir leer % recorrer los
resultados devueltos "or la e/ecucin del o&/eto Co((and corres"ondiente.
ECe%u*eS%!+!r. Este (>todo se utili3a cuando desea(os o&tener la "ri(era
colu(na de la "ri(era $ila del con/unto de reistros! el resto de datos no se
tendr+n en cuenta. La utili3acin de este (>todo tiene sentido cuando
esta(os e/ecutando una sentencia S7L del ti"o Select Count5U6. Este (>todo
devuelve un o&/eto de la clase en>rica O&/ect.
PreA!re. Este (>todo constru%e una versin co("ilada del o&/eto Co((and
dentro del al(ac>n de datos.
A continuacin (ostrare(os alunos e/e("los de uso de o&/etos Co((and.
El Cdio $uente ilustra la insercin de un reistro utili3ando un o&/eto
SqlCo((and. En "ri(er luar utili3a(os un constructor de la clase! que reci&e
co(o "ar+(etro la sentencia a e/ecutar % la cone4in. Co(o va(os a e/ecutar
una sentencia que no "roduce un con/unto de resultados! e("leare(os el
(>todo E4ecuteNon7uer%5 6. O&serve ta(&i>n el lector en este e/e("lo! que la
cone4in slo "er(anece a&ierta en el (o(ento de e/ecutar el co(ando1 esta
es la t>cnica reco(enda&le que de&e(os utili3ar "ara todas las o"eraciones
con datos, (antener a&ierta la cone4in el (enor tie("o "osi&le.
T crear cone4in
=i( oCone4ion As Ne' SqlConnection56
oCone4ion.ConnectionStrin K HServerK5local61H _
H=ata&aseKGestion1uidKsa1"'dK1H
T crear sentencia S7L
=i( sS7L As Strin
sS7L K HINSERT INTO Clientes 5I=Cliente!No(&re!FInreso6 H _
H2ALUES5?9!TAl$redoT!T?MLQL8998T6H
T crear co(ando
=i( oCo(ando As Ne' SqlCo((and5sS7L! oCone4ion6
=i( iResultado As Inteer
oCone4ion.O"en56 T a&rir cone4in
iResultado K oCo(ando.E4ecuteNon7uer%56 T e/ecutar co(ando
oCone4ion.Close56 T cerrar cone4in
#essae:o4.S)o'5HReistros aXadidos,H _ iResultado6
En el Cdio $uente Ea? reali3a(os ta(&i>n la insercin con un SqlCo((and!
"ero utili3ando en este caso "ar+(etros. En la cadena que tiene la sentencia
S7L indicare(os los "ar+(etros con el $or(ato ^VNo(&rePar+(etrob.
Para crear cada uno de los "ar+(etros utili3are(os la clase SqlPara(eter!
(ientras que "ara aXadir los "ar+(etros usare(os la coleccin Par+(eters del
o&/eto SqlCo((and % su (>todo Add5 6.
Res"ecto a la creacin de los "ar+(etros! "ode(os o&servar que es (u%
$le4i&le! %a que co(o ve(os en este e/e("lo! cada uno de ellos se crea de un
(odo distinto! es"eci$icando el no(&re! ti"o de dato % valor.
T crear cone4in
=i( oCone4ion As Ne' SqlConnection56
oCone4ion.ConnectionStrin K HServerK5local61H _
H=ata&aseKGestion1uidKsa1"'dK1H
T crear sentencia S7L "ara insertar un reistro con
T "ar+(etros1 indica(os el no(&re del "ar+(etro con
T VNo(&rePar+(etro
=i( sS7L As Strin
sS7L K HINSERT INTO Clientes 5I=Cliente!No(&re!FInreso6 H _
H2ALUES5VCodCli!VNo(&re!VFec)a6H
T crear co(ando
=i( oCo(ando As Ne' SqlCo((and5sS7L! oCone4ion6
T aXadir "ar+(etros al co(ando,
T "ar+(etro "ri(er ca("o
oCo(ando.Para(eters.Add5Ne' SqlPara(eter5HVCodCliH!
Sql=&T%"e.Int66
oCo(ando.Para(eters5HVCodCliH6.2alue K 8E
T "ar+(etro seundo ca("o
oCo(ando.Para(eters.Add5Ne' SqlPara(eter5HVNo(&reH! HRaquelH66
T "ar+(etro tercer ca("o
=i( oPara(etro As Ne' SqlPara(eter56
oPara(etro.Para(eterNa(e K HVFec)aH
oPara(etro.Sql=&T%"e K Sql=&T%"e.=ateTi(e
oPara(etro.2alue K H8EL?9L8998H
oCo(ando.Para(eters.Add5oPara(etro6
=i( iResultado As Inteer
oCone4ion.O"en56 T a&rir cone4in
iResultado K oCo(ando.E4ecuteNon7uer%56 T e/ecutar co(ando
oCone4ion.Close56 T cerrar cone4in
#essae:o4.S)o'5HReistros aXadidos,H _ iResultado6
Si e("lea(os un o&/eto Ole=&Co((and! la sinta4is de la sentencia S7L
ca(&ia! %a que los "ar+(etros de&ere(os indicarlos co(o )ac*a(os en A=O
cl+sico! utili3ando el car+cter ^cb. 2ea(os un e/e("lo en el Cdio $uente .
T crear el o&/eto de cone4in
=i( oCone4ion As Ne' Ole=&Connection56
oCone4ion.ConnectionStrin K HProviderKS7LOLE=:1H _
HServerK5local61=ata&aseKGestion1uidKsa1"'dK1H
T crear sentencia S7L "ara (odi$icar un reistro con
T "ar+(etros1 indica(os el "ar+(etro con c
=i( sS7L As Strin
sS7L K HUP=ATE Clientes SET No(&re K c H _ H0AERE I=Cliente K 8H
T crear co(ando
=i( oCo(ando As Ne' Ole=&Co((and5sS7L! oCone4ion6
oCo(ando.Para(eters.Add5Ne' Ole=&Para(eter5HNo(&reCliH!
Ole=&T%"e.2arC)ar! E966
oCo(ando.Para(eters5HNo(&reCliH6.2alue K H=avidH
=i( iResultado As Inteer
oCone4ion.O"en56 T a&rir cone4in
iResultado K oCo(ando.E4ecuteNon7uer%56 T e/ecutar co(ando
oCone4ion.Close56 T cerrar cone4in
#essae:o4.S)o'5HReistros (odi$icados,H _ iResultado6
En el caso de que necesite(os e/ecutar un "rocedi(iento al(acenado!
de&e(os indicarlo (ediante las "ro"iedades Co((andT%"e % Co((andTe4t
del o&/eto Co((and que este(os utili3ando. En la "ri(era esta&lece(os el
ti"o de co(ando 5"rocedi(iento al(acenado6 seleccionando el valor de la
enu(eracin asociada a la "ro"iedad1 % en la seunda asina(os una cadena
con el no(&re del "rocedi(iento al(acenado. El Cdio $uente EaN (uestra un
e/e("lo! en el que "ode(os co("ro&ar que )e(os utili3ado un constructor de
SqlCo((and sin "ar+(etros! "or lo que el o&/eto Connection lo asina(os
des"u>s (ediante la "ro"iedad Connection.
T crear cone4in
=i( oCone4ion As Ne' SqlConnection56
oCone4ion.ConnectionStrin K HServerK5local61H _
H=ata&aseKGestion1uidKsa1"'dK1H
T crear co(ando "ara e/ecutar "rocedi(iento al(acenado
T que &orra un reistro
=i( oCo(ando As Ne' SqlCo((and56
oCo(ando.Connection K oCone4ion
oCo(ando.Co((andT%"e K Co((andT%"e.StoredProcedure
oCo(ando.Co((andTe4t K H:orraCliH
T aXadir "ar+(etro al co(ando
oCo(ando.Para(eters.Add5Ne' SqlPara(eter5HVI=ClienteH!
Sql=&T%"e.Int66
oCo(ando.Para(eters5HVI=ClienteH6.2alue K 8E
=i( iResultado As Inteer
oCone4ion.O"en56 T a&rir cone4in
iResultado K oCo(ando.E4ecuteNon7uer%56 T e/ecutar co(ando
oCone4ion.Close56 T cerrar cone4in
#essae:o4.S)o'5HReistros &orrados,H _ iResultado6
Para o&tener el resultado de una $uncin del lenua/e S7L! "or e/e("lo
Count5 6! e("leare(os el (>todo E4ecuteScalar5 6 del o&/eto Co((and. En el
Cdio $uente EaO! la e/ecucin de este (>todo nos devuelve el n;(ero de
$ilas de una ta&la de la &ase de datos! que (ostra(os en un (ensa/e.
T crear cone4in
=i( oCone4ion As Ne' SqlConnection56
oCone4ion.ConnectionStrin K HServerK5local61H _
H=ata&aseKGestion1uidKsa1"'dK1H
T crear co(ando escalar
=i( sS7L As Strin
sS7L K HSELECT COUNT5U6 FRO# ClientesH
T crear co(ando
=i( oCo(ando As Ne' SqlCo((and5sS7L! oCone4ion6
=i( iResultado As Inteer
oCone4ion.O"en56 T a&rir cone4in
iResultado K oCo(ando.E4ecuteScalar56 T e/ecutar co(ando
oCone4ion.Close56 T cerrar cone4in
#essae:o4.S)o'5HN;(ero de reistros de clientes,H _ iResultado6
DATASET
=iseXe el siuiente $or(ulario
NO TIPADO3
Private Su& :utton?JClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles :utton?.Clic.
T No ti"ado
=i( 'cone4ion As Ne' SqlClient.SqlConnection5H=ata
SourceK5local61interated
securit%KSSPI1initial cataloKNort)'indH6
=i( 'S7L=A? As Ne' SqlClient.Sql=ataAda"ter5HSelect U $ro(
custo(ersH! 'cone4ion6
=i( '=ataset As Ne' =ataSet
'S7L=A?.Fill5'=ataset! Hcusto(ersH6
=i( '$ila As =ataRo'
For Eac) '$ila In '=ataset.Ta&les5HCusto(ersH6.Ro's
List:o4?.Ite(s.Add5'$ila5HCo("an%Na(eH66
Ne4t
End Su&
TIPADO3
Private Su& :utton8JClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles :utton8.Clic.
=i( 'cone4ion As Ne' SqlClient.SqlConnection5H=ata
SourceK5local61interated
securit%KSSPI1initial cataloKNort)'indH6
=i( 'S7L=A? As Ne' SqlClient.Sql=ataAda"ter5HSelect U $ro(
custo(ersH! 'cone4ion6
=i( '=ataset As Ne' =sCusto(ers
'S7L=A?.Fill5'=ataset! HCusto(ersH6
=i( '$ila As =sCusto(ers.Custo(ersRo'
For Eac) '$ila In '=ataset.Custo(ers
List:o4?.Ite(s.Add5'$ila.Co("an%Na(e6
Ne4t
End Su&
CONCATENACIN
=iseXe el siuiente $or(ulario
Private Su& :utton?JClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles :utton?.Clic.
=i( cnn As Ne' SqlClient.SqlConnection5H=ata SourceK5local61interated
securit%KSSPI1initial cataloKNort)'indH6
=i( da As Ne' SqlClient.Sql=ataAda"ter5He4ec s"Jconcatenacion TH P
Te4t:o4?.Te4t P HTH! cnn6
=i( ds As Ne' =ataSet
da.Fill5ds! HconcatenacionH6
=i( '$ila As =ataRo'
For Eac) '$ila In ds.Ta&les5HconcatenacionH6.Ro's
List:o4?.Ite(s.Add5'$ila5HNo(&re Co("letoH6 P H H P
Tri(5'$ila5HReion=escri"tionH66 P H H P '$ila5He(ailH66
Ne4t
End Su&
PROCEDIMENTO ALMACENADO
CREATE PROCE=URE s"Jconcatenacion
Vdesc nvarc)ar5E96
AS
SELECT =ISTINCT LastNa(e P T! T P FirstNa(e as TNo(&re Co("letoT!
Reion=escri"tion! SU:STRING5FirstNa(e!?!?6 P LastNa(e P
HVcontinental.edu."eH as e(ail
FRO# E("lo%ees e
INNER [OIN E("lo%eeTerritories et ON e.E("lo%eeI= K et.E("lo%eeI=
INNER [OIN Territories t ON t.Territor%I= K et.Territor%I=
INNER [OIN Reion r ON t.ReionI= K r.ReionI=
0AERE Reion=escri"tionKVdesc
OR=ER :W Reion=escri"tion! LastNa(e P T! T P FirstNa(e
ADO.NET CON CLASES
=iseXe el siuiente $or(ulario
I("orts S%ste(.=ata.SqlClient
Pu&lic Class For(?
In)erits S%ste(.0indo's.For(s.For(
Protected Const cone4ion As Strin K J
HServerK5local61H _ J
H=ata:aseKNort)'ind1H _ J
HInterated Securit%KSSPIH
=i( clientes As Ne' ClienteA=ONET
Private Su& For(?JLoad5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles #%:ase.Load
0it) #e.lstCusto(ers
.=is"la%#e(&er K HCo("an%Na(eH
.2alue#e(&er K HCusto(erI=H
.=ataSource K
clientes.CrearClientes5cone4ion6.Ta&les5HClientesH6.=e$ault2ie'56
.SelectedInde4 K 9
End 0it)
End Su&
Private Su& :utton?JClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles :utton?.Clic.

clientes.Incluir5HaH! H&H! HcH! HdH! HeH! H$H! HaH! H)H! cone4ion6
0it) #e.LstCusto(ers
.=is"la%#e(&er K HCo("an%Na(eH
.2alue#e(&er K HCusto(erI=H
.=ataSource K
clientes.CrearClientes5cone4ion6.Ta&les5HClientesH6.=e$ault2ie'56
.SelectedInde4 K 9
End 0it)
End Su&
End Class
CLASE CLIENTEADONET
I("orts S%ste(.=ata.SqlClient
Pu&lic Class ClienteA=ONET
Pu&lic Function CrearClientes5:%2al cone4ion As Strin6 As =ataSet
Tr%
=i( conn As Ne' SqlConnection5cone4ion6
=i( sql As Strin K HSelect Custo(erI=! Co("an%Na(e FRO#
Custo(ers OR=ER :W Co("an%Na(eH
=i( dsCusto(ers As Ne' =ataSet
=i( daCusto(ers As Ne' Sql=ataAda"ter5sql! conn6
daCusto(ers.Fill5dsCusto(ers! HClientesH6
Return dsCusto(ers
Catc) err As SqlE4ce"tion
T)ro' err
Catc) err As E4ce"tion
T)ro' err
End Tr%
End Function
Pu&lic Su& Incluir5:%2al E("resaI= As Strin! :%2al E("resa As Strin!
:%2al Contacto As Strin! J
:%2al =ireccion As Strin! :%2al Ciudad As Strin! :%2al Tele$ono As Strin!
:%2al Fa4 As Strin! :%2al Pais As Strin! :%2al cone4ion As Strin6
Tr%
=i( conn As Ne' SqlConnection5cone4ion6
=i( c(d As SqlCo((and
=i( sql:uilder As Ne' S%ste(.Te4t.Strin:uilder
0it) sql:uilder
.A""end5HINSERT INTO Custo(ers H6
.A""end5H5Custo(erI=! Co("an%Na(e! ContactNa(e! Address! H6
.A""end5HCit%! P)one! Fa4! Countr%6 H6
.A""end5H 2ALUES 5TH6
.A""end5E("resaI= _ HT!TH6
.A""end5E("resa _ HT!TH6
.A""end5Contacto _ HT!TH6
.A""end5=ireccion _ HT!TH6
.A""end5Ciudad _ HT!TH6
.A""end5Tele$ono _ HT!TH6
.A""end5Fa4 _ HT!TH6
.A""end5Pais _ HT6H6
End 0it)
conn K Ne' SqlConnection5cone4ion6
conn.O"en56
c(d K Ne' SqlCo((and5sql:uilder.ToStrin! conn6
c(d.E4ecuteNon7uer%56
conn.Close56
c(d.=is"ose56
conn.=is"ose56
Catc) err As E4ce"tion
#essae:o4.S)o'5err.#essae6
End Tr%
End Su&
End Class
ADO.NET CON CLASES E;ERCICIO 4
CREATE PROCE=URE s"Jinsertarcliente
Vid as c)ar5E6!
VE("resa as nvarc)ar5O96!
VContacto as nvarc)ar5O96!
V=ireccion as nvarc)ar5O96!
Vciudad as nvarc)ar5O96!
VTele$ono as nvarc)ar5O96!
VFa4 as nvarc)ar5O96!
VPais as nvarc)ar5O96
as
INSERT INTO Custo(ers 5Custo(erI=! Co("an%Na(e! ContactNa(e!
Address!Cit%! P)one! Fa4! Countr%6
2ALUES
5Vid!VE("resa!VContacto!V=ireccion!Vciudad!VTele$ono!VFa4!VPais6
Pu&lic Su& Incluir5:%2al E("resaI= As Strin! :%2al E("resa As Strin! :%2al
Contacto As Strin! J
:%2al =ireccion As Strin! :%2al Ciudad As Strin! :%2al Tele$ono As Strin!
J
:%2al Fa4 As Strin! :%2al Pais As Strin! :%2al cone4ion As Strin6
Tr%
=i( conn As Ne' SqlConnection5cone4ion6
=i( c(d As SqlCo((and
conn K Ne' SqlConnection5cone4ion6
conn.O"en56
c(d K Ne' SqlCo((and5He4ec s"Jinsertarcliente H _ HTH _ E("resaI=
_ HT!TH _ E("resa _ HT!TH _ Contacto _ HT!TH _ =ireccion _ HT!TH _ Ciudad _ HT!TH _
Tele$ono _ HT!TH _ Fa4 _ HT!TH _ Pais _ HTH! conn6
c(d.E4ecuteNon7uer%56
conn.Close56
c(d.=is"ose56
conn.=is"ose56
Catc) err As E4ce"tion
#essae:o4.S)o'5err.#essae6
End Tr%
End Su&
End Class
ADO.NET CON CLASES E;ERCICIO 5
Pu&lic Class #icliente)i/o
In)erits #icliente
Pu&lic Overrides Function CrearClientes5:%2al cone4ion As Strin6 As
=ataSet
Tr%
=i( conn As Ne' SqlConnection5cone4ion6
=i( sql As Strin K HSelect U FRO# e("lo%eesH
=i( dsCusto(ers As Ne' =ataSet
=i( daCusto(ers As Ne' Sql=ataAda"ter5sql! conn6
conn.O"en56
daCusto(ers.Fill5dsCusto(ers! HClientesH6
conn.Close56
Return dsCusto(ers
Catc) err As SqlE4ce"tion
#essae:o4.S)o'5err.#essae6
Catc) err As E4ce"tion
#essae:o4.S)o'5err.#essae6
End Tr%
End Function
End Class
Private Su& For(?JLoad5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles #%:ase.Load
0it) #e.List:o4?
.=is"la%#e(&er K HCo("an%Na(eH
.2alue#e(&er K HCusto(erI=H
.=ataSource K
clientes.CrearClientes5cone4ion6.Ta&les5HClientesH6.=e$ault2ie'56
.SelectedInde4 K 9
End 0it)
0it) #e.List:o48
.=is"la%#e(&er K HE("lo%eeI=H
.=ataSource K )i/o.CrearClientes5cone4ion6.Ta&les5HClientesH6
.SelectedInde4 K 9
End 0it)
=ataGrid?.=ataSource K )i/o.CrearClientes5cone4ion6.Ta&les5HClientesH6
End Su&
DESARROLLO DE CASO PRACTICO DE
FACTURACIN
=iseXe el siuiente $or(ulario
Private Su& FacturaJLoad5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles #%:ase.Load
=i( i As Inteer
conecta5Hselect idcliente $ro( ClientesH! HclientesH6
For i K 9 To ds.Ta&les5HclientesH6.Ro's.Count C ?
c&ocodcliente.Ite(s.Add5ds.Ta&les5HclientesH6.Ro's5i6.Ite(5HidclienteH66
Ne4t
=i( / As Inteer
conecta5Hselect idarticulo $ro( ArticulosH! HarticulosH6
For / K 9 To ds.Ta&les5HarticulosH6.Ro's.Count C ?

#e.c&ocodarticulo.Ite(s.Add5ds.Ta&les5HarticulosH6.Ro's5/6.Ite(5HidarticuloH66
Ne4t
=i( . As Inteer
conecta5Hselect U $ro( e("leadoH! He("leadoH6
For . K 9 To ds.Ta&les5He("leadoH6.Ro's.Count C ?

#e.c&ocode("leado.Ite(s.Add5ds.Ta&les5He("leadoH6.Ro's5.6.Ite(5Hide("lea
doH66
Ne4t
Private Su& c&ocodclienteJSelectedInde4C)aned5:%2al sender As
S%ste(.O&/ect! :%2al e As S%ste(.EventArs6 Aandles
c&ocodcliente.SelectedInde4C)aned
conecta5Hselect U $ro( ClientesH! HClientesH6
=i( cod As Strin
cod K c&ocodcliente.SelectedInde4
t4tno(cliente.Te4t K ds.Ta&les5HClientesH6.Ro's5cod65?6
t4tdircliente.Te4t K ds.Ta&les5HClientesH6.Ro's5cod6586
End Su&
Private Su& c&ocodarticuloJSelectedInde4C)aned5:%2al sender As
S%ste(.O&/ect! :%2al e As S%ste(.EventArs6 Aandles
c&ocodarticulo.SelectedInde4C)aned
conecta5Hselect U $ro( ArticulosH! HArticulosH6
=i( cod? As Strin
cod? K c&ocodarticulo.SelectedInde4
t4tno(articulo.Te4t K ds.Ta&les5HArticulosH6.Ro's5cod?6586
t4t"rearticulo.Te4t K ds.Ta&les5HarticulosH6.Ro's5cod?65O6
End Su&
Private Su& &tnarearJClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles &tnarear.Clic.
I$ #e.c&ocodarticulo.Te4t K HH Or #e.t4truc.Te4t K HH Or
#e.c&ocode("leado.Te4t K HH Or #e.c&ocodcliente.Te4t K HH T)en
#s:o45Hselecione todos los ca("os de la $actura "ara "roceder a
arearH6
Else
0it) #e.lvdetalles
0it) .Ite(s.Add5.Ite(s.Count P ?6
.Su&Ite(s.Add5c&ocodarticulo.Te4t6
.Su&Ite(s.Add5t4tno(articulo.Te4t6
.Su&Ite(s.Add5t4t"rearticulo.Te4t6
.Su&Ite(s.Add5nudcantidad.Te4t6
.Su&Ite(s.Add52al5nudcantidad.Te4t6 U 2al5t4t"rearticulo.Te4t66
End 0it)
#e.&tra&ar.Ena&led K True
End 0it)
End I$
End Su&
Private Su& &tra&arJClic.5:%2al sender As S%ste(.O&/ect! :%2al e As
S%ste(.EventArs6 Aandles &tra&ar.Clic.
=i( $N As Ne' For(N56
=i( list As List2ie'Ite(
Tr%
I$ 2al5t4ttotal$actura.Te4t6 K 9 T)en
#s:o45Harear a la lista antes de "roceder a ra&arH6
Else
conecta5Hinsert into
$acturas5id$actura!ruc!idcliente!$ec)a!ide("leado!total!iv!t"ao6 values5TH _
t4tnu($actura.Te4t _ HT!TH _ t4truc.Te4t _ HT!TH _ c&ocodcliente.Te4t _ HT!TH _
#icroso$t.2isual:asic.=ate2alue5dt"$ec)a.2alue6 _ HT!TH _ c&ocode("leado.Te4t
_ HT!TH _ t4ttotal.Te4t _ HT!TH _ t4tiv.Te4t _ HT!TH _ t4ttotal$actura.Te4t _ HT6H!
H$acturasH6
For Eac) list In lvdetalles.Ite(s
conecta5Hinsert into
detalles$act5id$actura!idarticulo!no(&re!"unitario!cantidad!stotal6 values5TH _
#e.t4tnu($actura.Te4t _ HT!TH _ list.Su&Ite(s5?6.Te4t _ HT!TH _
list.Su&Ite(s586.Te4t _ HT!TH _ list.Su&Ite(s5N6.Te4t _ HT!TH _ list.Su&Ite(s5O6.Te4t
_ HT!TH _ list.Su&Ite(s5E6.Te4t _ HT6H! Hdetalles$actH6
Ne4t
lvdetalles.Ite(s.Clear56
#e.&tra&ar.Ena&led K False
Call li("iar56
End I$
Catc) 4 As SqlE4ce"tion
#s:o454.#essae6
End Tr%
lvdetalles.Ite(s.Clear56
End Su&
CLASE
Pu&lic Su& conecta5:%2al sql As Strin! :%2al ta&la As Strin6
Tr%
cn K Ne' Ole=&Connection5H"roviderK(icroso$t./et.oled&.O.91data
sourceKH _ A""lication.Startu"Pat) _ H\ventas.(d&H6
c( K Ne' Ole=&Co((and5sql! cn6
da K Ne' Ole=&=ataAda"ter5c(6
c& K Ne' Ole=&Co((and:uilder5da6
ds K Ne' =ata.=ataSet
cn.O"en56
da.Fill5ds! ta&la6
cn.Close56
cn.=is"ose56
Tcn K Ne' SqlConnection5Hdata sourceK5local61initial
cataloKventas1interated securit%KtrueH6
Tc( K Ne' SqlCo((and5sql! cn6
Tda K Ne' Sql=ataAda"ter5c(6
Tc& K Ne' SqlCo((and:uilder5da6
Tds K Ne' =ata.=ataSet
Tcn.O"en56
Tda.Fill5ds! ta&la6
Tcn.Close56
Tcn.=is"ose56
Catc) e4 As E4ce"tion
#essae:o4.S)o'5e4.#essae6
End Tr%
End Su&
MODELO M'LTIDIMENSIONAL D MODELO ENTIDAD/
RELACIN
Para construir un =ata0are)ouse "ri(ero se de&e tener claro que e4iste una
di$erencia entre la Estructura de la In$or(acin % la Se(+ntica de la
In$or(acin! % que esta ;lti(a es (uc)o (+s di$*cil de a&arcar % que ta(&i>n
es "recisa(ente con ella con la que se tra&a/a en la construccin de un
=ata0are)ouse. R0OL``S
Aqu* se encuentra la "rinci"al di$erencia entre los Siste(as O"eracionales % el
=ata 0are)ouse % cada uno de ellos es sostenido "or un (odelo de datos
di$erente. Los siste(as O"eracionales se sustentan en el #odelo Entidad
Relacin 5#ER6 % =ata 0are)ouse tra&a/a con el #odelo #ultidi(ensional.
/ C!r!%*erEs*)%!s .e+ MER.
a. #ane/a la redundancia $uera de los datos. Por lo tanto reali3ar un
ca(&io en la
&ase sini$ica tocarla en un solo luar.
&. =ivide los datos en entidades! las que son re"resentadas co(o Ta&las
en una &ase de =atos.
c. Los #ER crecen $+cil(ente! )aci>ndose (+s % (+s co("le/os.
d. Se "uede a"reciar la e4istencia de (uc)os ca(inos "ara ir de una
Ta&la a otra.
Ser*a natural "ensar que al tener diversos ca(inos "ara llear desde
una ta&la a otra! cualquiera de ellos entrear*a el (is(o resultado! "ero
la(enta&le(ente esto no sie("re sucede as*.
e. El diara(a se visuali3a si(>trico! donde todas las ta&las se "arecen!
sin distinuir
a "riori la i("ortancia de unas res"ecto a otras. No es $+cil de entender
tanto "ara usuarios co(o "ara los diseXadores.
/ C!r!%*erEs*)%!s .e+ Mo.e+o Mu+*).)"e,s)o,!+.
En eneral! la estructura &+sica de un =ata 0are)ouse "ara el #odelo
#ultidi(ensional est+ de$inida "or dos ele(entos, Esque(as % Ta&las.
a. Ta&las =ata0are)ouse, co(o cualquier :ase de =atos Relacional! un
=ata 0are)ouse se co("one de Ta&las. Aa% dos ti"os &+sicos de
Ta&las en el #odelo #ultidi(ensional,
C Ta&las de Aec)os, contienen los valores de las (edidas de neocios!
"or e/e("lo, ventas "ro(edio en dlares! n;(ero de unidades
vendidas! etc.
C Ta&las =i(ensiones, contienen el detalle de los valores que se
encuentran asociados a la ta&la de )ec)os.
&. Esque(as =ata0are)ouse, la coleccin de ta&las en el =ata
0are)ouse se conoce co(o Esque(a. Los Esque(as caen dentro de
dos cateor*as &+sicas, Esque(as Estrellas % Esque(as Sno'$la.e.
R0OL``S
Otros autores se re$ieren a las caracter*sticas de estas :ases de =atos de la
siuiente $or(a,
C Para la Revista Electrnica Inenier*a In$or(+tica ,
Puede considerarse que el #odelo Relacional en el cual se &asa OLTP
5Procesa(iento Transaccional en L*nea6! tiene co(o o&/etivo uardar la
interidad de la in$or(acin necesaria "ara o"erar un neocio de la (anera
(+s e$iciente. Sin e(&aro! este #odelo no corres"onde a la $or(a co(o el
usuario "erci&e la o"eracin de un Neocio. R0OL``S
Cre!%)B, .e+ Cu$o Mu+*).)"e,s)o,!+.
Los Cu&os son su&con/untos de datos del al(ac>n de datos! orani3ados %
resu(idos en estructuras (ultidi(ensionales % es el o&/eto OLAP &+sico.
En las :ases de =atos #ultidi(ensionales se usan Cu&os de =atos!
Ai"ercu&os de =atos o #ulticu&os de =atos! todas estas estructuras tienen la
"ro"iedad que caracteri3a a estas :ases de =atos.Los res;(enes de =atos!
"recalculados se;n $actores e("resariales seleccionados! "ro"orcionan el
(ecanis(o "ara o&tener tie("os de res"uesta cortos % uni$or(es "ara las
consultas co("le/as.
Para de$inir un Cu&o! seleccione una Ta&la de Aec)os e identi$ique las
#edidas 5colu(nas nu(>ricas de inter>s "ara los usuarios del Cu&o6 en la
Ta&la de Aec)os. A continuacin! seleccione las di(ensiones! cada una de las
cuales de&e estar co("uesta de una o (+s colu(nas e4tra*das de otra ta&la.
Aunque el t>r(ino Cubo suiere tres di(ensiones! un Cu&o "uede tener )asta
aO di(ensiones! incluida la =i(ensin #edidas.
En la siuiente $iura se "uede a"reciar co(o cada "unto dentro del Cu&o es
una interseccin de coordenadas de$inidas "or los lados de >ste
5=i(ensiones6. E/e("los de (edidas son, unidades "roducidas! unidades
vendidas! costo de unidades "roducidas! anancias5d6 de unidades vendidas!
etc. RGON`aS
Fig. 1. Cubo Dimensional para la combinacin de Producto, Mercado Tiempo.
Los diseXadores de "roductos #ultidi(ensionales 5OLAP! :ase de =atos6
utili3an varias estrateias "ara evitar la dis"ersin de los datos % "oder
aru"arlos! "or lo que se "uede escoer una de las dos "rinci"ales (aneras de
"resentar datos al usuario, A%"ercu&os o #ulticu&os1 estas o"ciones no son
visuales 5cara al usuario6 sino que condicionan c(o los datos van a ser
"rocesados % cu+ntos c+lculos se van a reali3ar.

Вам также может понравиться