Está en la página 1de 30

Acceso a Batos en C#

lng. Ale[andro Caldern


Intiouuccion a AB0.NET
AuC .nL1 es un con[unLo de lnLerfaces, clases, esLrucLuras y
enumeraclones que permlLen el acceso a daLos desde la
plaLaforma .nL1 de Mlcroso. Ls una evolucln lglca de la Al
Lradlclonal de Mlcroso conoclda como AuC (Acuvex uaLa
Cb[ecL).

AuC .nL1 permlLe un modo de acceso desconecLado a los daLos,
los cuales pueden provenlr de muluples fuenLes de daLos, con
dlferenLes arqulLecLuras de almacenamlenLo.

AuC .nL1 soporLa un modelo compleLo de programacln y
adapLacln basado en el esLndar xML.
Namespaces ue AB0 .NET
!"#$%&'()$): Clases generlcas de AuC .nL1. lnLegra la gran mayorla
de clases que hablllLan el acceso a los daLos de la arqulLecLura .nL1.
!"#$%&'()$)'!*+,+-%.$: Clases del proveedor de daLos de SCL Server
en su versln 7.0 y superlor.
!"#$%&'()$)'/+%(0: Clases del proveedor de daLos de Cleu8.
ermlLe el acceso a proveedores .nL1 que Lraba[an dlrecLamenLe
conLra conLroladores basados en Acuvex de Mlcroso.
!"#$%&'()$)'!*+1"2%#: uenlcln de los upos de daLos de SCL
Server. roporclona la encapsulacln en clases de Lodos los upos de
daLos nauvos de SCL Server y sus funclones de mane[o de errores,
a[usLe y conversln de upos.
!"#$%&'()$)',3&&3.: Clases base, reuullzables de AuC .nL1.
roporclona la coleccln de clases necesarlas para acceder a una
fuenLe de daLos.
!"#$%&'()$)'4.$%5.)+: lnLegra el con[unLo de clases lnLernas de las
que se componen los proveedores de daLos.
Clases ue !"#$%&'()$)
uenLro del espaclo de nombres !"#$%&'()$) enconLramos las
slgulenLes clases comparudas que consuLuyen el e[e cenLral de
AuC .nL1:

()$)!%$: Almacen de daLos por excelencla de AuC .nL1.
8epresenLa una base de daLos desconecLada del proveedor de
daLos. Almacena Lablas y sus relaclones.
()$)1)0+%: un conLenedor de daLos. LsLrucLurado como un
con[unLo de las (()$)*+,) y columnas (()$)-+./&0).
()$)637: 8eglsLro que almacena n valores. 8epresenLacln
en AuC. nL1 de una la/Lupla de una Labla de la base de
daLos.
()$),3+8&.: Conuene la denlcln de una columna.
MeLadaLos y daLos asoclados a su domlnlo.
()$)6%+)93.: Lnlace enLre dos o ms columnas lguales de
dos o ms Lablas.
,3.#$5)-.$: 8eglas de valldacln de las columnas de una Labla.
()$),3+8&.:)22-.;: vlnculo lglco exlsLenLe enLre una
columna de un ob[eLo del ()$)!%$ y la columna nslca de la
Labla de la base de daLos.
()$)1)0+%:)22-.;: vlnculo lglco exlsLenLe enLre una Labla
del ()$)!%$ y la Labla nslca de la base de daLos.

