Sie sind auf Seite 1von 20

Clase IX

Objeto SQLConnection y SQLDataReader Objetivo Aqu veremos como consumir datos desde una fuente de datos (en ste caso utilizaremos la base de datos de Northwind de SQL) Duracin Aproximada 2 minutos

Pasos o Recomendaciones !) "rimeramente veremos como crear una cone#i$n con SQLServer utilizando el ob%eto SQL&onnection ubicado en el names'ace S(stem)*ata)Sql&lient 2) +amos a crear un nuevo 'ro(ecto llamado ,%ercicio- del ti'o a'licaci$n de consola .) "rimeramente vamos a im'ortar los names'aces S(stem)*ata ( S(stem)*ata)Sql&lient -) Lue/o dentro del mtodo main declararemos un ob%eto llamado dt,m'resas del ti'o *ata0able ( le a/re/aremos dos *ata&olumn llamados &ustomer1* ( &om'an(Name

2) *eclaramos un ob%eto sqlconnection llamado m(conn ( le indicaremos el connectionstrin/ que utilizar3 (ntes de realizar la operacin, se debe verificar que el connection string sea el correcto en el mbito donde se va a ejecutar)

4) &reamos un ob%eto SQL&ommand ( le indicamos la cadena 0SQL que utilizar3 ( el ob%eto sqlconnection que utilizar3

5) &reamos ahora un ob%eto SQL*ata6eader ( le indicamos el Select &ommand 0e#t ( el ob%eto slqconnection que utilizar3

7) Ahora abrimos la coneccion con la base de datos) &reamos un ob%eto *ata6eader llamado m(dr e invocamos el mtodo ,#ecute6eader del ob%eto m(comando que anteriormente hemos creado) 8) Lue/o car/amos el ob%eto dt,m'resas9 utilizando el mtodo Load ( 'asandole en el ar/umento el ob%eto *atareader) "or :ltimo cerramos la coneccion

! )

"or :ltimo vamos a recorrer los re/istros obtenidos ( re'resentarlos en la consola

!!)

,l resultado final ser3 el si/uiente;

<asta aqu9 hemos a'rendido a llenar un datatable 'or medio de su mtodo Load ( indicandole un ob%eto *ata6eader)

Objeto SQLConnection y SQLDataAdapter (.Fill) Objetivo =btener conocimientos b3sicos en el mane%o de los ob%etos connection ( el ob%eto dataada'ter Duracin Aproximada !2 minutos Pasos o Recomendaciones !) >asado en el e%ercicio anterior (de la clase 'asada) 9 ahora veremos de realizar la msma o'eraci$n 'ero utilizando el ob%eto *ataAda'ter en ves del ob%eto *atar6eader) 2) Lo que vamos a hacer 'rimeramente es eliminar el c$di/o que se muestra encuadrado a continuaci$n

.) ,n el lu/ar que 'reviamente borramos creamos un ob%eto SQL*ataAda'ter ( le indicamos el Select &ommand 0e#t ( el ob%eto slqconnection que utilizar3

-) Ahora abrimos la coneccion con la base de datos ( rellenamos el contenido obtenido en el ob%eto *ata0able llamado dt,m'resas) "or :ltimo cerramos la coneccion

"or :ltimo e%ecutamos la a'licaci$n 'resionando ?2 ( vermos los mismos resultados que 3ntes

2) <asta aqu9 hemos a'rendido a llenar utilzando el mtodo fill del ob%eto dataada'ter 'ara llenar el contenido en un datatable

Objeto SQLConnection y SQLDataAdapter (.Update) Objetivo =btener conocimientos b3sicos en el mane%o de los ob%etos connection ( el ob%eto dataada'ter utilizando el mtodo @'date() Duracin Aproximada 2 minutos

Pasos o Recomendaciones !) >asado en el e%ercicio anterior9 ahora veremos de realizar la msma o'eraci$n 'ero vamos a realizar cambios en nuestro datatable ( lue/o volcarlos a la base de datos) *e sta manera 'ondremos en 'r3ctica el modelo de acceso a datos desconectados) 2) @tilizando el msmo e%ercicio anterior vamos a ubicarnos al final del c$di/o ( vamos a a/re/ar el si/uiente c$di/o)

.) Ahora recorremos la colecci$n de datarows en busca del customerid