Adems de esLas clases, exlsLe oLro grupo de clases especlcas
de un proveedor de daLos. 1lenen una slnLaxls con el formaLo
xxxClase, donde xxx" es un pre[o que deLermlna el upo de
plaLaforma de conexln a daLos, como ser !"#$%&'()$)'!1.-.2%0$
y !"#$%&'()$)'3.%(4.
Las Clases +,--%.$/,-
Ll prlmer paso obllgado en un acceso a daLos conslsLe en
esLablecer una conexln con un almacen de daLos. LsLo se
conslgue a Lraves de las clases -+00%56+0 de AuC .nL1, las
cuales permlLen la conexln a un orlgen de daLos (ya sea una
base de daLos o no). Ll ob[eLo -+00%56+0 uene dos verslones:

!"#$%&'()$)'!1.-.2%0$'!1.-+00%56+0: ara un proveedor de
daLos de SCL Server.

!"#$%&'()$)'3.%(4'3.%(4-+00%56+0: ara un proveedor de
daLos CLLu8.
Ln un ob[eLo de upo -+00%56+0 se uullzan los meLodos 37%089 y
-.+#%89 para abrlr y cerrar conexlones respecuvamenLe, con el
almacen de daLos adecuado. Cuando e[ecuLamos el meLodo
37%089 sobre un ob[eLo -+00%56+0, se abrlr la conexln que se
ha lndlcado en su propledad -+00%56+0!$:20;, es declr, esLa
propledad lndlcar la cadena de conexln que se va a uullzar
para esLablecer la conexln con el almacen de daLos
correspondlenLe.

Ll consLrucLor de las clases -+00%56+0 se encuenLra
sobrecargado, en una de sus verslones reclbe como parmeLro
una cadena de LexLo, la cual ser la cadena de conexln que se
aslgnar a la propledad -+00%56+0!$:20;.
Ejemplo
Las Clases +,&&)-0
Cuando ya hemos esLablecldo una conexln con un almacen de
daLos, la slgulenLe operacln lglca conslsLe en envlarle
senLenclas para reallzar los dlsunLos upos de operaclones que
normalmenLe hacemos con los daLos. ara ello uullzaremos las
clases !1.-+&&)0< y 3.%(4-+&&)0<.

Ll ob[eLo -+&&)0< nos permlLe e[ecuLar senLenclas SCL sobre
la fuenLe de daLos a la que esLamos conecLados.

un ob[eLo -+&&)0< debe ser creado a parur de una conexln
ya exlsLenLe, y debe Lener una senLencla SCL denlda.
Piopieuaues ue +,&&)-0
,3&&).<1%=$: Conuene una cadena de LexLo que lndlca la
senLencla SCL que se va e[ecuLar sobre el orlgen de daLos.
,3&&).<1-&%38$: 1lempo de espera en segundos que se va
a apllcar a la e[ecucln de un ob[eLo Command. Su valor por
defecLo es 30 segundos.
,3&&).<1"2%: lndlca el upo de comando que se va a
e[ecuLar en el almacen de daLos (SLoredrocedure,
1ableulrecL o 1exL).
,3..%>93.: uevuel ve el ob[ eLo Sql Connecuon u
CleubConnecuon uullzado para e[ecuLar el ob[eLo Command
correspondlenLe.
?)5)&%$%5#: Coleccln de parmeLros que se pueden uullzar
para e[ecuLar el ob[eLo Command.
Ntouos ue +,&&)-0
,5%)$%?)5)&%$%5: Crea un parmeLro para el que despues
podemos denlr una serle de caracLerlsucas especlcas (upo
de daLo, valor, Lamano, eLc.) uevuelve un ob[eLo de upo
!1.=):)&%$%: u 3.%(4=):)&%$%:.
@=%>8$%A3.B8%5": L[ecuLa la senLencla SCL denlda en la
propledad -+&&)0<>%?$ en la conexln denlda en la
propledad -+00%56+0. La senLencla a e[ecuLar debe ser de un
upo que no devuelva un con[unLo de reglsLros, por e[emplo,
@7<)$%, (%.%$% o A0#%:$. uevuelve la canudad de las
afecLadas.

@=%>8$%6%)<%5: L[ecuLa la senLencla SCL denlda en la
propledad -+&&)0<>%?$ en la conexln denlda en la
propledad -+00%56+0. Ln esLe caso, la senLencla sl devuelve
un con[unLo de reglsLros. Ll resulLado es un ob[eLo de upo
!1.()$)*%)<%: u 3.%(4()$)*%)<%:.
@=%>8$%!>)+)5: Se uullza cuando deseamos obLener la prlmera
columna de la prlmera la del con[unLo de reglsLros, el resLo
de daLos no se Loman en cuenLa. uevuelve un ob[eLo de upo
34B%5$.
?5%2)5%: LsLe meLodo consLruye una versln compllada del
ob[eLo -+&&)0< denLro del almacen de daLos.
Ejemplo
Las Clases ()$)1%)0%2
un ob[eLo ()$)*%)<%: permlLe la navegacln hacla delanLe de
los reglsLros devuelLos por una consulLa. Las clases que
l mpl emenLan el ()$)*%)<%: son !1. ()$)*%)<%: y
3.%(4()$)*%)<%:.

ara obLener un ob[eLo ()$)*%)<%: debemos e[ecuLar el
meLodo C?%5/$%*%)<%:89 de un ob[eLo -+&&)0< basado en una
consulLa SCL.

Piopieuaues ue ()$)1%)0%2
Las prlnclpales propledades de un ob[eLo ()$)*%)<%: son las
slgulenLes:

C-%+<,38.$: uevuelve la canudad de columnas (campos)
presenLes en la la (reglsLro) acLual.

4#,+3#%<: uevuelve 1rue o lalse lndlcando sl un uaLa8eader
esL cerrado o no.

4$%&: uevuelve en formaLo nauvo, el valor de la columna cuyo
nombre le lndlcamos como lndlce en forma de cadena de
LexLo.
Ntouos ue ()$)1%)0%2
,+3#%DE: Clerra el ob[eLo ()$)*%)<%:.
F%$GGGDE: Son meLodos que nos permlLen obLener los valores de las
columnas conLenldas en el ()$)*%)<%:. Las xxx represenLan el upo
de daLo. or e[emplo: D%$E++.%)089, D%$A0$FG89, D%$!$:20;89,
D%$-H):89, eLc. Como parmeLro debemos envlarle el numero de
columna que queremos recuperar (comenzando desde cero).
A%=$6%#8+$DE: uesplaza el punLero acLual al slgulenLe con[unLo de
reglsLros (en caso de que se devuelva ms de un con[unLo de
reglsLros)
6%)<DE: uesplaza el cursor acLual al slgulenLe reglsLro permluendo
obLener los valores del mlsmo por medlo del ()$)*%)<%:. uevuelve
1rue sl exlsLen ms reglsLros denLro del ()$):*%)<%: y lalse sl
hemos llegado al nal del con[unLo de reglsLros. AnLes de comenzar
a usar un ()$)*%)<%: debemos llamar al meLodo *%)< para
poslclonarnos en el prlmer reglsLro.
Ejemplo
Ejeicicio
Ejeicicio
Ejeicicio
La Clase ()$)!%$
La clase ()$)!%$ es una clase comun de AuC .nL1, lo que slgnlca que
se uullza para cualquler upo de proveedor de daLos y no exlsLen
verslones paruculares !1.-.2%0$ u 3.%(4.

un ob[eLo de upo ()$)!%$ represenLa la arqulLecLura de la base de
daLos compleLa, basada en un esquema xML, por lo que no depende
de un fabrlcanLe especlco. un ()$)!%$ almacena los daLos en una
memorla cache desconecLada. Se dlce que un ()$)!%$ es
almacenamlenLo paslvo, es declr, no se ve afecLado por los camblos
subyacenLes en la base de daLos.

Cada Labla de la base de daLos esL represenLada denLro del ()$)!%$
en la propledad >)4.%# que es de upo ()$)>)4.%. un ()$)>)4.% esL
compuesLo por ()$)*+,# (las) y esLos a su vez esLn compuesLos por
()$)-+./&0# (columnas).
ara poder lnlclallzar las Lablas de un ()$)!%$ debemos hacer
uso de un ob[eLo de upo ()$)I<)7$%:, el cual puede ser de dos
upos: !1.()$)I<)7$%: u 3.%(4()$)I<)7$%:. Ll ob[eLo
()$)I<)7$%: se consLruye envlndole como parmeLro una
cadena que represenLa la consulLa que se va a e[ecuLar, y que va
a rellenar de daLos el ()$)!%$.

uel ob[eLo ()$)I<)7$%: uullzaremos el meLodo J2..89, el cual
reclbe como parmeLros el ()$)!%$ que se qulere rellenar de
lnformacln y un nombre para la Labla que se crear denLro del
()$)!%$.
Piopieuaues ue ()$)!%$
,)#%!%.#-9H%: lndlca sl las comparaclones de LexLo denLro de
las Lablas dlsunguen enLre mayusculas y mlnusculas. or
defecLo uene valor falso.
()$)!%$A)&%: LsLablece o devuelve el nombre del ()$)!%$.
I)#@5535#: uevuelve un valor lglco para lndlcar sl exlsLen
errores denLro de las Lablas de un ()$)!%$.
6%+)93.#: uevuelve una coleccln de ob[eLos de upo
()$)*%.)6+0 que represenLan las relaclones exlsLenLes enLre
las Lablas del ()$)!%$.
1)0+%#: uevuelve una coleccln de ob[eLos de upo ()$)>)4.%
que represenLan las Lablas del ()$)!%$.
Ntouos ue ()$)!%$
,+%)5DE: Lllmlna Lodos los daLos almacenados en el ob[eLo ()$)!%$,
vaclando Lodas las Lablas conLenldas en el mlsmo.
J>>%2$,K).;%#DE: Conrma Lodos los camblos reallzados en las
Lablas y relaclones conLenldas en el ob[eLo ()$)!%$, o blen los
ulumos camblos que se han producldo desde la uluma llamada a
I55%7$-H)0;%#.
F%$,K).;%#DE: uevuelve un ob[eLo ()$)!%$ que conuene Lodos los
camblos reallzados desde que se carg el ()$)!%$ o desde la uluma
llamada a I55%7$-H)0;%#.
I)#,K).;%#DE: uevuelve verdadero o falso para lndlcar sl se han
reallzado camblos al conLenldo del ()$)!%$ desde que fue cargado o
desde la uluma llamada a I55%7$-H)0;%#.
6%L%>$,K).;%#DE: Abandona Lodos los camblos reallzados en las
Lablas del ()$)!%$ desde que fue cargado o desde la uluma llamada
a I55%7$-H)0;%#.
:%5;%DE: 1oma el conLenldo de un ()$)!%$ y los mezcla con los de
oLro ()$)!%$.
Las Clases ()$)30)4$%2
Las clases ()$)I<)7$%: (!1.()$)I<)7$%: y 3.%(4()$)I<)7$%:)
slrven como puenLe enLre el orlgen de daLos y el ()$)!%$, ya
que permlLen cargar el ()$)!%$ con lnformacln de la fuenLe de
daLos, y posLerlormenLe, acLuallzar el orlgen de daLos con la
lnformacln del ()$)!%$.