-) Si no lle/aramos a encontrar el customerid entonces enviamos un mensa%e ( finalizamos la e%ecucion del 'ro/rama 2) Si encontramos el customerid9 entonces me trai/o el *ata6ow corres'ondiente que tiene dicho customerid ( muestro en consola el nombre ori/inal ( solicito un nuevo nombre 'ara dicha em'resa;

4) Ahora que eh obtenido el nuevo nombre9 modifico el datarow9 'ero 'rimeramente ha( que llamar al mtodo )>e/in,dit del 'ro'io

datarow 'ara lue/o 'oder asi/narles valores ( 'or :ltimo se debe llamar el mtodo ,nd,dit() como se muestra en la si/uiente fi/ura;

5) &reamos un ob%eto command que ser3 utilizado 'or el dataada'ter 'ara 'oder realizar los cambios necesarios en la base de datos) ,l ob%eto command que crearemos se llamar3 u'dcomando ( le debemos indicar la cadena 0SQL que utilizar3 'ara llamar a la >* ( los 'ar3metros que utiliza9 tanto como su nombre9 el ti'o de dato9 la lon/itud ( el nombre del cam'o de nuestro datatable)

7) "or :ltimo ad%untamos ste ob%eto a nuestro *ataAda'ter (m(ada) 'ara lue/o invocar su mtodo )@'date() e indicarle el datatable que tiene que actualizar contra la base de datos)

8) <asta aqu hemos a'rendido a consultar en la base de datos9 traer los resultados ( /uardarlos en un ob%eto en memoria (datatable)9 modificar su contenido ( volver a conectarnos a la base de datos 'ara /uardar los cambios) ! ) *e sta manera se ve refle%ado la im'ortancia ( traba%ar en forma desconectada)

Data indin! Duracin Aproximada .2 minutos Pasos o Recomendaciones !) ,n ste e%ercicio mostraremos b3sicamente como enlazar datos de un ori/en de datos con un control de Ain?orms9 2) "ara ello crearemos un 'ro(ecto del ti'o BAindows A''licationC con el nombre de B,%ercicio5C

.) "rimermente arrastraremos desde nuestro 0ool>o# en la secci$n B*ataC9 arrastraremos ( colocaremos el control *ataDrid+iew sobre nuestro formulario B?orm!C9 una vez colocado resaltar3 un cuadro de tareas corres'ondiente al *ataDrid+iew de donde seleccionaremos de B&hoose *ata SourceC la o'cion BAdd "ro%ect *ata SourceEC

-) @na ves que seleccionamos BAdd "ro%ect *ata Source))C a'arecer3 un cuadro con tem'lates9 de donde seleccionaremos B*ata>aseC

2) Seleccionamos *ata>ase9 lue/o BNe#tC9 lue/o 'resionamos el boton BNew &onnection)))C) lue/o veremos un cuandro de dialo/o 'ara seleccionar el ori/en ( la base de datos) (dependiendo del ambito donde se desarrolle el curso, se deberia verificar primeramente el nombre y la instancia de sql donde resida una base de datos Northwind)

4) @na vez que hallamos 'resionado B=FC9 +isualStudio nos notificar3 que es dentro de la cadena de coneccion ha( datos im'ortantes (nombre de usuario9 contraseGa)9 "resionamos BHesC sobre el cuado de dialo/oC

5) Ahora +isualStudio nos brinda la 'osibilidad de /uardar el conecction strin/ dentro de un archivo e#terno de confi/uraci$n9 (a que si en el da de maGana cambia la ubicaci$n del servidor9 o las claves9 etc9 habria que entrar al c$di/o de la a'licaci$n 'ara modificar ( volver a recom'liar el 'ro/rama) *e sta manera queda /uardado en un archivo e#terno a la a'licaci$n)

7) "or :ltimo seleccionaremos de 0ablas9 la tabla &ustomers9 ( de ah seleccionaremos :nicamente los cam'os &ustomer1* ( &om'an(Name) "or :ltimo 'resionamos B?inishC)

8) Lue/o de finalizado el asistente veremos que el control *ataDrid+iew esta enlazado con un control llamado Bcustomer>indin/SourceC9 que a su ves ste control esta enlazado con un northwind*ataSet (un dataset ti'ado que ha creado) ( un customer*ata0able que utilizara 'ara realizar las consultas (Io modificaciones sobre la base de datos)

! ) !!)

Si 'resionamos ?2 veremos que automaticamente se rellena el contenido en el control *ataDrid+iew ?in del e%ercicio

Se"#$oros Objetivos ,l ob%etivo de este lab es el de com'render como los sem3foros 'ueden ser utilizados 'ara controlar las threads) Adem3s9 al i/ual que el resto de los labs de este 'rimer m$dulo9 ser3 :til 'ara comenzar un acercamiento a +isual Studio 2 2) Duracin Aproximada . minutos

Pasos: !) &rear una nueva a'licaci$n ti'o consola9 en cJ9 en la car'eta Labs9 con el nombre BSemaforosLabC) 2) A/re/ar una nueva clase al 'ro(ecto9 con el nombre de 0ester

.) A/re/ar; usin/ S(stem)0hreadin/K en ambos encabezados) ,sto es requerido 'ara 'oder hacer una a'licaci$n multiLthreadin/) -) ,n la clase 0ester a/re/ar dos 'ro'iedades; 'rivate Sema'hore semK 'rivate int MidK una es el semaforo que com'artiran todas las clases9 la otro es un identificador de la instancia) 2) A/re/ar un constructor con 'arametros; II &onstructor 'ublic 0ester(int i) N Mid O iK sem O new Sema'hore(!9 !9 P,lSemaforoP)K Q Asi/na el id a la instancia9 ( define el el semaforo que sera com'artido 'or todas las instancias 'or tener el mismo nombre) ,n 'rinci'io9 'ermite que las threads corran de a una) 4) ,l ob%eto tester tiene que tener un mtodo que e%ecute al/o; II Retodo que e%ecuta al/o 'ublic void ,%ecutar() N for (int % O K % S 2K %TT) N II Activacion del semaforo sem)Aait=ne()K for (int i O K i S 2K iTT) N &onsole)AriteLine(P0ester N QP9 Mid)K 0hread)Slee'(2 )K Q II Liberacion del semaforo sem)6elease()K Q Q ,ste metodo va a im'rimir su id 'or consola 2 veces dentro del wait=ne del semaforo9 en 2 o'ortunidades) =bservar que el semaforo se activa9 ( lue/o se abre9 'ara que el recurso 'ueda ser tomado 'or otra thread) 5) *esde el main de la a'licaci$n de consola9 deben ser creadas ( e%ecutadas cada una de las threads9 esto se realiza con el si/uiente c$di/o9 que va dentro del main) for (int i O K i S 2K iTT)

0ester ob% O new 0ester(i)K 0hread t O new 0hread(new 0hreadStart(ob%),%ecutar))K t)Start()K

Q &onsole)6eadLine()K Se crean 2 testers ( se los e%ecuta en 2 threads distintas) ,l ultimo 6eadLine es 'ara que no se cierre la consola al terminar la e%ecucion ( se 'uedan observar los resultados) 7) &orrer la a'licaci$n) =bservar como el recurso9 en este caso el uso de la salida de consola9 es accedido de a una thread 'or vez) 8) Rodificar la cantidad de threads que acceden al semaforo 'or vez9 cambiando la linea; sem O new Sema'hore(29 29 P,lSemaforoP)K =bservar las diferencias con la e%ecuci$n anterior)

%enerics Objetivos ,l ob%etivo de este lab es com'render el uso de los Denerics9 a 'artir de la im'lementacion de una lista /enerica (?irst 1n Last =ut)9 ( su utilizacion) Ademas9 'ermitir3 un acercamiento con +isual Studio 2 2) Duracin Aproximada -2 minutos Pasos: !) &rear una nueva a'licaci$n ti'o consola9 en cJ9 en la car'eta Labs9 con el nombre BDenericsLabC) 2) A/re/ar una nueva clase al 'ro(ecto9 con el nombre de ListaDenerica .) ,sta clase debe im'lementarse como /enrica9 'or lo tanto9 al declararla debe a'arecer como; 'ublic class ListaDenericaS0U -) La lista debe contener nodos) &ada nodo tiene su dato9 que ser3 del ti'o 09 ( deber3 'oder conocer al 'ro#imo nodo (Ne#t) 'ara 'oder im'lementar la lista del ti'o ?1L=) &om'letar la si/uiente clase 'ara im'lementar dicho nodo; 'rotected class Nodo N II 1m'lementar las 'ro'erties Ne#t ( *ata 'ara estos II fields 'ublic Nodo ne#tK 'rivate 0 dataK 'ublic Nodo(0 t) N II1m'lementar constructor Q

2) Ahora que dis'onemos de un Nodo9 la clase lista /enrica debe conocer solo a uno9 el nodo head; 'rotected Nodo headK 4) La lista debe im'lementar dos metodos9 A/re/ar ( Sacar) ,l 'rimero a/re/ar un elemento del ti'o 09 creando un nuevo nodo ( de%andolo como head9 ( el se/undo devuelve un elemento del ti'o 09 eliminando el nodo head ( de%ando como head el nodo que esta referenciando el anti/uo) II A/re/a un nodo en el to'e de la lista 'ublic void A/re/ar(0 t)