La clase ()$)I<)7$%: uene cuaLro propledades de upo
-+&&)0<:
4.#%5$,3&&).<: Se uullza para lnsercln de daLos.
!%+%>$,3&&).<: Se uullza para e[ecuLar senLenclas #%.%5$.
M2<)$%,3&&).<: Se uullza para reallzar modlcacln de
daLos.
(%+%$%,3&&).<: Se uullza para reallzar ellmlnacln de daLos.
El Ntouo 5/66
un meLodo desLacabl e de l as cl ases ()$)I<)7$%:
(!1.()$)I<)7$%: y 3.%(4()$)I<)7$%:) es el meLodo J2..89, el
cual e[ecuLa el comando de seleccln asoclado a la propledad
!%.%5$-+&&)0<. Ll resulLado de esLa consulLa se carga en el
ob[eLo ()$)!%$ que le pasamos como parmeLro.
()$) 7/-0/-8: Enlace ue Batos a
Contioles
()$) E20<20; es el mecanlsmo proporclonado por la
plaLaforma .nL1 para enlazar ob[eLos conLenedores de daLos
con los conLroles de un formularlo, para poder reallzar
operaclones auLomucas de navegacln y edlcln.

LxlsLen dos upos de ()$) E20<20;:
Lnlace slmple (!2&7.% ()$) E20<20;): LsLe upo de enlace
conslsLe en una asoclacln enLre un conLrol que puede
mosLrar un unlco daLo y el ob[eLo conLenedor de daLos
(e[emplo: >%?$E+?).
Lnlace comple[o (-+&7.%? ()$) E20<20;): Ln esLe enlace, el
conLrol que acLua como lnLerfaz o vlsuallzador de daLos,
dlspone de la capacldad de mosLrar Lodos los daLos del ob[eLo
conLenedor (e[emplo: ()$)D:2<).
Elementos uel pioceso ()$) 7/-0/-8
N-.<-.;: Clase que permlLe crear un enlace (420<20;) para un
conLrol, lndlcando la propledad del conLrol que mosLrar los daLos,
el ()$)!%$ del que se exLraer la lnformacln, y el nombre de la
Labla - columna, cuyos daLos pasarn a la propledad del conLrol.
()$)N-.<-.;#: Coleccln de que dlsponen los conLroles, con la
lnformacln de enlaces a daLos. Craclas a su meLodo I<<89 podemos
anadlr un ob[eLo E20<20; para que el conLrol muesLre los daLos que
lndlca el enlace.
N-.<-.;,3.$%=$: ropledad de la clase J+:&, que represenLa el
conLexLo de enlace a daLos esLablecldo en los conLroles del
formularlo, es declr, Loda la lnformacln de enlaces esLableclda
enLre los conLroles y ob[eLos proveedores de daLos. uevuelve un
ob[eLo de upo E20<20;L)0);%:E)#%.
N-.<-.;:).);%5N)#%: Cb[eLo que se encarga de admlnlsLrar un
con[unLo de ob[eLos de enlace, por e[emplo, los de un formularlo,
obLenldos a Lraves del E20<20;-+0$%?$ del formularlo.