II 1nstanciar un nuevo nodo9 ( a/re/arlo como head II 0ener en cuenta que el actual <ead debe quedar II 6eferenciado como Ne#t desde el nuevo nodo

Q II =btiene el dato del 'rimer nodo de la lista II ( lo elimina 'ublic 0 Sacar() N II *evuelve *ata del nodo head9 lue/o II 0iene que de%ar como head el nodo referenciado como II head) 0ener en cuenta que es 'osible que no ha(a II elementos en la lista9 'or lo que el valor de devolucion II en ese caso9 debe ser default(0)K Q 5) "or ultimo9 debe im'lementarse el mtodo Det,numerator9 de 1,numeratorS0U9 'ara 'oder realizar un foreach 'or los valores de la lista) II 1m'lementa el Det,numerator II *evuelve un 1,numeratorS0U 'ara 'oder hacer II un foreach de la lista 'ublic 1,numeratorS0U Det,numerator() N Nodo current O headK while (current VO null) N (ield return current)*ataK current O current)Ne#tK Q II La lista fue vaciada head O nullK Q 7) La clase ListaDenericaS0U esta terminada) ,n Rain9 crear varias listas9 de diferentes ti'os9 in/resar datos con el mtodo A/re/ar9 ( sacandolos con los metodo Sacar9 ( con un foreach) Rostrar los resultados 'or 'antalla) =bservar que ocurre cuando se trata de sacar valor de una lista vacia ( uso del default(t) ))

&'todos An(ni"os Objetivos ,l ob%etivo de este lab es com'render el uso de anon(mous methods9 a 'artir de la im'lementacion de un e%em'lo sim'le de calculo de bonus en funcion de ventas 'ara un /ru'o de em'leados) Duracin Aproximada 2 minutos

Pasos: !) &rear una nueva a'licaci$n ti'o consola9 en cJ9 en la car'eta Labs9 con el nombre BAnon(mous*ele/atesLabC) 2) *efinir el mtodo dele/ate; II *efine el mtodo dele/ate dele/ate decimal &alcular>onus(decimal ventas)K .) *efinir la clase que utilizar3 ese mtodo; II *efine ,m'leado class ,m'leado N 'ublic strin/ nombreK 'ublic decimal ventasK 'ublic decimal bonusK 'ublic &alcular>onus al/oritmoMcalculoK Q -) *entro de la clase "ro/ram9 definir un metodo 'ara calculo de bonus) ,ste mtodo no es an$nimo; II ,ste es el mtodo con nombre II define una 'osible im'lementacion del al/oritmo de calculo II de bonos static decimal &alcular>onus&omun(decimal ventas) N return ventas I ! K Q 2) *entro de Rain9 definir un multi'licador) ,sta es una variable local que ser3 utilizada 'or el anon(mous dele/ate 'ara calcular el bonus) decimal multi'licador O 2K 4) *efinir los dos dele/ates9 uno que utilizara un mtodo con nombre9 que se defini$ arriba9 ( otro que utilizar3 un mtodo an$nimo) II *ele/ate definido con el mtodo que no es anonimo) &alcular>onus bonusMcomun O new &alcular>onus(&alcular>onus&omun)K II ,ste *ele/ate es anonimo9 no ha( un metodo con nombre definido

II *efine un al/oritmo de calculo alternativo &alcular>onus bonusMme%orado O dele/ate(decimal ventas) N return multi'licador W ventas I ! K QK 5) &rear un arra( de - em'leados9 a cada uno 'onerle nombre ( un valor de ventas) A dos9 asi/narles como al/oritmo de calculo bonusMcomun9 ( a dos bonusMme%orado) 7) &rear un mtodo estatico que calcula los bonus; 'ublic static void &alcular>onus(,m'leado em'leado) N II ,ste metodo usa al dele/ate /uardado en em'leado 'ara realizar el II calculo II Notar que conoce el valor de la variable local multi'licador9 a II 'esar de que II la misma esta fuera del alcance del metodo) em'leado)bonus O em'leado)al/oritmoMcalculo(em'leado)ventas)K Q 8) &rear un mtodo 'ara el dis'la( del nombre de un em'leado ( el valor de bonus) ! ) *esde el Rain9 llamar a ambos mtodos9 'ara cada uno de los em'leados9 ( observar como9 'ara cada em'leado9 se llama al dele/ate corres'ondiente9 usando o sin usar un mtodo con nombre)

Das könnte Ihnen auch gefallen