Sei sulla pagina 1di 207

Microsoft C# - Enfoque Prctico

CAPTULO 1 PROGRAMACIN ORIENTADA A OBJETOS CON C#


.

Ing. Javier Alberto Manrique Quionez

Pgina 1

Microsoft C# - Enfoque Prctico

PROGRAMACIN ORIENTADA A OBJETOS


El mundo real est formado por objetos: personas, animales, casas, autos, etc. Las aplicaciones (software) estn compuestas por muchos objetos: interfaces grficas de usuario, cuadros de dilogo, barras de men, barra de herramientas, cuadros de te to, botones de comando, eti!uetas, reas de te to, etc. "odos ellos con la capacidad de interactuar con los usuarios. "odos los objetos tienen atributos (tama#o, forma, color, peso, etc) $ tambi%n comportamiento !ue se implementan a tra&%s de los m%todos (por ejemplo un auto inicia su funcionamiento, acelera la &elocidad, gira una es!uina, detiene su recorrido, etc). "odos los objetos similares en sus atributos $ m%todos se caracteri'an por ser agrupados en una misma clase (clase persona, clase casas, clase auto, etc). Las personas comprenden los objetos estudiando sus atributos $ obser&ando su comportamiento implementados a tra&%s de sus m%todos. El dise#o orientado a objetos (())) modela el software en t%rminos similares a los !ue utili'an las personas para describir el mundo real. *e apro&echa las relaciones entre clases de objetos, en donde objetos de cierta clase tienen las mismos atributos $ m%todos. +tili'a las relaciones de herencia en donde nue&as clases se crean a prtir de clases $a e istentes de los cuales heredan sus atributos $ agregan nue&as atributos segn sus necesidades. El ()) permite crear aplicaciones (software) modelando de los objetos sus atributos, m%todos $ la comunicaci,n entre los objetos !ue se caracteri'a por el en&io $ recepci,n de mensajes. Los objetos encapsulan atributos (ocultan) $ permiten !ue solo sus m%todos puedan cambiar los &alores. El lenguaje de programaci,n -icrosft ./ es orientada a objetos. La unidad bsica de programaci,n es una clase, de la cual se instancian los objetos. Las clases son para los objetos como los planos de construcci,n son para las casas. Las clases son las plantillas para crear nue&os objetos. Las clases se relacionan entre si $ estas relaciones se denominan asociaciones. Las clases relacionadas se pueden empa!uetar en componentes reutili'ables para su posterior reutili'aci,n. 0eutili'ar clases e istentes durante el proceso de desarrollo de aplicaciones permite ahorrar tiempo $ esfuer'o, con productos ms confiables $ efecti&os, $a !ue las clases reutili'adas han pasado por un proceso de calidad mu$ e tenso (depuraci,n $ optimi'aci,n del rendimiento).

CLASE
+na clase es un tipo de datos !ue definen los datos (atributos) $ el comportamiento (m%todos). Los programadores pueden crear objetos !ue son instancias de una clase. Las clases tienen las siguientes partes: nombre de la clase, miembros atributos $ miembros m%todos. El nombre identifica a las clases dentro del conjunto de clases. Los miembros atributos se pueden implementar a tra&%s de un conjunto de datos de tipo primiti&o (int, float, double *tring, char, etc). Los m%todos pueden ser m%todos constructores, m%todos get $ m%todos set. Los m%todos constructores dan &alores iniciales a los atributos durante la creaci,n del objeto. Los m%todos get de&uel&en datos a la aplicaci,n !ue lo in&oca. El m%todo set asigan un &alor a un determinado atributo. En la 1igura 1.1 se &isuali'a un ejemplo de declaraci,n de una clase. Figura 1.1: Ej !"#$ % % &#ara&i'( % &#a) using *$stem2 namespace 34.-$(3) 5 public class 3lumno 5 pri&ate int alumno6id2 pri&ate *tring apellido7ombre2 public 3lumno ( ) 5 this .alumno6id this .apellido7ombre : 8 92 8 null2

Ing. Javier Alberto Manrique Quionez

Pgina ;

Microsoft C# - Enfoque Prctico

public 3lumno ( int alumno6id, *tring apellido7ombre, double e&aluacion<arcial1, double e&aluacion<arcial;, double promedio(e"rabajo, double promedio1inal ) 5 this .alumno6id 8 alumno6id2 this .apellido7ombre 8 apellido7ombre2 this .e&aluacion<arcial1 8 e&aluacion<arcial12 this .e&aluacion<arcial; 8 e&aluacion<arcial;2 this .promedio(e"rabajo 8 promedio(e"rabajo2 this .promedio1inal 8 promedio1inal2 : public int get3lumno6id ( ) 5 return this .alumno6id2 : public &oid set3lumno6id ( int alumno6id ) 5 this .alumno6id 8 alumno6id2 : public *tring get3pellido7ombre ( ) 5 return this .apellido7ombre2 : public &oid set3pellido7ombre ( *tring apellido7ombre ) 5 this .apellido7ombre 8 apellido7ombre2 : public o&erride *tring "o*tring ( ) 5 return apellido7ombre2 : : :

PROPIEDADES
En ./ podemos crear $ utili'ar un elemento especial, denominado propiedad, !ue aun!ue a simple &ista parece ser un atributo, puede esconder una funcionalidad tan compleja como lo necesitemos. Las propiedades son miembros !ue ofrecen un mecanismo fle ible para leer, escribir o calcular los &alores de atributos pri&ados. *e pueden utili'ar las propiedades como si fuesen miembros de datos pblicos, aun!ue en realidad son m%todos especiales denominados descriptores de acceso. (e este modo, se puede tener acceso a los datos con facilidad, a la &e' !ue proporciona la seguridad $ fle ibilidad de los m%todos. +na propiedad es una especie de combinaci,n entre lo !ue es un atributo $ un m%todo, $a !ue se define parecido al segundo, pero se utili'a como el primero. En la 1igura 1.; se &i'uali'a ejemplo de uso de propiedades. Figura 1.*: Ej !"#$ % u)$ % "r$"i %a% ) using *$stem2 namespace .onsole3pplication 5 public class 3lumno 5 pri&ate int 6alumno6id2 pri&ate string 6apellido7ombre2 public int alumno6id 5 get 5 return 6alumno6id2 : set 5 6alumno6id8&alue2 : : public string apellido7ombre

Ing. Javier Alberto Manrique Quionez

Pgina =

Microsoft C# - Enfoque Prctico

5 get 5 return 6apellido7ombre2 : set 5 6apellido7ombre 8 &alue2 : : : class <rogram 5 static &oid -ain(string>? args) 5 3lumno o3lumno 8 new 3lumno()2 o3lumno.alumno6id 8 12 o3lumno.apellido7ombre 8 @3rias, 3le @2 .onsole.AriteLine(@3lumno6id : @Bo3lumno.alumno6id)2 .onsole.AriteLine(@3pellido $ nombre : @Bo3lumno.apellido7ombre)2 .onsole.0eadCe$()2 : : : Las propiedades permiten !ue una clase e ponga una manera pblica de obtener $ establecer &alores, ocultando el c,digo de implementaci,n o comprobaci,n. El descriptor de acceso de una propiedad get se utili'a para de&ol&er el &alor de la propiedad $ el descriptor de acceso set se utili'a para asignar un nue&o &alor. Estos descriptores de acceso pueden tener ni&eles de acceso diferentes. La palabra cla&e &alue se utili'a para definir el &alor asignado por el indi'ador set. Las propiedades !ue no implementan un m%todo set son de s,lo lectura. Las propiedades combinan aspectos de los atributos $ de los m%todos. <ara el usuario de un objeto, una propiedad es similar a un atributo, el acceso a la propiedad re!uiere e actamente la misma sinta is. <ara el implementador de una clase, una propiedad es uno o dos blo!ues de c,digo !ue representan un descriptor de acceso get $ un descriptor de acceso set. El blo!ue de c,digo para el descriptor de acceso get se ejecuta cuando se lee la propiedad2 el blo!ue de c,digo para el descriptor de acceso set se ejecuta cuando se asigna un nue&o &alor a la propiedad. +na propiedad sin un descriptor de acceso set se considera de s,lo lectura. +na propiedad sin un descriptor de acceso get se considera de s,lo escritura. +na propiedad con ambos descriptores de acceso es de lectura $ escritura. Las propiedades no pueden pasar parmetro a diferencia de otras formas de declarar m%todos. Las propiedades tienen muchos usos: &alidan datos antes de permitir un cambio2 e ponen datos de forma transparente en una clase donde se recuperan realmente los datos de otro origen, como una base de datos2 reali'an una acci,n cuando se modifican datos, por ejemplo, pro&ocar un e&ento, o cambian el &alor de otros campos. Las propiedades se declaran dentro del blo!ue de clase especificando el ni&el de acceso del campo, seguido por el tipo de la propiedad, seguido por el nombre de la propiedad $, a continuaci,n, un blo!ue de c,digo !ue declara el descriptor de accesoget $Do el descriptor de acceso set. E# % )&ri"+$r % a&& )$ g + El cuerpo del descriptor de acceso get es similar a la de un m%todo. (ebe de&ol&er el &alor del tipo de la propiedad. La ejecuci,n del descriptor de acceso get e!ui&ale a leer el &alor del atributo. <or ejemplo, cuando se de&uel&e la &ariable pri&ada del descriptor de acceso get $ las optimi'aciones estn habilitadas, el compilador pone la llamada al m%todo del descriptor de acceso get entre lEneas para !ue no se produ'ca una sobrecarga de m%todoFllamada. *in embargo, un m%todo de descriptor de acceso get &irtual no se puede poner entre lEneas, por!ue el compilador no sabe en tiempo de compilaci,n !u% m%todo puede llamarse en tiempo de ejecuci,n.

Ing. Javier Alberto Manrique Quionez

Pgina G

Microsoft C# - Enfoque Prctico

E# % )&ri"+$r % a&& )$ ) + El descriptor de acceso set es similar a un m%todo cu$o tipo de &alor de&uelto es &oid. +tili'a un parmetro implEcito denominado &alue, !ue tiene el mismo tipo !ue la propiedad. En el siguiente ejemplo se agrega un descriptor de acceso set a la propiedad 7ame:

PROPIEDADES AUTOM,TICAS
Heneralmente cuando definimos una propiedad de ./ debemos declarar una &ariable pri&ada para contener los &alores, asE como sus m%todos set $ get para asignarla $ recuperarla. *i no necesitamos a#adir l,gica $ la propiedad s,lo es un en&oltorio de un campo pri&ado repitimos todo el tiempo multitud de c,digo como este: pri&ate string 6apellido7ombre2 public string apellido7ombre 5 get 5 return 6apellido7ombre2 : set 5 6apellido7ombre 8 &alue2 : : +na de las nue&as caracterEsticas en ./ = son las propiedades automticas. Esta caracterEstica consiste simplemente en tener la posibilidad de declarar las propiedades re!ueridas con el get $ el set &acEos. El compilador se encarga de generar en c,digo intermedio (-*IL) los atributos re!ueridos para cada una de las propiedades automticas. El ejemplo anterior puede ser reempla'ado por el siguiente c,digo: public string apellido7ombre 5 get2 set2 : El compilador generar todo lo dems por nosotros escogiendo un nombre aleatorio para la &ariable pri&ada $ dejando ms claro $ mucho ms conciso nuestro c,digo. 3dems, se puede agregar m%todos !ue calculen utili'ando el formato estndar de declaraci,n de m%todos, !ue tienen la posibilidad de recibir parmetros $ de&ol&er resultados a la aplicaci,n !ue los llamo. 3 continuaci,n se presenta un ejemplo de una aplicaci,n !ue utili'a el concepto de propiedades $ !ue tiene las siguientes caracterEsticas: a) <resenta un formulario para la aplicaci,n alumno !ue se &isuali'a en la 1igura 1.=. b) La estructura de la clase 3lumno es la siguiente: int alumno6id *tring apellido7ombre double e&aluacion<arcial1 double e&aluacion<arcial; double promedio(e"rabajo double promedio1inal
c) El promedio final del alumno se calcula en base al promedio simple de tres notas: e&aluaci,n

parcial1 (e&aluacion<arcial1), e&aluaci,n parcial; (e&aluacion<arcial;) $ promedio de trabajo (promedio(e"rabajo). d) <ara el dise#o de la aplicaci,n utili'a eti!uetas, cuadros de te to $ botones de comando. e) La 1igura 1.G se &isuali'a la aplicaci,n en el E plorador de 3plicaciones f) La 1igura 1.J &isuali'a el c,digo de la aplicaci,n K .lase Entidad 3lumno

Figura 1.-: F$r!u#ari$ % #a a"#i&a&i'(

Ing. Javier Alberto Manrique Quionez

Pgina J

Microsoft C# - Enfoque Prctico

Figura 1..: A"#i&a&i'( ( # /"#$ra%$r % )$#u&i$( )

Figura 1.0: C'%ig$ % #a a"#i&a&i'( 1 C#a) E(+i%a% A#u!($ using *$stem2 namespace 34.-$(3) 5 public class 3lumno 5 public int alumno6id public *tring apellido7ombre public double e&aluacion<arcial1 public double e&aluacion<arcial; public double promedio(e"rabajo public double promedio1inal

5 get2 set2 : 5 get2 set2 : 5 get2 set2 : 5 get2 set2 : 5 get2 set2 : 5 get2 set2 :

public 3lumno ( ) 5 this.alumno6id this.apellido7ombre

8 92 8 null2

Ing. Javier Alberto Manrique Quionez

Pgina L

Microsoft C# - Enfoque Prctico

this.e&aluacion<arcial1 this.e&aluacion<arcial; this.promedio(e"rabajo :

8 92 8 92 8 92

public 3lumno ( int alumno6id, *tring apellido7ombre, double e&aluacion<arcial1, double e&aluacion<arcial;, double promedio(e"rabajo, double promedio1inal ) 5 this.alumno6id 8 alumno6id2 this.apellido7ombre 8 apellido7ombre2 this.e&aluacion<arcial1 8 e&aluacion<arcial12 this.e&aluacion<arcial; 8 e&aluacion<arcial;2 this .promedio(e"rabajo 8 promedio(e"rabajo2 this .promedio1inal 8 promedio1inal2 : public &oid set<romedio1inal ( )
5 .promedio(e"rabajo) D =2 this.promedio1inal 8 (this.e&aluacion<arcial1 B this.e&aluacion<arcial; B this

: public o&erride *tring "o*tring ( ) 5 return apellido7ombre2 : : : 3 continuaci,n se presenta un procedimiento para desarrollar la aplicaci,n !ue calcula el promedio final de un alumno en ./: .argue el Misual *tudio ;919 el cual se presentar como en la 1igura 1.L en ejecuci,n. Figura 1.2: 3i)ua# S+u%i$ ( j &u&i'(

Naga clic en la opci,n de men 7ue&o $ seleccione <ro$ecto tal como se &isuali'a en la 1igura 1.O.

Ing. Javier Alberto Manrique Quionez

Pgina O

Microsoft C# - Enfoque Prctico

Figura 1.4: S # &&i'( % Nu 5$ "r$6 &+$

*eleccione en <lantilla Instaladas Misual ./FPAindows como tipo de pro$ecto. En la secci,n <lantillas seleccione 3plicaci,n de Aindows 1orm (3plicaci,n de 1ormulario Aindows). Luego proporcione un nombre al pro$ecto creado !ue para nue&o caso ser <ro$ecto3lumno.on<ropiedades. 1inalmente haga clic en el bot,n de comando 3ceptar. En la 1igura 1.Q se la creaci,n de un 1ormulario Aindows. Figura 1.7: Cr a&i'( % u( (u 5$ F$r!u#ari$ 8i(%$9)

Ing. Javier Alberto Manrique Quionez

Pgina Q

Microsoft C# - Enfoque Prctico

Merifi!ue !ue el I(E del Misual ./ se presente el 1ormulario Aindows en fase dise#o tal como en la 1igura 1.R Figura 1.:: 3i)ua#i;a&i'( % F$r!u#ari$ 8i(%$9) ( <a) %i) =$

3gregue al formulario los siguientes controles: 9J Label (eti!uetas), 9J "e t4o (cuadro de te to) $ 9= 4utton (4otones de .omando) tal como se presenta en la 1igura 1.19 Figura 1.1>: F$r!u#ari$ 8i%($9) &$( $?j +$) agr ga%$) @ +iAu +a)B &ua%r$) % + /+$ 6 ?$+$( ) % &$!a(%$)C

Ing. Javier Alberto Manrique Quionez

Pgina R

Microsoft C# - Enfoque Prctico

Naga clic derecho en la Label 1 (Eti!ueta 1) $ seleccione propiedades del men conceptual tal como se presenta en la 1igura 1.11 Figura 1.11: A&& )$ a #a $"&i'( "r$"i %a% ) % # ! (D &$(& "+ua#

Merifi!ue !ue se presente la &entana de propiedades tal como se presenta en la 1igura 1.1; Figura 1.1*: 3 (+a(a % "r$"i %a% )

Ing. Javier Alberto Manrique Quionez

Pgina 19

Microsoft C# - Enfoque Prctico

Naga clic en el ar%a de trabajo del formulario 1orm1 $ modifi!ue la propiedad Na! (nombre). 3sEgnele el nombre de 1ormulario3lumno tal como se presenta en la 1igura 1.1= Figura 1.1-: A)ig(a&i'( % (u 5$ ($!?r a u( <$r!u#ari$

-odifi!ue la propiedad 7ame del control label1 tal como se presenta en la 1igura 1.1G. Figura 1.1.: A)iga(&i'( % (u 5$ ($!?r a u( $?j +$ #a? #

Ing. Javier Alberto Manrique Quionez

Pgina 11

Microsoft C# - Enfoque Prctico

-odifi!ue la propiedad "e t del objeto label3lumno6id $ asEgnele el &alor 3lumno6id. Luego &erifi!ue !ue el formulario se presente como en la 1igura 1.1J. Figura 1.10: A)ig(a&i'( % "r$"i %a% T /+ %

0epita el proceso para los otros controles. Merifi!ue !ue los nombres se presenten como en el siguiente cuadro. Control
Form1 label1 label2 label3 label4 label5 $abel% #e&#'o&1 #e&#'o&2 #e&#'o&3 #e&#'o&4 #e&#'o&5 #e&#'o&% bu##on1 'u##on2 'u##on3

Nombre del Control


formularioAlumno labelAlumno_id labelApellidoNombre labelEvaluacinParcial1 labelEvaluacinParcial2 labelPromedio e!raba"o labelPromedioFinal #e&#'o&Alumno_id #e&#'o&ApellidoNombre #e&#'o&EvaluacionParcial1 #e&#'o&EvaluacionParcial2 #e&#'o&Promedio e!raba"o #e&#'o&PromedioFinal bu##onAcep#ar 'u##on(einiciar 'u##on)alir

Propiedad Text del Control


FormularioAlumno Alumno_id : Apellidos y Nombres : Evaluacin parcial 1 : Evaluacin Parcial 2 : Promedio de #raba"o : Promedio final :

Acep#ar (einiciar )alir

Ing. Javier Alberto Manrique Quionez

Pgina 1;

Microsoft C# - Enfoque Prctico

Merifi!ue !ue el formulario se presente como en el siguiente 1igura 1.L. Figura 1.12: F$r!u#ari$ &$( a"ari (&ia <i(a#

En el E plorador de soluciones, haga clic derecho en el te to pro$ecto <ro$ecto<otencia $ seleccione agregar. Luego seleccione .lase. En la 1igura 1.1O se presenta la selecci,n de la opci,n agregar nue&a clase. Figura 1.14: S # &&i'( "ara agr gar (u 5a &#a)

Ing. Javier Alberto Manrique Quionez

Pgina 1=

Microsoft C# - Enfoque Prctico

*e presenta el cuadro de dilogo para seleccionar nue&a clase. En nombre digite 3lumno.cs como nombre de la clase. Luego haga clic en el 4ot,n de .omando 3ceptar. En la 1igura 1.1Q se muestra el cuadro de dilogo para seleccionar el nue&o elemento .lase. Figura 1.17: Cua%r$ % %iE#$g$ "ara ) # &&i$(ar # (u 5$ # ! (+$ C#a)

Merifi!ue !ue el I(E del Misual *tudio ;919 se presente como en la 1igura 1.1R. Figura 1.1:: A"#i&a&i'( ( # /"#$ra%$r % A"#i&a&i$( )

Ing. Javier Alberto Manrique Quionez

Pgina 1G

Microsoft C# - Enfoque Prctico

3gregue propiedades como se presenta en la 1igura 1.;9 $ en el ,rden como se presentan. Luego agregue los m%todos constructores. Figura 1.*>: Agr ga&i'( % "r$"i %a% ) a #a &#a) A#u!($

.omplete con la digitaci,n de la clase 3lumno, tal como se presenta en la 1igura 1.;1. Figura 1.*1: C'%ig$ % #a &#a) A#u!($ using *$stem2 namespace <ro$ecto3lumno.on<ropiedades 5 public class 3lumno 5 public int alumno6id 5 get2 set2 : public *tring apellido7ombre 5 get2 set2 : public double e&aluacion<arcial1 5 get2 set2 : public double e&aluacion<arcial; 5 get2 set2 : public double promedio(e"rabajo 5 get2 set2 : public double promedio1inal 5 get2 set2 : public 3lumno() 5 this.alumno6id 8 92 this.apellido7ombre 8 null2 this.e&aluacion<arcial1 8 92 this.e&aluacion<arcial; 8 92 this.promedio(e"rabajo 8 92 : public 3lumno(int alumno6id, *tring apellido7ombre, double e&aluacion<arcial1, double e&aluacion<arcial;, double promedio(e"rabajo, double promedio1inal) 5 this.alumno6id 8 alumno6id2 this.apellido7ombre 8 apellido7ombre2 this.e&aluacion<arcial1 8 e&aluacion<arcial12 this.e&aluacion<arcial; 8 e&aluacion<arcial;2 this.promedio(e"rabajo 8 promedio(e"rabajo2 this.promedio1inal 8 promedio1inal2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1J

Microsoft C# - Enfoque Prctico

public &oid set<romedio1inal() 5 this.promedio1inal 8 (this.e&aluacion<arcial1 B this.e&aluacion<arcial; B


this.promedio(e"rabajo) D =2

: public o&erride *tring "o*tring() 5 return apellido7ombre2 : : : En el formulario seleccione el bot,n de comando 3cepotar $ haga doble clic en mismo tal como se presenta en la figura 1.;;. Figura 1.**: S # &&i'( i(gr )$ % &'%ig$ % # ?$+'( % &$!a(%$ A& "+ar

3gregue el siguiente c,digo !ue se presenta en la 1igura 1.;=. Figura 1.*-: C'%ig$ % # ?$+'( % &$!a(%$ A& "+ar

Ing. Javier Alberto Manrique Quionez

Pgina 1L

Microsoft C# - Enfoque Prctico

En el formulario haga doble clic en el bot,n de comando 0einiciar $ agregue el c,digo !ue se presenta en la 1igura 1.;G. Figura 1.*.: C'%ig$ % # ?$+'( % &$!a(%$ R i(i&iar

En el formulario haga doble clic en el bot,n de comando *alir $ agregue el c,digo de la 1igura 1.;J. Figura 1.*0: C'%ig$ % # ?$+'( % &$!a(%$ Sa#ir

Ing. Javier Alberto Manrique Quionez

Pgina 1O

Microsoft C# - Enfoque Prctico

*eleccione del men <rincipal del I(E (epurarDIniciar depuraci,n (1J). Figura 1.*2: S # &&i'( % #a $"&i'( i(i&iar % "ura&i'(

Merifi!ue la ejecuci,n de la aplicaci,n. Ingrese los datos en el cuadro de te to. Luego haga clic en el 4ot,n de .omando 3ceptar. Merifi!ue !ue los resultados sean como en la 1igura 1.;O. Figura 1.*4: Ej &u&i'( % #a a"#i&a&i'(

Ing. Javier Alberto Manrique Quionez

Pgina 1Q

Microsoft C# - Enfoque Prctico

Naga clic en el 4ot,n de .omando 0einiciar $ &erifi!ue !ue los cuadros de te to se limpian como se presenta en la figura 1.;Q Figura 1.*7: Ej &u&i'( % # ?$+'( % &$!a(%$ R i(i&iar

Naga clic en el bot,n de comando *alir $ &erifi!ue a terminado la ejecuci,n del formulario $ se &ue&e al modo de dise#o de formulario. Figura 1.*:: Ej &u&i'( % # ?$+'( % &$!a(%$ Sa#ir.

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioAlumnoConPropiedades.

Ing. Javier Alberto Manrique Quionez

Pgina 1R

Microsoft C# - Enfoque Prctico

CAPTULO * ARREGLO DE OBJETOS CON C#

Ing. Javier Alberto Manrique Quionez

Pgina ;9

Microsoft C# - Enfoque Prctico

ARREGLOS DE OBJETOS
En ./ los arreglos de objetos en &e' de contener elementos de datos primiti&os (int, float, double, etc.) contienen referencias a objetos de un tipo de clase en especial. (icha clase contiene atributos de diferentes tipos $ m%todos con los cuales se manipulan dichos atributos. .ada atributo se referencia empleando un nombre de campo los cuales pueden ser de diferentes tipos primiti&os. Los elementos de un arreglo de objetos estn numerados $ para referirnos a un elemento concreto se utili'a su nmero de posici,n denominado Endice. En ./, los elementos de un arreglo de objetos se empie'an a numerar desde cero. Esto es el Endice del primer elemento de la serie es 9. *i la longitud de la serie es n, el Endice del ltimo elemento del arreglo de objetos ser nF1. Los arreglos de objetos se crean usando el operador new. 3 continuaci,n se presenta un modelo !ue representa un arreglo de objetos, el cual se crea en dos sentencias. La primera crea (instanciaci,n) el arreglo de objetos $ la segunda crea (instanciaci,n) cada elemento del arreglo para su posterior utili'aci,n. <or ejemplo: 3lumno>? o3rreglo3lumno 8 new 3lumno>199?2 for (int i 8 92 i S 1992 i 8 i B 1) 5 o3rreglo3lumno>i? 8 new 3lumno()2 : DD primera sentencia DD segunda sentencia

El c,digo anterior genera el siguiente arreglo de objetos:

3 continuaci,n se presenta un ejemplo de una aplicaci,n utili'ando ar!uitectura = .apas !ue administra un arreglo de objetos !ue tiene las siguientes caracterEsticas: a) <resenta un formulario para un sistema de mantenimiento 34.- de alumnos. b) La letra 34.- significan 3ltas, 4ajas, .onsultas $ -odificaci,n respecti&amente. c) La estructura de la clase 3lumno es la siguiente:
int alumno_id String apellidoNombre double evaluacionParcial1 double evaluacionParcial2 double promedioDeTrabajo double promedioFinal

Ing. Javier Alberto Manrique Quionez

Pgina ;1

Microsoft C# - Enfoque Prctico

d) +tili'a una clase de acceso a datos ((3)) !ue permite interactuar la aplicaci,n con el arreglo de objetos. e) +tili'a una clase denominada 34.-3ccion para almacenar las constantes de las operaciones posibles. f) La 1igura ;.1 se &isuali'a la aplicaci,n en el E plorador de 3plicaciones g) En la 1igura ;.; se &isuali'a el diagrama de clases de la aplicaci,n ejemplo. h) La 1igura ;.= presenta el 1ormulario 1ormulario*istema(e-enu. i) La 1igura ;.G se presenta el c,digo del 1ormulario 1ormulario*istema(e-enu j) +tili'a un formulario compuesto por eti!uetas, cuadros de te to $ un control (ataHridMiew. El control (ataHridMiew se utili'a para &isuali'ar los datos en cuadrEculas personali'ables. El control (ataHridMiew permite mostrar datos con o sin especificar un origen de datos sub$acente, permitiendo crear las filas $ columnas !ue contendrn los datos $ agregarlas directamente a (ataHridMiew. El formulario de la aplicaci,n se muestra en la 1igura ;.J $ en ella se despliega el men conceptual para editar las columnas del (ataHridMiew. T) La 1igura ;.L $ la 1igura ;.O &isuali'a la &entana para configurar las columnas del (ataHridMiew. l) La 1igura ;.Q se &isuali'a el m%todo actuali'ar el (ataHridMiew. m) La 1igura ;.R se &isuali'a el m%todo limpiar (ataHridMiew. n) La 1igura ;.19, 1igura ;.11, 1igura ;.1;, 1igura ;.1=, 1igura ;.1G, 1igura ;.1J $ 1igura ;.1L se &isuali'an los formularios de la aplicaci,n *istema de -antenimiento 34.- ejemplo. o) La 1igura ;.1O presenta el 1ormulario 1ormularioListado. p) La 1igura ;.1Q &isuali'a el c,digo de la aplicaci,n F 34.-3ction !) La 1igura ;.1R &isuali'a el c,digo de la aplicaci,n K .lase 3lumno r) La 1igura ;.;9 &isuali'a el c,digo de la aplicaci,n K <rograma principal s) La 1igura ;.;1 &isuali'a el c,digo de la aplicaci,n K .lase 3lumno(3) t) La 1igura ;.;; &isuali'a el c,digo de la aplicaci,n K 1ormulario34.-$(3) u) La 1igura ;.;=: .,digo de la aplicaci,n K 1ormulario Listado &) La 1igura ;.;G &isuali'a la &entana de propiedades para programar el e&ento formclosing (E&ento .errar Mentana) w) La 1igura ;.;J: presenta el 1ormulario 34.- K .errar &entana Figura *.1: A"#i&a&i'( ( # /"#$ra%$r % )$#u&i$( )

Ing. Javier Alberto Manrique Quionez

Pgina ;;

Microsoft C# - Enfoque Prctico

Figura *.*: Diagra!a % &#a) ) % #a a"#i&a&i'(

Figura *.-: F$r!u#ari$ Si)+ !a % ! (D

Ing. Javier Alberto Manrique Quionez

Pgina ;=

Microsoft C# - Enfoque Prctico

Figura *..: C'%ig$ % # F$r!u#ari$ F$r!u#ari$Si)+ !aD M (u

Figura *.0: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($)

Ing. Javier Alberto Manrique Quionez

Pgina ;G

Microsoft C# - Enfoque Prctico

Figura *.2: 3 (+a(a % &$(<igura&i'( % #a) &$#u!(a) % u( C$(+r$# Da+aGri%3i 9

Figura *.4: 3 (+a(a % &$(<igura&i'( % #a) &$#u!(a) % u( Da+aGri%3i 9

Ing. Javier Alberto Manrique Quionez

Pgina ;J

Microsoft C# - Enfoque Prctico

Figura *.7: MF+$%$ "ara a&+ua#i;ar <i#a) ( # Da+aGri%3i 9 public &oid actuali'ar(ataHridMiew3lumno() 5 limpiar(ataHridMiew3lumno()2 3lumno(3) o3lumn(3) 8 new 3lumno(3)()2 o3rreglo3lumno 8 o3lumn(3).obtener(atosEnList(o3rreglo3lumno)2 for (int posicion 8 92 posicion S 1ormulario*istema(e-enu.numero(e3lumno2 posicion 8 posicion B 1) 5 dataHridMiew3lumno.0ows.A%% ( o3rreglo3lumno>posicion?.alumno6id, o3rreglo3lumno>posicion?, o3rreglo3lumno>posicion?.e&aluacion<arcial1, o3rreglo3lumno>posicion?.e&aluacion<arcial;, o3rreglo3lumno>posicion?.promedio(e"rabajo, o3rreglo3lumno>posicion?.promedio1inal)2 : : Figura *.:: MF+$%$ #i!i(ar +$%a) #a) <i#a) ( # Da+aGri%3i 9 pri&ate &oid limpiar(ataHridMiew3lumno() 5 dataHridMiew3lumno.0ows. C# ar()2 : Figura *.1>: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 N$ a&+i$(

Ing. Javier Alberto Manrique Quionez

Pgina ;L

Microsoft C# - Enfoque Prctico

Figura *.11: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( I() r+ar G Bu)&ar

Figura *.1*: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( I() r+ar G Guar%ar

Ing. Javier Alberto Manrique Quionez

Pgina ;O

Microsoft C# - Enfoque Prctico

Figura *.1-: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 M$%i<i&ar G Guar%ar

Figura *.1.: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( M$%i<i&ar G C$(<ir!ar

Ing. Javier Alberto Manrique Quionez

Pgina ;Q

Microsoft C# - Enfoque Prctico

Figura *.10: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 C$()u#+ar R gi)+r$

Figura *.12: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 E#i!i(ar G C$(<ir!ar

Ing. Javier Alberto Manrique Quionez

Pgina ;R

Microsoft C# - Enfoque Prctico

Figura *.14: F$r!u#ari$ F$r!u#ari$Li)+a%$

Figura *.17: C'%ig$ % #a a"#i&a&i'( G ABCMA&&i$( .,digo de la 3plicaci,n F 34.-accion


namespace AB !"DA# $ public class AB !Action $ public static int N#_A T%#N & 1' public static int A T%#N_B(S A) & 2' public static int A T%#N_%NS*)TA) & +' public static int A T%#N_!#D%F% A) & ,' public static int A T%#N_ AN *-A) & .' public static int A T%#N_*-%!%NA) & /'

Ing. Javier Alberto Manrique Quionez

Pgina =9

Microsoft C# - Enfoque Prctico


public static int A T%#N_ #NS(-TA & 0' 1 1

Figura *.1:: C'%ig$ % #a a"#i&a&i'( 1 C#a) E(+i%a% A#u!($ using *$stem2 namespace 34.-$(3) 5 public class 3lumno 5 public int alumno6id public *tring apellido7ombre public double e&aluacion<arcial1 public double e&aluacion<arcial; public double promedio(e"rabajo public double promedio1inal public 3lumno ( ) 5 this.alumno6id 8 92 this.apellido7ombre 8 null2 this.e&aluacion<arcial1 8 92 this.e&aluacion<arcial; 8 92 this.promedio(e"rabajo 8 92 : public 3lumno ( int alumno6id, *tring apellido7ombre, double e&aluacion<arcial1, double e&aluacion<arcial;, double promedio(e"rabajo, double promedio1inal ) 5 this.alumno6id 8 alumno6id2 this.apellido7ombre 8 apellido7ombre2 this.e&aluacion<arcial1 8 e&aluacion<arcial12 this.e&aluacion<arcial; 8 e&aluacion<arcial;2 this .promedio(e"rabajo 8 promedio(e"rabajo2 this .promedio1inal 8 promedio1inal2 : public &oid set<romedio1inal ( )
5 this.promedio1inal 8(this.e&aluacion<arcial1 B this.e&aluacion<arcial; B this .promedio(e"rabajo) D =2

5get2set2: 5get2set2: 5get2set2: 5get2set2: 5get2set2: 5get2set2:

: public o&erride *tring "o*tring ( ) 5 return apellido7ombre2 : : : Figura *.*>: C'%ig$ % #a a"#i&a&i'( 1 MF+$%$ Pri(&i"a# using *$stem2 using *$stem.Aindows.1orms2 namespace 34.-$(3) 5 static class <rogram 5 static &oid -ain ( ) 3lumno>? o3rreglo3lumno 8 new 3lumno>199?2 for (int i 8 92 i S 1992 i 8 i B 1) 5 o3rreglo3lumno>i? 8 new 3lumno()2 : 3pplication.EnableMisual*t$les()2

Ing. Javier Alberto Manrique Quionez

Pgina =1

Microsoft C# - Enfoque Prctico

3pplication.*et.ompatible"e t0endering(efault(false)2 3pplication.0un(new 1ormulario*istema(e-enu(o3rreglo3lumno))2 : : :

Figura *.*1: C'%ig$ % #a a"#i&a&i'( 1 C#a) A#u!($DAO using *$stem2 namespace 34.-$(3) 5 public class 3lumno(3) 5 public int insertar0egistro(3lumno>? o3rreglo3lumno, 3lumno o3lumno, int numero(e3lumno) 5 o3rreglo3lumno>numero(e3lumno? 8 o3lumno2 numero(e3lumno 8 numero(e3lumno B 12 return numero(e3lumno2 :

public 3lumno consultar0egistro(3lumno>? o3rreglo3lumno, int numero(e3lumno, int bus!ueda) 5 3lumno o3lumno 8 new 3lumno()2 for (int i 8 92 i S numero(e3lumno2 i 8 i B 1) 5 if (o3rreglo3lumno>i?.alumno6id88bus!ueda) 5 o3lumno8o3rreglo3lumno>i?2 return o3lumno2 : : return null2 : public 4oolean modificar0egistro (3lumno>? o3rreglo3lumno, int numero(e3lumno, int bus!ueda, 3lumno o3lumno ) 5 int indice8buscar0egistro(o3rreglo3lumno,numero(e3lumno, bus!ueda)2 o3rreglo3lumno>indice?8o3lumno2 return true2 : public int bus!ueda) 5 int indice 8 buscar0egistro(o3rreglo3lumno, numero(e3lumno, bus!ueda)2 for (int i 8 indice2 i S numero(e3lumnoF12 i 8 i B 1) 5 o3rreglo3lumno>i?8o3rreglo3lumno>iB1?2 : numero(e3lumno 8 numero(e3lumno F 12 return numero(e3lumno2 : public int buscar0egistro(3lumno>? o3rreglo3lumno, int numero(e3lumno,int bus!ueda) 5 3lumno o3lumno 8 new 3lumno()2 for (int i 8 92 i S numero(e3lumno2 i 8 i B 1) 5 if (o3rreglo3lumno>i?.alumno6id88bus!ueda) eliminar0egistro(3lumno>? o3rreglo3lumno, int numero(e3lumno, int

Ing. Javier Alberto Manrique Quionez

Pgina =;

Microsoft C# - Enfoque Prctico

5 o3lumno8o3rreglo3lumno>i?2 return i2 : : return FRR2 : public 3lumno>? obtener(atosEnList(3lumno>? o3rreglo3lumno) 5 return o3rreglo3lumno2 : : :

Figura *.**: C'%ig$ % #a a"#i&a&i'( 1 F$r!u#ari$ ABCM6DAO using *$stem2 using *$stem.Aindows.1orms2 using *$stem.(rawing2 namespace 34.-$(3) 5 public partial class 1ormulario34.-$(3): 1orm 5 pri&ate int action 8 34.-3ction.7)63."I)72 3lumno>? o3rreglo3lumno2 public 1ormulario34.-$(3)(3lumno>? o3rreglo3lumno) 5 Initiali'e.omponent()2 this.o3rreglo3lumno 8 o3rreglo3lumno2 controlador(eE&entos4otones34.-()2 formatear(ataHridMiew()2 actuali'ar(ataHridMiew3lumno()2 : pri&ate &oid formatear(ataHridMiew() 5 DD<ara especificar la fuente utili'ada por las celdas de (ataHridMiew dataHridMiew3lumno.(efault.ell*t$le.1ont 8 new 1ont(@arial@, 1J)2 DD <ara cambiar mediante programaci,n el estilo de borde de todo el control (ataHridMiew dataHridMiew3lumno.4order*t$le 8 4order*t$le.1i ed*ingle2 DD <ara cambiar mediante programaci,n el color de la lEnea de la cuadrEcula dataHridMiew3lumno.Hrid.olor 8 .olor.4lue2 DD <ara indicar la forma de selecci,n de las filas dataHridMiew3lumno.*election-ode 8 (ataHridMiew*election-ode.1ull0ow*elect2 DD <ara especificar los colores de primer plano $ de fondo de celdas seleccionadas de
(ataHridMiew

dataHridMiew3lumno.(efault.ell*t$le.*election1ore.olor 8 .olor.4lacT2 dataHridMiew3lumno.(efault.ell*t$le.*election4acT.olor 8 .olor.4lue2 DD <ara establecer estilos de filas alternas mediante programaci,n

Ing. Javier Alberto Manrique Quionez

Pgina ==

Microsoft C# - Enfoque Prctico

dataHridMiew3lumno.0ows(efault.ell*t$le.4acT.olor 8 .olor.Light4lue2 dataHridMiew3lumno.3lternating0ows(efault.ell*t$le.4acT.olor 8 .olor.Ahite2 DD <ara especificar la alineaci,n del te to de celdas de (ataHridMiew dataHridMiew3lumno..olumns>@.olumn3lumno6id@?.(efault.ell*t$le.3lignment 8 (ataHridMiew.ontent3lignment.-iddle0ight2
dataHridMiew3lumno..olumns>@.olumn3pellido7ombre@?.(efault.ell*t$le.3lignment 8 (ataHridMiew.ontent3lignment.-iddleLeft2 dataHridMiew3lumno..olumns>@.olumnE&aluacionparcial1@?.(efault.ell*t$le.3lignment 8 (ataHridMiew.ontent3lignment.-iddle0ight2 dataHridMiew3lumno..olumns>@.olumnE&aluacionparcial;@?.(efault.ell*t$le.3lignment 8 (ataHridMiew.ontent3lignment.-iddle0ight2 dataHridMiew3lumno..olumns>@.olumn<romedio(etrabajo@?.(efault.ell*t$le.3lignment 8 (ataHridMiew.ontent3lignment.-iddle0ight2 dataHridMiew3lumno..olumns>@.olumn<romedio1inal@?.(efault.ell*t$le.3lignment 8 (ataHridMiew.ontent3lignment.-iddle0ight2

DD <ara especificar los colores de primer plano $ de fondo de las celdas de (ataHridMiew dataHridMiew3lumno.(efault.ell*t$le.1ore.olor 8 .olor.4lacT2 dataHridMiew3lumno.(efault.ell*t$le.4acT.olor 8 .olor.4eige2 : pri&ate 3lumno get)bjeto3lumno() 5 DD lee los datos de las cajas de te to $ los pone en o3lumno 3lumno o3lumno 8 new 3lumno()2 o3lumno.alumno6id 8 int.<arse(te t4o 3lumno6id."e t)2 o3lumno.apellido7ombre 8 te t4o 3pellido7ombre."e t2 o3lumno.e&aluacion<arcial1 8 double.<arse(te t4o E&aluacion<arcial1."e t)2 o3lumno.e&aluacion<arcial; 8 double.<arse(te t4o E&aluacion<arcial;."e t)2 o3lumno.promedio(e"rabajo 8 double.<arse(te t4o <romedio(e"rabajo."e t)2 return o3lumno2 : pri&ate &oid set)bjeto3lumno(3lumno o3lumno) 5 DD <one los datos del objeto o3lumno en las cajas de te to te t4o 3lumno6id."e t 8 o3lumno.alumno6id B @@2 te t4o 3pellido7ombre."e t 8 o3lumno.apellido7ombre B @@2 te t4o E&aluacion<arcial1."e t 8 o3lumno.e&aluacion<arcial1 B @@2 te t4o E&aluacion<arcial;."e t 8 o3lumno.e&aluacion<arcial; B @@2 te t4o <romedio(e"rabajo."e t 8 o3lumno.promedio(e"rabajo B @@2 : pri&ate &oid limpiar(ataHridMiew3lumno() 5 dataHridMiew3lumno.0ows..lear()2 : pri&ate &oid actuali'ar(ataHridMiew3lumno() 5 DD llena el dataHridMiew con los datos del arreglo de objetos limpiar(ataHridMiew3lumno()2 3lumno(3) o3lumn(3) 8 new 3lumno(3)()2 o3rreglo3lumno 8 o3lumn(3).obtener(atosEnList(o3rreglo3lumno)2 for(int posicion 8 92 posicion S 1ormulario*istema(e-enu.numero(e3lumno2 posicion 8 posicion B 1) 5 dataHridMiew3lumno.0ows.3dd( o3rreglo3lumno>posicion?.alumno6id, o3rreglo3lumno>posicion?, o3rreglo3lumno>posicion?.e&aluacion<arcial1, o3rreglo3lumno>posicion?.e&aluacion<arcial;,

Ing. Javier Alberto Manrique Quionez

Pgina =G

Microsoft C# - Enfoque Prctico

o3rreglo3lumno>posicion?.promedio(e"rabajo, o3rreglo3lumno>posicion?.promedio1inal )2 : : pri&ate &oid dataHridMiew3lumno6-ouse.licT(object sender, -ouseE&ent3rgs e) 5 if (e..licTs881UU 1ormulario*istema(e-enu.numero(e3lumnoP81) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if(fila*eleccionada V8 F1) 5 3lumno o3lumno*eleccionado 8 (3lumno)dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2 : : :

pri&ate &oid habilitar4otones34.-(4oolean c4uscar, 4oolean c7ue&o, 4oolean cHuardar, 4oolean cEditar, 4oolean cEliminar, 4oolean c.onsultar, 4oolean c.ancelar, 4oolean c*alir) 5 button4uscar.Enabled 8 c4uscar2 button7ue&o.Enabled 8 c7ue&o2 buttonHuardar.Enabled 8 cHuardar2 button-odificar.Enabled 8 cEditar2 buttonEliminar.Enabled 8 cEliminar2 button.onsultar.Enabled 8 c.onsultar2 button.ancelar.Enabled 8 c.ancelar2 button*alir.Enabled 8 c*alir2 : pri&ate &oid habilitar.ajas(e"e to(4oolean editable) 5 te t4o 3pellido7ombre.Enabled 8 editable2 te t4o E&aluacion<arcial1.Enabled 8 editable2 te t4o E&aluacion<arcial;.Enabled 8 editable2 te t4o <romedio(e"rabajo.Enabled 8 editable2 : pri&ate &oid limpiar.ajas(e"e to() 5 te t4o 3pellido7ombre."e t 8 @@2 te t4o E&aluacion<arcial1."e t 8 @@2 te t4o E&aluacion<arcial;."e t 8 @@2 te t4o <romedio(e"rabajo."e t 8 @@2 : pri&ate &oid button7ue&o6.licT(object sender, E&ent3rgs e) 5 dataHridMiew3lumno.Enabled 8 false2 te t4o 3lumno6id."e t 8 @@2 limpiar.ajas(e"e to()2 action 8 34.-3ction.3."I)764+*.302 controlador(eE&entos4otones34.-()2 te t4o 3lumno6id.Enabled 8 true2 te t4o 3lumno6id.1ocus()2 : pri&ate &oid button4uscar6.licT(object sender, E&ent3rgs e) 5 if (action 88 34.-3ction.3."I)764+*.30)

Ing. Javier Alberto Manrique Quionez

Pgina =J

Microsoft C# - Enfoque Prctico

5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 int bus!ueda 8 Int=;.<arse(te t4o 3lumno6id."e t)2 3lumno o3lumno 8 o3lumno(3).consultar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, bus!ueda)2 if (o3lumno V8 null) 5 -essage4o .*how(@0egistro e istente VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : else 5 action 8 34.-3ction.3."I)76I7*E0"302 te t4o 3lumno6id.Enabled 8 false2 habilitar.ajas(e"e to(true)2 controlador(eE&entos4otones34.-()2 te t4o 3pellido7ombre.1ocus()2 : : else 5 if (action 88 34.-3ction.3."I)76.)7*+L"3) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 int bus!ueda 8 Int=;.<arse(te t4o 3lumno6id."e t)2 3lumno o3lumno 8 o3lumno(3).consultar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, bus!ueda)2 if (o3lumno V8 null) 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 set)bjeto3lumno(o3lumno)2 : else 5 -essage4o .*how(@7o se encuentra VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : : : pri&ate &oid buttonHuardar6.licT(object sender, E&ent3rgs e) 5 if (action 88 34.-3ction.3."I)76I7*E0"30) 5 if (-essage4o .*how(@W(esea guardarloX@, @.onfirme el guardado@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 1ormulario*istema(e-enu.numero(e3lumno8 o3lumno(3).insertar0egistro(o3rreglo3lumno, get)bjeto3lumno(), 1ormulario*istema(e-enu.numero(e3lumno)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 button7ue&o.1ocus()2 : else 5 limpiar.ajas(e"e to()2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : :

Ing. Javier Alberto Manrique Quionez

Pgina =L

Microsoft C# - Enfoque Prctico

else 5 if (action 88 34.-3ction.3."I)76-)(I1I.30) 5 if (-essage4o .*how(@Est seguro de guardar los datosX@, @.onfirme el guardado@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 3lumno o3lumno 8 new 3lumno()2 if (o3lumno(3).modificar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, int.<arse(te t4o 3lumno6id."e t), get)bjeto3lumno())) 5 -essage4o .*how(@)peraci,n e itosa ... VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : else 5 -essage4o .*how(@7o se pudo guardar el registro ...VVV@)2 : : else 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : : : pri&ate &oid button-odificar6.licT(object sender, E&ent3rgs e) 5 if (1ormulario*istema(e-enu.numero(e3lumnoP81) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if(fila*eleccionada V8 F1 UU (te t4o 3lumno6id."e t.Length) P 9) 5 te t4o 3pellido7ombre.1ocus()2 action 8 34.-3ction.3."I)76-)(I1I.302 controlador(eE&entos4otones34.-()2 : else 5 -essage4o .*how(@7o se ha seleccionado un registro ...VVV@)2 : : else 5 -essage4o .*how(@7o e isten registros ...VVV@)2 : : pri&ate &oid button.ancelar6.licT(object sender, E&ent3rgs e) 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 button7ue&o.1ocus()2 : pri&ate &oid button*alir6.licT(object sender, E&ent3rgs e) 5 (ialog0esult dialogo 8 -essage4o .*how(@W(esea cerrar el formularioX@, @.uidado@, -essage4o 4uttons.Yes7o)2 if(dialogo 88 (ialog0esult.Yes) 5 (ispose()2 : :

Ing. Javier Alberto Manrique Quionez

Pgina =O

Microsoft C# - Enfoque Prctico

pri&ate &oid controlador(eE&entos4otones34.-() 5 if (action 88 34.-3ction.7)63."I)7) 5 te t4o 3lumno6id."e t 8 @@2 limpiar.ajas(e"e to()2 te t4o 3lumno6id.Enabled 8 false2 habilitar.ajas(e"e to(false)2 habilitar4otones34.-(false, true, false, true, true, true, false, true)2 dataHridMiew3lumno.Enabled 8 true2 button7ue&o.1ocus()2 : else 5 if (action 88 34.-3ction.3."I)764+*.30) 5 habilitar.ajas(e"e to(false)2 limpiar.ajas(e"e to()2 habilitar4otones34.-(true, false, false, false, false, false, true, false)2 : else 5 if (action 88 34.-3ction.3."I)76I7*E0"30) 5 limpiar.ajas(e"e to()2 te t4o 3lumno6id.Enabled 8 false2 habilitar4otones34.-(false, false, true, false, false, false, true, false)2 : else 5 if (action 88 34.-3ction.3."I)76-)(I1I.30) 5 habilitar.ajas(e"e to(true)2 habilitar4otones34.-(false, false, true, false, false, false, true, false)2 te t4o 3lumno6id.Enabled 8 false2 : else 5 if (action 88 34.-3ction.3."I)76ELI-I730) 5 actuali'ar(ataHridMiew3lumno()2 : else 5 if (action 88 34.-3ction.3."I)76.)7*+L"3) 5 habilitar.ajas(e"e to(false)2 habilitar4otones34.-(true, false, false, false, false, false, true,
false)2

te t4o 3lumno6id.Enabled 8 true2 : :


: : :

: : pri&ate &oid buttonEliminar6.licT(object sender, E&ent3rgs e) 5 if (1ormulario*istema(e-enu.numero(e3lumnoP81) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if(fila*eleccionada V8 F1 UU (te t4o 3lumno6id."e t.Length) P 9) 5 if(-essage4o .*how(@Est seguro de eliminar los datosX@, @.onfirme la eliminaci,n@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 3lumno o3lumno 8 new 3lumno()2

Ing. Javier Alberto Manrique Quionez

Pgina =Q

Microsoft C# - Enfoque Prctico

int bus!ueda 8 int.<arse(te t4o 3lumno6id."e t)2 o3lumno8o3lumno(3).consultar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, bus!ueda)2 if(o3lumno V8 null) 5 1ormulario*istema(e-enu.numero(e3lumno8 o3lumno(3).eliminar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, bus!ueda)2 -essage4o .*how(@*e elimin, el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : else 5 -essage4o .*how(@7o se pudo eliminar el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 -essage4o .*how(@7o se pudo eliminar el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2

: : else 5 -essage4o .*how(@*e tiene !ue seleccionar un registro ...VVV@)2 : : else 5 -essage4o .*how(@7o e isten registros ...VVV@)2 : : pri&ate &oid 1ormulario34.-$(3)$4(61orm.losing(object sender, 1orm.losingE&ent3rgs e) 5 (ialog0esult dialogo 8 -essage4o .*how(@W(esea cerrar el formularioX@, @.uidado@, -essage4o 4uttons.Yes7o)2 if(dialogo 88 (ialog0esult.7o) 5 e..ancel 8 true2 : else 5 if(dialogo 88 (ialog0esult.7o) 5 e..ancel 8 false2 : : : pri&ate &oid dataHridMiew3lumno6Ce$(own(object sender, Ce$E&ent3rgs e) 5 if(e.Ce$.ode 88 Ce$s.(own) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde B 12 if(fila*eleccionada P8 dataHridMiew3lumno.0ow.ount) 5 fila*eleccionada 8 fila*eleccionada F 12 : else 5 3lumno o3lumno*eleccionado 8 (3lumno) dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2

Ing. Javier Alberto Manrique Quionez

Pgina =R

Microsoft C# - Enfoque Prctico

: : if(e.Ce$.ode 88 Ce$s.+p) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde F 12 if(fila*eleccionada S8 F1) 5 fila*eleccionada 8 fila*eleccionada B 12 : else 5 3lumno o3lumno*eleccionado 8 (3lumno) dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2 : : : pri&ate &oid button<romedio6.licT(object sender, E&ent3rgs e) 5 3lumno(3) o3lumno(3)8new 3lumno(3)()2 o3lumno(3).calcular<romedio1inal(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno)2 actuali'ar(ataHridMiew3lumno()2 : pri&ate &oid button.onsultar6.licT(object sender, E&ent3rgs e) 5 dataHridMiew3lumno..lear*election()2 limpiar.ajas(e"e to()2 te t4o 3lumno6id."e t 8 @@2 te t4o 3lumno6id.Enabled 8 true2 te t4o 3lumno6id.1ocus()2 action 8 34.-3ction.3."I)76.)7*+L"32 controlador(eE&entos4otones34.-()2 : pri&ate &oid buttonImprimir6.licT(object sender, E&ent3rgs e) 5 1ormulario0eporte o1ormulario0eporte8new 1ormulario0eporte(o3rreglo3lumno)2 o1ormulario0eporte.*how()2 : : : Figura *.*-: C'%ig$ % #a a"#i&a&i'( 1 F$r!u#ari$ Li)+a%$ using *$stem2 using *$stem.Aindows.1orms2 namespace 34.-$(3) 5 public partial class 1ormularioListado: 1orm 5 3lumno>? o3rreglo3lumno2 public 1ormularioListado(3lumno>? o3rreglo3lumno) 5 Initiali'e.omponent()2 this.o3rreglo3lumno8o3rreglo3lumno2 : pri&ate &oid buttonListado6.licT(object sender, E&ent3rgs e) 5 rich"e t4o Listado."e t8@3lumno6id 3pellido $ 7ombre[n@2 for (int i892 iS1ormulario*istema(e-enu.numero(e3lumno2 i8iB1) 5 rich"e t4o Listado.3ppend"e t(o3rreglo3lumno>i?.alumno6idB@[t@)2 rich"e t4o Listado.3ppend"e t(o3rreglo3lumno>i?.apellido7ombreB@[n@)2 :

Ing. Javier Alberto Manrique Quionez

Pgina G9

Microsoft C# - Enfoque Prctico

: : :

Figura *.*.: 3 (+a(a % 3 (+a(aC

"r$"i %a% ) "ara "r$gra!ar

5 (+$ <$r!&#$)i(g @E5 (+$ C rrar

Figura *.*0: F$r!u#ari$ ABCM 1 C rrar 5 (+a(a

Ing. Javier Alberto Manrique Quionez

Pgina G1

Microsoft C# - Enfoque Prctico

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioABCM-Arreglos Propiedades

CAPTULO REPORTES CON ARREGLO DE OBJETOS EN C#

Ing. Javier Alberto Manrique Quionez

Pgina G;

Microsoft C# - Enfoque Prctico

ARREGLO DE OBJETOS H REPORTES CON CRHSTAL REPORT


.r$stal 0eports es una aplicaci,n de inteligencia empresarial utili'ada para dise#ar $ generar informes desde una amplia gama de fuentes de datos (archi&o de $datos bases de datos). Marias aplicaciones, como -icrosoft Misual *tudio, inclu$en una &ersi,n )E- de .r$stal 0eports como una herramienta de prop,sito general para informesDreportes. <ara el desarrollo de ejemplo se utili'ar la aplicaci,n desarrollada en el .apEtuo = F *istema de mantenimiento 34.- de alumnos por lo !ue no se la describir en forma repetida. *e debe construir sistema de men principal (1orm*istema(e-enu) con las opciones 3lumnos $ 0eporte. La 1igura =.1 muestra el 1ormulario !ue contiene el sistema de men principal con las opciones 1ormulario 34.- $ 0eporte de alumnos. Figura -.1: F$r!u#ari$ Si)+ !a % ! (D

La 1igura =.; muestra la aplicaci,n en el e plorador de aplicaciones. 7ote algunos objetos nue&os como (ata*et3lumno. sd (.onjunto de datos F (ata*et) $ .r$stal0eporte3lumno.rpt (0eporte dise#ado utili'ando .r$stal 0eport). Figura -.*: A"#i&a&i'( ( # E/"#$ra%$r % S$#u&i$( )

Ing. Javier Alberto Manrique Quionez

Pgina G=

Microsoft C# - Enfoque Prctico

El c,digo del 1ormulario 1ormulario*istema(e-enu se &isuali'a en la 1igura =.=. Figura -.-: C'%ig$ % # F$r!u#ari$ F$r!u#ari$Si)+ !aD M (u

La 1igura =.G muestra la configuraci,n de pro$ecto, la cual tiene !ue ser personali'ada utili'ando como &ersi,n de .7E" 1rameworT destino el .7E" 1rameworT G. Figura -..: C$(<igura&i'( % # "r$6 &+$

Ing. Javier Alberto Manrique Quionez

Pgina GG

Microsoft C# - Enfoque Prctico

<ara crear el (ata*et3lumno (.onjunto de datos alumno) se debe seguir el siguiente procedimiento: Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregarF 7ue&oElemento. En la 1igura =.J nuestra lo indicado. Figura -.0: Agr gar (u 5$ # ! (+$

*eleccione (atos K .onjunto de datos. Escriba (ata*et3lumno como nombre del .onjunto de datos. En la 1igura =.L nuestra lo indicado. Figura -.2: S # &&i'( % %a+$) 1 C$(ju(+$ % %a+$)

Ing. Javier Alberto Manrique Quionez

Pgina GJ

Microsoft C# - Enfoque Prctico

Merifi!ue !ue se muestra el dise#ador de (ata*et. La 1igura =.O muestra el dise#ador de (ata*et. Figura -.4: Di) =a%$r % Da+aS +

En el rea de dise#o de (ata*et haga clic derecho $ seleccione del men conceptual 3gregar K "abla de datos. En la 1igura =.Q nuestra lo indicado. Figura -.7: S # &&i'( Agr gar 1 Ta?#a % %a+$)

Ing. Javier Alberto Manrique Quionez

Pgina GL

Microsoft C# - Enfoque Prctico

En el rea de dise#o de (ata*et seleccione el (ata"able $ haga clic derecho $ seleccione del men conceptual 3gregar K .olumna. En la 1igura =.R nuestra lo indicado. Figura -.:: S # &&i'( Agr gar 1 C$#u!(a

Merifi!ue !ue el dise#ador de .onjunto de datos ((ata*et) se &isualice como en la 1igura =.19, en la cual se se obser&a !ue se ha creado un (ata"able con cinco columnas ((ata.omun1, (ata.olumn;, (ata.olumn=, (ata.olumnG $ (ata.olumnJ) Figura -.1>: Da+aTa?# 1

<ara crear un reporte utili'ando .r$stal report se debe seguir el siguiente procedimiento:

Ing. Javier Alberto Manrique Quionez

Pgina GO

Microsoft C# - Enfoque Prctico

Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregar FP 7ue&oElemento. En la 1igura =.11 nuestra lo indicado. Figura -.11: Agr gar (u 5$ # ! (+$

. *eleccione 0eporting K .r$stal 0eports. Escriba .r$stal0eporte3lumno.rpt 0eporte. En la 1igura =.11 nuestra lo indicado. Figura -.11: S # &&i'( R "$r+i(g 1 Cr6)+a# R "$r+) como nombre del

Ing. Javier Alberto Manrique Quionez

Pgina GQ

Microsoft C# - Enfoque Prctico

*eleccione +sar asistente de informes FP Estndar $ haga clic en el bot,n de comando 3ceptar. En la 1igura =.1; nuestra lo indicado. Figura -.1*: S # &&i'( E)+E(%ar 1 B$+'( % &$!a(%$ A& "+ar

*eleccione en datos del pro$ecto 3().7E" (ata*ets F 34.-$(3).(ata*et3lumno F (ata"able1. Luego haga clic en el bot,n de comando indicado. . En la 1igura =.1= nuestra lo

Figura -.1-: Da+$) % # "r$6 &+$ ADO.NET Da+aS +)GABCM6DAO.Da+aS +A#u!($Da+aTa?# 1

Ing. Javier Alberto Manrique Quionez

Pgina GR

Microsoft C# - Enfoque Prctico

Merifi!ue !ue la &entana del 3sistente para la creaci,n de informes estndar se &isualice como en la 1igura =.1G. Luego haga clic en el bot,n de comando siguiente. Figura -.1.: A)i)+ (+ "ara #a &r a&i'( % i(<$r! ) )+E(%ar

*eleccione todos los campos del (ata"able1 haciendo clic en el bot,n de comando 1igura =.1J. muestra el asistente en la selecci,n de campos a mostrar. Figura -.10: S # &&i'( % &a!"$) a !$)+rar

. La

Ing. Javier Alberto Manrique Quionez

Pgina J9

Microsoft C# - Enfoque Prctico

Merifi!ue !ue la &entana del asistente para la creaci,n de informes estndar se &isualice como en la 1igura =.1L. Luego haga clic en el bot,n de comando 1inali'ar. Figura -.12: A)i)+ (+ "ara #a &r a&i'( % i(<$r! ) )+E(%ar

Merifi!ue !ue la &entana del reporte se &isualice como en la 1igura =.1O.

Figura -.14: 3 (+a(a % r "$r+

<ara crear un formulario para desplegar el reporte se debe seguir el siguiente procedimiento:

Ing. Javier Alberto Manrique Quionez

Pgina J1

Microsoft C# - Enfoque Prctico

Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregarF 7ue&oElemento. En la 1igura =.1Q nuestra lo indicado. Figura -.17: Agr gar (u 5$ # ! (+$

. *eleccione Aindows 1orms K Aindows 1orms. Escriba 1ormulario0eporte como nombre del 1ormulario. En la 1igura =.1R nuestra lo indicado. Figura -.1:: S # &&i'( 8i(%$9) F$r!)G 8i(%$9) F$r!)

Ing. Javier Alberto Manrique Quionez

Pgina J;

Microsoft C# - Enfoque Prctico

(el cuadro de herramientas arrastre el control .r$stal0eportMiewer. En la 1igura =.;9 nuestra lo indicado. Figura -.*>: S # &&i'( % &$(+r$# Cr6)+a#R "$r+3i 9 r a# F$r!u#ari$R "$r+

Merifi!ue !ue el 1ormulario0eporte $ el icono se#alado por la fecha se &isualicen como en la 1igura =.;1. Este icono acti&a el -en conceptual "areas del .r$stal0eportMiewer Figura -.*1: 3 (+a(a F$r!u#ari$R "$r+

Ing. Javier Alberto Manrique Quionez

Pgina J=

Microsoft C# - Enfoque Prctico

(el -en conceptual FP "areas del .r$stal0eportMiewer seleccione IE# gir u( i(<$r! Cr6)+a#\] tal como se presenta en la 1igura =.;;. Figura -.** M (D &$(& "+ua#GJTar a) % Cr6)+aR "$r+3i 9 r

En Elegir un informe de .r$stal K cristal0eportMiewer1 seleccione .r$stalreport1.rpt tal como se presenta en la 1igura =.;=. Figura -.*-: M (D &$(& "+ua# +ar a) % Cr6)+a#r "$r+3i 9 r &$( ) # &&i'( % r "$r+

Merifi!ue !ue el 1ormulario0eporte.cs se presente como en la 1igura =.;G

Ing. Javier Alberto Manrique Quionez

Pgina JG

Microsoft C# - Enfoque Prctico

Figura -.*.: 3i)+a % # <$r!u#ari$ F$r!u#ari$R "$r+ .&)

<ulse 1O ingrese el c,digo del 1ormulario0eporte el cual se presenta en la 1igura =.;J. Figura -.*0: C'%ig$ % # F$r!u#ari$R "$r+

Naga docle clic en el objeto app.config del E plorador de soluciones. En la 1igura =.;L. se &isuali'a el objeto app..onfig. Figura -.*2: O?j +$ a"".C$(<ig ( # /"#$ra%$r % )$#u&i$( )

Ing. Javier Alberto Manrique Quionez

Pgina JJ

Microsoft C# - Enfoque Prctico

3gregue el siguiente c,digo en el objeto app.config. En la 1igura =.;O. el c,digo a agregarse en el objeto app..onfig. Esto se reali'a siempre en cuando no corre la aplicaci,n. Figura -.*4: C'%ig$ a agr gar ( # O?j +$ a"".C$(<ig

Ejecute el pro$ecto $ &erifi!ue !ue el reporte se &isualice como en la 1igura =.;Q. Figura -.*7: Ej &u&i'( % # r "$r+

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioABCM-Arreglos Propiedades con reporte

Ing. Javier Alberto Manrique Quionez

Pgina JL

Microsoft C# - Enfoque Prctico

CAPTULO . REPORTES CON OBJETOS EN C# @CASO FACTURAGDETALLEC

Ing. Javier Alberto Manrique Quionez

Pgina JO

Microsoft C# - Enfoque Prctico

REPORTES CON OBJETOS EN C#


<ara el desarrollo de ejemplo se utili'ar la aplicaci,n *istema de 1acturaci,n basada en formularios -aestroF(etalle proporcionada por el docente !ue se encuentra en la carpeta 1ormulario-aestro(etalleMenta.on0eportesFP1ormulario-aestro(etalleMenta F *implificado. La 1igura G.1 muestra el formulario Menta $ la 1igura G.; muestra el 1ormulario MentaF(etalle despu%s de su desarrollo. *e han ingresado datos para poder mostrar su funcionamiento. Figura ..1: F$r!u#ari$ 3 (+a

Figura ..*: F$r!u#ari$ 3 (+aG% +a##

En la 1igura G.= se muestra el e plorador de soluciones donde se &isuali'an todos los objetos utili'ados al final del desarrollo de la aplicaci,n

Ing. Javier Alberto Manrique Quionez

Pgina JQ

Microsoft C# - Enfoque Prctico

Figura ..-: E/"#$ra%$r % )$#u&i$( )

En la 1igura G.G se muestra el diagrama de clases donde se &isuali'a el diagrama de clases despu%s del desarrollo de la aplicaci,n. Figura ...: Diagra!a % C#a) )

Ing. Javier Alberto Manrique Quionez

Pgina JR

Microsoft C# - Enfoque Prctico

La 1igura G.J muestra la configuraci,n de pro$ecto, la cual tiene !ue ser personali'ada utili'ando como &ersi,n de .7E" 1rameworT destino: el ^.7E" 1rameworT G]. Esto se reali'a haciendo en el -en <rincipal del Misual *tudio ;919 <ro$ectoFP<ropiedades Figura ..0: A"#i&a&i'( ( # /"#$ra%$r % )$#u&i$( )

En la 1igura G.L se muestra la configuraci,n de la aplicaci,n !ue se reali'a en el archi&o app.config. Esto permite aseguran !ue la aplicaci,n corra con &ersiones anteriores de 1rameworT. S$#$ !$%i<iAu # &'%ig$ % a"".&$(<ig )i ) ( & )ari$ @($ &$rr #a a"#i&a&i'( "$r &u )+i$( ) % 5 r)i'( % 3SG*>1> $ Cr6)+a# R "$r+C. Figura ..2: C'%ig$ % # ar&Ki5$ a"".C$(<ig

<ara el desarrollo del ejemplo se proporciona la carpeta !ue contiene la aplicaci,n !ue ser terminada $ posteriormete ejecutada. <ara agregar un .onjunto de datos (data*et) se tienen !ue reali'ar las siguientes acti&idades:

Ing. Javier Alberto Manrique Quionez

Pgina L9

Microsoft C# - Enfoque Prctico

Naga clic derecho en *istemaMenta &isuali'a en la 1igura G.O.

*eleccione

3gregarFP7ue&o elemento,

tal como se

Figura ..4: S # &&i'( "ara agr gar u( (u 5$ # ! (+$

En agregar nue&o elemento seleccione datos en <lantillas instaladas $ .onjunto de datos ((ata*et) en Elementos de Misual ./. *eleccione como se presenta en la 1igura G.Q. Luego haga clic en el bot,n de comando 3gregar. Figura *.7: Di) =a%$r % Da+aS +

Ing. Javier Alberto Manrique Quionez

Pgina L1

Microsoft C# - Enfoque Prctico

Merifi!ue !ue (ise#ador de .onjunto de datos ((ata*et) se presente como en la 1igura G.R. Figura ..:: Di) =a%$r % C$(ju(+$ % Da+$) @Da+aS +C

En el rea de dise#o del .onjunto de datos ((ata*et) haga clic derecho $ seleccione del men conceptual 3gregar KP "abla de datos ((ata "able). En la 1igura G.19 nuestra lo indicado. Figura ..1>: S # &&i'( Agr gar 1 Ta?#a % %a+$) @Da+a +a?# C

Ing. Javier Alberto Manrique Quionez

Pgina L;

Microsoft C# - Enfoque Prctico

En el rea de dise#o del .onjunto de datos ((ata*et) seleccione el objeto Da+aTa?# 1 $ luego haga clic derecho $ seleccione del -en .onceptual 3gregar K .olumna. En la 1igura G.11 nuestra lo indicado. 0epita el proceso G &eces para crear G columnas. Figura ..11: S # &&i'( Agr gar 1 C$#u!(a

Merifi!ue !ue el dise#ador del .onjunto de (atos ((ata*et) se &isualice como en la 1igura G.1;, en la cual se obser&a !ue se ha creado un (ata"able con cuatro columnas ((ata.olumn1, (ata.olumn;, (ata.olumn= $ (ata.olumnG). Luego grabar el (ata"able. Figura ..1*: Da+aTa?# 1

<ara crear un reporte utili'ando .r$stal 0eport se debe seguir el siguiente procedimiento:

Ing. Javier Alberto Manrique Quionez

Pgina L=

Microsoft C# - Enfoque Prctico

Nacer clic derecho en el pro$ecto *istemaMenta $ seleccione 3gregarFP7ue&o Elemento. En la 1igura G.1= nuestra lo indicado. Figura ..1-: Agr gar (u 5$ # ! (+$

. *eleccione 0eportingKP.r$stal 0eports. Luego escriba .r$stal0eporte1actura como nombre del 0eporte. En la 1igura G.1G nuestra lo indicado. Luego haga clic en el bot,n de comando 3gregar. Figura ..1.: S # &&i'( R "$r+i(g 1 Cr6)+a# R "$r+)

Ing. Javier Alberto Manrique Quionez

Pgina LG

Microsoft C# - Enfoque Prctico

En HalerEa de .r$stal 0eports seleccione +sar 3sistente de Informes. Luego elegir un asistente Estndar. 1inalmente haga clic en el bot,n de comando 3ceptar. En la 1igura G.1J nuestra lo indicado. Figura ..10: S # &&i'( % U)ar a)i)+ (+ % i(<$r! ) 6 A)i)+ (+ E)+E(%ar

*eleccione en datos del pro$ecto 3().7E" (ata*ets K *istemaMenta.data*etfactura F (ata"able1. Luego haga clic en el bot,n de comando indicado. . En la 1igura G.1L nuestra lo

Figura *.12: S # &&i'( % %a+$) "ara #a?$rar # i(<$r!

Ing. Javier Alberto Manrique Quionez

Pgina LJ

Microsoft C# - Enfoque Prctico

Merifi!ue !ue la Mentana del 3sistente para la creaci,n de informes estndar se &isualice como en la 1igura G.1O. Luego haga clic en el bot,n de comando *iguiente. Figura ..14: A)i)+ (+ "ara #a &r a&i'( % i(<$r! ) )+E(%ar

*eleccione todos los campos del (ata"able1 haciendo clic en el bot,n de comando 1igura G.1Q muestra el 3sistente en la selecci,n de campos a mostrar. Figura ..17: S # &&i'( % &a!"$) a !$)+rar

. La

Ing. Javier Alberto Manrique Quionez

Pgina LL

Microsoft C# - Enfoque Prctico

Merifi!ue !ue la &entana del asistente para la creaci,n de informes estndar se &isualice como en la 1igura G.1R. Luego haga clic en el bot,n de comando 1inali'ar. Figura ..1:: A)i)+ (+ "ara #a &r a&i'( % i(<$r! ) )+E(%ar

Merifi!ue !ue la &entana del reporte se &isualice como en la 1igura G.;9. Figura ..*>: 3 (+a(a % r "$r+

Ing. Javier Alberto Manrique Quionez

Pgina LO

Microsoft C# - Enfoque Prctico

Los parmetros son utilidades !ue nos permiten comunicar datos entre objetos. <ara agregar parmetros !ue nos permitan en&iar datos desde la aplicaci,n en ./ (1ormulario 1ormImprimir.cs) al reporte desarrollado en .r$stal 0eport se debe acti&ar el E plorador de campos. En el E plorador de campos haga clic derecho en campos de "arE! +r$) $ selecciones 7ue&o. La 1igura G.;1 muestra lo indicado. Figura ..*1: 3 (+a(a % r "$r+

En el formulario para crear un nue&o parmetro, en nombre (nombre del parmetro) escriba fecha $ en tipo (tipo de datos) seleccione 1echa. En Lista de &alores seleccione esttico. Luego haga clic en el bot,n de comando 3ceptar. La 1igura G.;; lo indicado.

Ing. Javier Alberto Manrique Quionez

Pgina LQ

Microsoft C# - Enfoque Prctico

Figura ..**: 3 (+a(a % r "$r+

3gregue los parmetros tal como se muestra en la 1igura G;.;=. .ada parmetro debe corresponder al tipo de dato segn el atributo de la clase respecti&a (Menta $Do Menta(etalle). Figura ..*-: E/"#$ra%$r % &a!"$)

3gregue objetos te to ( ), objetos lEnea ( ) $ objetos cuadro ( ) en la &entana de (ise#o del 0eporte. Esto se reali'a arrastrando los objetos del e plorador de campos (objetos te to, objetos $ objetos) hacia la &entana de (ise#o de reportes. Merifi!ue !ue el dise#o del reporte se &isualice como en la 1igura G.;G

Ing. Javier Alberto Manrique Quionez

Pgina LR

Microsoft C# - Enfoque Prctico

Figura ..*.: 3 (+a(a % %i) =a%$r % r "$r+ )

Nacer clic derecho en el pro$ecto *istemaMenta $ seleccione 3gregar F 7ue&o Elemento. En la 1igura G.;J nuestra lo indicado. Figura ..*0: Agr gar (u 5$ # ! (+$

. *eleccione Aindows 1ormsKPAindows 1orms. Escriba 1ormularioImprimir como nombre del 1ormulario. En la 1igura G.;L nuestra lo indicado.

Ing. Javier Alberto Manrique Quionez

Pgina O9

Microsoft C# - Enfoque Prctico

Figura ..*2: S # &&i'( 8i(%$9) F$r!)G 8i(%$9) F$r!)

(el cuadro de herramientas arrastre el control .r$stal0eportMiewer. En la 1igura G.;O nuestra lo indicado. Figura ..*4: S # &&i'( % &$(+r$# Cr6)+a#R "$r+3i 9 r a# F$r!u#ari$ F$r!I!"ri!ir

Ing. Javier Alberto Manrique Quionez

Pgina O1

Microsoft C# - Enfoque Prctico

Merifi!ue !ue el 1ormulario 1ormImprimir se &isualice como en la 1igura G.;Q. $ el icono se#alado por la fecha. Este icono acti&a el men conceptual "areas del .r$stal0eportMiewer Figura ..*7: 3 (+a(a F$r!u#ari$R "$r+

(el men conceptual "areas del .r$stal0eportMiewer ) # &&i$( Cr6)+a#\] tal como se presenta en la 1igura G.;R.

IE# gir u( i(<$r!

Figura ..*: M (D &$(& "+ua# +ar a) % Cr6)+aR "$r+3i 9 r

Merifi!ue !ue el 1ormImprimir.cs se presente como en la 1igura G.=9 Figura ..->: 3i)+a % # <$r!u#ari$ F$r!I!"ri!ir.&)

Ing. Javier Alberto Manrique Quionez

Pgina O;

Microsoft C# - Enfoque Prctico

Naga doble clic en el borde superior de la Mentana 1ormImprimir.cs >(ise#o?_ de la 1igura G.=1 para agregar c,digo en el e&ento Load de la &entana. Luego agregue el c,digo !ue se muestra en la 1igura G.=; Figura ..-1: C'%ig$ % # F$r!u#ari$ F$r!I!"ri!ir

Figura ..-*: C'%ig$ % # F$r!u#ari$ F$r!I!"ri!ir @C'%ig$C

Ing. Javier Alberto Manrique Quionez

Pgina O=

Microsoft C# - Enfoque Prctico

3 continuaci,n se presenta el c,digo de la .lase 1ormImprimir para !ue &erifi!ue lo anteriormente reali'ado. using *$stem2 using *$stem..ollections.Heneric2 using *$stem.Aindows.1orms2 namespace *istemaMenta1actura 5 public partial class 1ormImprimir: 1orm 5 Menta oMenta8new Menta()2 public 1ormImprimir(Menta oMenta) 5 this.oMenta8oMenta2 Initiali'e.omponent()2 : pri&ate &oid 1ormImprimir6Load(object sender, E&ent3rgs e) 5 (ata*et1actura o(ata*et1actura 8 new (ata*et1actura()2 for (int i 8 92 iSoMenta.ListMenta(etalle..ount2 iBB) 5 o(ata*et1actura."ables>9?.0ows.3dd(new object>? 5 oMenta.ListMenta(etalle>i?.cantidad."o*trin g(), oMenta.L istMenta(etalle>i?, oMenta.ListMenta(etalle>i?.pr ecio."o*tring(), oMenta.ListMenta(etalle>i?.subt otal."o*tring() :)2 :

Ing. Javier Alberto Manrique Quionez

Pgina OG

Microsoft C# - Enfoque Prctico

DD .reaci,n del objeto o.r$stal0eporte1actura .r$stal0eporte1actura o.r$stal0eporte1actura 8 new .r$stal0eporte1actura()2 DD .onfigurar el conjunto de datos (data*et) como origen de datos del reporte o.r$stal0eporte1actura.*et(ata*ource(o(ata*et1actura)2 DD personali'aci,n de parmetros o.r$stal0eporte1actura.*et<arameterMalue(@fecha@, oMenta.fecha)2 o.r$stal0eporte1actura.*et<arameterMalue(@documento6id@, oMenta.documento6id)2 o.r$stal0eporte1actura.*et<arameterMalue(@serie@, oMenta.serie)2 o.r$stal0eporte1actura.*et<arameterMalue(@numero@, oMenta.numero)2 o.r$stal0eporte1actura.*et<arameterMalue(@&enta6id@, oMenta.&enta6id)2 o.r$stal0eporte1actura.*et<arameterMalue(@cliente6id@, oMenta.o.liente.cliente6id)2 o.r$stal0eporte1actura.*et<arameterMalue(@cliente3pellido7ombre@, oMenta.o.liente.apellido7ombre)2 o.r$stal0eporte1actura.*et<arameterMalue(@direccion@, oMenta.o.liente.direccion)2 o.r$stal0eporte1actura.*et<arameterMalue(@&endedor6id@, oMenta.oMendedor.&endedor6id)2 o.r$stal0eporte1actura.*et<arameterMalue(@&endedor3pellido7ombre@, oMenta.oMendedor.apellido7ombre)2 o.r$stal0eporte1actura.*et<arameterMalue(@subtotal@, oMenta.subtotal)2 o.r$stal0eporte1actura.*et<arameterMalue(@IHM@, oMenta.IHM)2 o.r$stal0eporte1actura.*et<arameterMalue(@total@, oMenta.total)2 DD .onfigurar !ue el origen del reporte es el reporte o.r$stal0eporte1actura cr$stal0eportMiewer1.0eport*ource8o.r$stal0eporte1actura2 : : :

Ing. Javier Alberto Manrique Quionez

Pgina OJ

Microsoft C# - Enfoque Prctico

Merificar el e plorador de soluciones se muestre como en la 1igura G.==. Figura ..--: E/"#$ra%$r % )$#u&i$( )

Ing. Javier Alberto Manrique Quionez

Pgina OL

Microsoft C# - Enfoque Prctico

Ejecute el pro$ecto $ &erifi!ue !ue el reporte se &isualice como en la 1igura G.=G Figura ..-. Ej &u&i'( % # r "$r+

Ing. Javier Alberto Manrique Quionez

Pgina OO

Microsoft C# - Enfoque Prctico

3 continuaci,n se presenta el c,digo de la .lase Entidad Menta para !ue &erifi!ue lo anteriormente reali'ado. using *$stem2 using *$stem..ollections.Heneric2 namespace *istemaMenta1actura 5 public class Menta 5 public int &enta6id 5 set2 get2 : public *tring fecha 5 set2 get2 : public int documento6id 5 set2 get2 : public *tring serie 5 set2 get2 : public *tring numero 5 set2 get2 : public .liente o.liente 5 set2 get2 : public Mendedor oMendedor 5 set2 get2 : public int &endedor6id 5 set2 get2 : public double subtotal 5 set2 get2 : public double IHM 5 set2 get2 : public double total 5 set2 get2 : public ListSMenta(etalleP ListMenta(etalle 5 set2 get2: public double set*ubtotal(double sub"otal) 5 this.subtotal8this.subtotalBsub"otal2 return sub"otal2 : public &oid setIHM() 5 IHM8subtotal_9.;92 : public &oid set"otal() 5 total8subtotalBIHM2 : : : 3 continuaci,n se presenta el .,digo de la .lase Entidad Menta6(etalle para !ue &erifi!ue lo anteriormente reali'ado. using *$stem2 namespace *istemaMenta1actura 5 public class Menta(etalle 5 public int &enta6id

5 get2set2 : public int producto6id 5 get2set2 : public string descripcion 5 get2set2 : public int cantidad 5 get2set2 : public double precio 5 set2get2 :

public double subtotal2


public double get*ubtotal() 5 return subtotal2 : public &oid set*ubtotal() 5 subtotal8cantidad_precio2 : public o&erride string "o*tring() 5 return descripcion2 :

: : 3 continuaci,n se presenta el .,digo de la .lase Entidad .liente para !ue &erifi!ue lo anteriormente reali'ado.

Ing. Javier Alberto Manrique Quionez

Pgina OQ

Microsoft C# - Enfoque Prctico

using *$stem2 namespace *istemaMenta1actura 5 public class .liente 5 public int cliente6id public string apellido7ombre public string direccion :

5 get2set2 : 5 get2set2 : 5 get2set2 :

3 continuaci,n se presenta el .,digo de la .lase Entidad Mendedor para !ue &erifi!ue lo anteriormente reali'ado using *$stem2 using *$stem."e t2 namespace *istemaMenta1actura 5 public class Mendedor 5 public int &endedor6id 5get2set2: public *tring apellido7ombre5get2set2: : : 3 continuaci,n se presenta el .,digo de la .lase 1ormulario 1ormMenta para !ue &erifi!ue lo anteriormente reali'ado using *$stem2 using *$stem..ollections.Heneric2 using *$stem.Aindows.1orms2 namespace *istemaMenta1actura 5 public partial class 1ormMentas:1orm 5 Menta oMenta 8 new Menta()2 public 1ormMentas() 5 Initiali'e.omponent()2 acti&ar(esacti&ar4otones(false,false,true,false,false)2 acti&ar(esacti&a.uadros(e"e to(false)2 this.*tart<osition81orm*tart<osition..enter*creen2 button7ue&aMenta.1ocus()2 : public &oid acti&ar(esacti&a.uadros(e"e to(4oolean acti&a(esacti&a) 5 date"ime<icTer1echa.Enabled8acti&a(esacti&a2 te t4o (ocumento6id.Enabled8acti&a(esacti&a2 te t4o *erie.Enabled8acti&a(esacti&a2 te t4o 7umero.Enabled8acti&a(esacti&a2 te t4o Menta6id.Enabled8acti&a(esacti&a2 te t4o .liente6id.Enabled8acti&a(esacti&a2 te t4o .liente(ireccion.Enabled8acti&a(esacti&a2 te t4o .liente0+..Enabled8acti&a(esacti&a2 te t4o .liente3pellido7ombre.Enabled8acti&a(esacti&a2 te t4o Mendedor6id.Enabled8acti&a(esacti&a2 te t4o Mendedor3pellido7ombre.Enabled8acti&a(esacti&a2 te t4o *ub"otal.Enabled8acti&a(esacti&a2 te t4o IHM.Enabled8acti&a(esacti&a2 te t4o "otal.Enabled8acti&a(esacti&a2 : public &oid acti&ar(esacti&ar4otones(4oolean agregarMenta(etalle, 4oolean eliminarMenta(etalle, 4oolean nue&aMenta, 4oolean reiniciarMenta, 4oolean imprimir1actura) 5 button3gregarMenta(etalle(etalle.Enabled8agregarMenta(etalle2 buttonEliminarMenta(etalle.Enabled8eliminarMenta(etalle2

Ing. Javier Alberto Manrique Quionez

Pgina OR

Microsoft C# - Enfoque Prctico

button7ue&aMenta.Enabled8nue&aMenta2 button0einiciarMenta.Enabled8reiniciarMenta2 buttonImprimir1actura.Enabled8imprimir1actura2 : public &oid limpiar(ataHridMiew(etalle() 5 dataHridMiewMenta(etalle.0ows..lear()2 : public &oid limpiar)bjetos() 5 date"ime<icTer1echa."e t 8 @@2 te t4o (ocumento6id."e t 8 @@2 te t4o *erie."e t 8 @@2 te t4o 7umero."e t 8 @@2 te t4o Menta6id."e t 8 @@2 te t4o .liente6id."e t 8 @@2 te t4o .liente3pellido7ombre."e t 8 @@2 te t4o .liente(ireccion."e t 8 @@2 te t4o .liente0+.."e t 8 @@2 te t4o Mendedor6id."e t 8 @@2 te t4o Mendedor3pellido7ombre."e t 8 @@2 te t4o *ub"otal."e t 8 @@2 te t4o IHM."e t 8 @@2 te t4o "otal."e t 8 @@2 limpiar(ataHridMiew(etalle()2 : pri&ate Menta leer)bjetoMenta(Menta oMenta) 5 .liente o.liente 8 new .liente()2 Mendedor oMendedor 8 new Mendedor()2 ListSMenta(etalleP oListMenta(etalle 8 new ListSMenta(etalleP()2 oMenta.&enta6id 8 Int=;.<arse(te t4o Menta6id."e t)2 oMenta.fecha 8 date"ime<icTer1echa."e t2 oMenta.documento6id 8 Int=;.<arse(te t4o (ocumento6id."e t)2 oMenta.serie 8 te t4o *erie."e t2 oMenta.numero 8 te t4o 7umero."e t2 o.liente.cliente6id 8 Int=;.<arse(te t4o .liente6id."e t)2 o.liente.apellido7ombre 8 te t4o .liente3pellido7ombre."e t2 o.liente.direccion 8 te t4o .liente(ireccion."e t2 oMenta.o.liente 8 o.liente2 oMendedor.&endedor6id 8 Int=;.<arse(te t4o Mendedor6id."e t)2 oMendedor.apellido7ombre 8 te t4o Mendedor3pellido7ombre."e t2 oMenta.oMendedor 8 oMendedor2 oMenta.subtotal 8 (ouble.<arse(te t4o *ub"otal."e t)2 oMenta.IHM 8 (ouble.<arse(te t4o IHM."e t)2 oMenta.total 8 (ouble.<arse(te t4o "otal."e t)2

int count 8 dataHridMiewMenta(etalle.0ows..ount2 for (int i 8 92 i S count2 iBB) 5 Menta(etalle oMenta(etalle 8 new Menta(etalle()2 oMenta(etalle.cantidad 8 Int=;.<arse(dataHridMiewMenta(etalle.0ows>i?..ells>9?.Malue B @@)2 oMenta(etalle.producto6id 8 ((Menta(etalle) dataHridMiewMenta(etalle.0ows>i?..ells>1?.Malue).producto6id2 oMenta(etalle.descripcion8((Menta(etalle) dataHridMiewMenta(etalle.0ows>i?..ells>1?.Malue).descripcion2

Ing. Javier Alberto Manrique Quionez

Pgina Q9

Microsoft C# - Enfoque Prctico

oMenta(etalle.precio 8 (ouble.<arse(dataHridMiewMenta(etalle.0ows>i?..ells>;?.Malue B @@)2 oMenta(etalle.subtotal 8 (ouble.<arse(dataHridMiewMenta(etalle.0ows>i?..ells>=?.Malue B @@)2 oListMenta(etalle.3dd(oMenta(etalle)2 : oMenta.ListMenta(etalle 8 oListMenta(etalle2 return oMenta2 : pri&ate &oid calcular"otal() 5 int count 8 dataHridMiewMenta(etalle.0ows..ount2 oMenta.subtotal 8 92 for (int i 8 92 i S count2 iBB) 5 double subtotal(e(ataHridMiew 8 dataHridMiewMenta(etalle.0ows>i?..ells>=?.Malue V8 null X (ouble.<arse(dataHridMiewMenta(etalle.0ows>i?..ells>=?.Malue B @@) : 92 oMenta.set*ubtotal(subtotal(e(ataHridMiew)2 : oMenta.setIHM()2 oMenta.set"otal()2 te t4o *ub"otal."e t 8 oMenta.subtotal B @@2 te t4o IHM."e t 8 oMenta.IHM B @@2 te t4o "otal."e t 8 oMenta.total B @@2 : pri&ate &oid 4utton7ue&o6.licT(object sender, E&ent3rgs e) 5 limpiar)bjetos()2 acti&ar(esacti&a.uadros(e"e to(true)2 acti&ar(esacti&ar4otones(true,true,false,true,true)2 date"ime<icTer1echa.1ocus()2 : pri&ate &oid button*alir6.licT(object sender, E&ent3rgs e) 5 (ispose()2 : pri&ate &oid button3gregarMenta(etalle(etalle6.licT(object sender, E&ent3rgs e) 5 1ormMenta(etalle o1ormMenta(etalle 8 new 1ormMenta(etalle()2 o1ormMenta(etalle.*how(ialog()2 if (o1ormMenta(etalle.oMenta(etalle.cantidad V8 9) 5 dataHridMiewMenta(etalle.0ows.3dd( o1ormMenta(etalle.oMenta(etalle.cantidad, o1ormMenta(etalle.oMenta(etalle, o1ormMenta(etalle.oMenta(etalle.precio, o1ormMenta(etalle.oMenta(etalle.get*ubtotal() )2 calcular"otal()2 : : pri&ate &oid buttonEliminarMenta(etalle6.licT(object sender, E&ent3rgs e) 5 if (dataHridMiewMenta(etalle.*elected0ows..ount V8 9) 5 dataHridMiewMenta(etalle.0ows.0emo&e(dataHridMiewMenta(etalle.*elected0ows>9?)2 calcular"otal()2 : : pri&ate &oid 1ormMentas61orm.losing(object sender, 1orm.losingE&ent3rgs e)

Ing. Javier Alberto Manrique Quionez

Pgina Q1

Microsoft C# - Enfoque Prctico

5 (ialog0esult dialogo 8 -essage4o .*how(@W(esea cerrar el formularioX@, @.uidado@, -essage4o 4uttons.Yes7o)2 if (dialogo 88 (ialog0esult.7o) 5 e..ancel 8 true2 : else 5 if (dialogo 88 (ialog0esult.7o) 5 e..ancel 8 false2 : : : pri&ate &oid 1ormMentas6Ce$(own(object sender, Ce$E&ent3rgs e) 5 if (e.Ce$(ata 88 Ce$s.Escape) 5 this..lose()2 : : pri&ate &oid button0einiciarMenta6.licT(object sender, E&ent3rgs e) 5 limpiar)bjetos()2 acti&ar(esacti&ar4otones(false, false, true,false, false)2 date"ime<icTer1echa.1ocus()2 acti&ar(esacti&a.uadros(e"e to(false)2 : pri&ate &oid buttonImprimir6.licT(object sender, E&ent3rgs e) 5 oMenta8leer)bjetoMenta(oMenta)2 1ormImprimir o1ormImprimir8new 1ormImprimir(oMenta)2 o1ormImprimir.*how(ialog()2 : : : 3 continuaci,n se presenta el .,digo de la .lase 1ormulario 1ormMenta(etalle &erifi!ue lo anteriormente reali'ado using *$stem2 using *$stem..omponent-odel2 using *$stem.(rawing2 using *$stem.Aindows.1orms2 namespace *istemaMenta1actura 5 public partial class 1ormMenta(etalle: 1orm 5 public Menta(etalle oMenta(etalle 8 new Menta(etalle()2 public 1ormMenta(etalle() 5 Initiali'e.omponent()2 te t4o .antidad.1ocus()2 : pri&ate &oid button3ceptar6.licT(object sender, E&ent3rgs e) 5 oMenta(etalle.cantidad8Int=;.<arse(te t4o .antidad."e t)2 oMenta(etalle.producto6id8Int=;.<arse(te t4o <roducto6id."e t)2 oMenta(etalle.descripcion8te t4o (escripcion."e t2 oMenta(etalle.precio8(ouble.<arse(te t4o <recio."e t)2 oMenta(etalle.set*ubtotal()2 (ispose()2 : pri&ate &oid button.ancelar6.licT(object sender, E&ent3rgs e) para !ue

Ing. Javier Alberto Manrique Quionez

Pgina Q;

Microsoft C# - Enfoque Prctico

5 (ispose()2 : pri&ate &oid 1ormMenta(etalle6Ce$(own(object sender, Ce$E&ent3rgs e) 5 if (e.Ce$(ata88Ce$s.Escape) 5 this..lose()2 : : public o&erride *tring "o*tring() 5 return oMenta(etalle.descripcion2 : : :

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioMaestroDetalleVentaCon eporte

Ing. Javier Alberto Manrique Quionez

Pgina Q=

Microsoft C# - Enfoque Prctico

CAPTULO 0 ARCLI3OS DE DATOS DE ACCESO DIRECTO CON C#

Ing. Javier Alberto Manrique Quionez

Pgina QG

Microsoft C# - Enfoque Prctico

ARCLI3OS DE DATOS
El almacenamiento en &ariables, arreglos o colecciones es + !"$ra#2 los datos se pierden cuando una &ariable local !ueda fuera del alcance o cuando la aplicaci,n termina. Las computadoras utili'an archi&os de datos para la retenci,n a largo pla'o de grandes cantidades de datos, incluso hasta despu%s de !ue terminan las aplicaciones !ue crean esos datos. *e denominan datos persistentes a a!uellos !ue duran ms all de la duraci,n de la ejecuci,n de la aplicaci,n. Las computadoras almacenan archi&os en dispositivos de almacenamiento secundario como disco duros, +*4, discos ,pticos $ cintas magn%ticas. El procesamiento de archi&os es una de las herramientas ms importantes !ue debe tener un lenguaje de programaci,n para soportar las aplicaciones comerciales !ue generalmente procesan grandes cantidades de datos persistentes. ./ posee pose poderosas caracterEsticas de procesamiento de archi&os de datos, las cuales permiten a una aplicaci,n leer $ escribir datos en memoria interna $Do memoria e terna o en archi&os a tra&%s de la red. Entre las operaciones !ue se pueden reali'ar con archi&os de datos tenemos: 3gregar registros de datos (3lta) Eliminar registros de datos (4aja) 3cceder a registros, siguiendo algn m%todo (secuencial, directo, secuencial inde ado, etc) .onsultar la informaci,n almacenada en los registros de datos (.onsulta) -odificar la informaci,n de los registros de datos (-odificaci,n)

ORGANIMACIN DE LOS ARCLI3OS DE DATOS


Los archi&os de datos se organi'an de la siguiente forma: Ca!"$ Es el agrupamiento de caracteres o nmeros para formar una palabra o una cifra completa, como el c,digo o nombre de un alumno. R gi)+r$ Es un grupo de campos relacionados considerados como una unidad. Ar&Ki5$N+a?#a Es un grupo de registros relacionados del mismo tipo. Ba) % %a+$) Es un grupo de archi&osDtablas relacionados !ue almacenan la informaci,n de una organi'aci,n. ORGANIMACIN SECUENCIAL Es el m%todo para almacenar registros de datos, en el cual los registros se deben recuperar en el mismo orden en !ue se almacenaron. ORGANIMACIN DIRECTA O ALEATORIA. Es el m%todo para almacenar registros de datos en un archi&o de modo !ue se pueda acceder a ellos en cual!uier secuencia sin importar su orden fEsico real en los medios de almacenamiento. ORGANIMACIN SECUENCIAL INDEOADA El m%todo utili'a un Endice de campo cla&e para buscar $ locali'ar fEsicamente un registro, como pueden locali'arse los temas cla&e en un libro. +tili'a un arreglo de Endices en la memoria 03donde se almacena en forma ordenada el campo cla&e $ la direcci,n fEsica de los registros. (espu%s de operaciones de mantenimiento este arreglo de Endices puede ser grabado en forma separada en el medio magn%tico para luego ser utili'ado en la pr, ima sesi,n pre&ia carga de los Endices en la memoria 03-. +n Endice es una tabla o lista !ue contiene las cla&es de registros con las posiciones fEsicas en archi&o de acceso inde ado.

JERARPUA DE DATOS
La jerar!uEa se refiera a la organi'aci,n de los datos para su almacenamiento en medios de almacenamiento e terno. La m ima jerar!uEa es la base de datos. Luego tenemos los archi&os de datos !ue se conocen tambi%n como tablas, los registros, los campos, los b$tes $ los bits. El campo es considerado como la unidad mEnima de informaci,n. <ara &isuali'ar la jerar!uEa de datos se presenta la 1igura J.1.

Ing. Javier Alberto Manrique Quionez

Pgina QJ

Microsoft C# - Enfoque Prctico

Figura 0.1: J rarAuQa % %a+$)

Archivo de "otas Base de datos

Archivo de Cx#

Archivo de expedientes personales

Archivo/tabla

alumno_id promedio final 1

apellidoNombre

evaluacin

evaluacin parcial 2 11 1 1! evaluacin

promedio de trabajo 11 11 1 1 1! promedio parcial 2 de 11

parcial 1 Arias, Alex 11 Barreto, Byron 1 ! Cespedes, Cesar 1! 1! alumno_id apellidoNombre evaluacin promedio parcial 1 trabajo final 1 Arias, Alex 11 apellidoNombre Arias, Alex

Registro

Campo

11

11

Byte

10000001

Letra A en ASCII

Bit

ARCLI3OS DE ACCESO DIRECTO O ALEATORIO EN C#


"odos los lenguajes de programaci,n tienen alguna forma de interactuar con los sistemas de archi&os de datos $ ./ no es la e cepci,n. *i se est desarrollando una aplicaci,n ./ para uso interno, probablemente ser necesario el acceso directo a archi&os. 3ntes de reali'ar acciones sobre un archi&o, necesitamos un poco de informaci,n sobre ese archi&o. 3 menudo, no se desea leer un archi&o de principio a fin2 sino acceder al archi&o como una base de datos, donde se salta de un registro a otro2 cada uno en diferentes partes del archi&o. ./ proporciona una clase Ra(%$!A&& ))Fi# para este tipo de archi&o de entradaDsalida. FLUJOS La comunicaci,n entre una aplicaci,n $ el origen o el destino de cierta informaci,n se reali'a mediante un flujo de informaci,n (stream), !ue no es ms !ue un objeto !ue hace de intermediario entre la aplicaci,n $ el origen o el destino de datos de la informaci,n. (e esta forma la aplicaci,n leer o escribir en el flujo sin importarle desde donde &iene la informaci,n o donde se &a. El espacio de nombres S6)+ !.IO de la biblioteca .7et contiene una colecci,n de clases !ue soportan estos algoritmos para leer $ escribir datos. La clase 1ile*tream subclase de *tream permite escribir $ leer datos de un archi&o b$te a b$te2 anal,gicamente, las clases *treamAriter $ *tream0eader subclases de "e tAriter $ te t0eader permiten escribir $ leer caracteres. La) &#a) ) Bi(ar68ri+ r 6 Bi(ar6R a% r " r!i+ ( )&ri?ir 6 # r %a+$) % &ua#Aui r +i"$ "ri!i+i5$) ( ?i(ari$ 6 &a% (a % &ara&+ r ). FLUJO DE BHTES Los datos pueden ser escritos o leEdos de un archi&o b$te a b$te utili'ando un flujo de la clase 1ile*tream Fi# S+r a!

Ing. Javier Alberto Manrique Quionez

Pgina QL

Microsoft C# - Enfoque Prctico

+n flujo de la clase 1ile*tream permite leer $ escribir b$tes en un archi&o . Esta clase adems de los m%todos !ue hereda de la clase *tream, proporciona el constructor siguiente: 1ile*tream(string nombre, 1ile-ode , 1ile3ccess acceso) El constructor abre el flujo de entrada $ salida (para leer $ escribir) &inculando con el archi&o especificado por el nombre $ especificando el tipo de acceso (leer, escribir o leer $ escribir). El parmetro nombre es una cadena de caracteres !ue especifica la ruta donde se guarda o se guardar el archi&o. El parmetro modo, del tipo enumerado 1ile-ode, puede tomar diferentes tipos de &alores. En la tabla J.1 se muestra los tipos de &alores !ue puede tomar el parmetro 1ile-ode. "abla J.1: "ipo de &alores del parmetro 1ile-ode
.reate7ew .reate )pen )pen)r.reat e "runcate 3ppend 0ead 0eadArite Arite .rear un nue&o archi&o. *i el archi&o e iste se lan'ar una e cepci,n del tipo I)E ception .rea un nue&o archi&o. *i el archi&o e iste ser sobreescrito 3bre un archi&o e istente 3bre un archi&o si e iste2 si no, se crea un nue&o archi&o 3bre un archi&o e istente. +na &e' abierto, el archi&o ser truncado a cero b$tes de longitud 3bre un archi&o para a#adir datos al final del mismo si e iste o crea uno nue&o sino e iste <ermite abrir un archi&o para operaciones de lectura <ermite abrir un archi&o para operaciones de lectura D escritura <ermite abrir un archi&o para operaciones de escritura

FLUJOS DE DATOS PRIMITI3OS -uchas aplicaciones re!uieren escribir en un archi&o datos de tipos primiti&os (bool, double, float, long, int, short, etc) no como cadena de caracteres, )i($ ( <$r!a+$ ?i(ari$ para posteriormente recuperarlos como tal. <ara estos casos el espacio de nombres S6)+ !.IO proporciona las clases 4inar$0eader $ 4inar$Ariter, las cuales permiten leer $ escribir datos de cual!uier tipo primiti&o en formato binario $ cadena de caracteres en formato UTFG7. +n flujo 4inar$0eader s,lo puede leer datos almacenados en un archi&o a tra&%s de un flujo 4inar$Ariter. Bi(ar68ri+ r +n flujo de la clase 4inar$Ariter permite a una aplicaci,n escribir datos de cual!uier tipo primiti&o. *e puede crear un flujo de esta clase utili'ando el siguiente constructor: 4inar$Ariter(*tream flujo) Este constructor abre un flujo de salida (para escribir) hacia el archi&o &inculado con otro flujo e istente de la clase *tream o de sus deri&adas. Ejemplo:
public Boolean escribir)egistro 2 Alumno oAlumno3 int posicion ) $ String arc4ivo&Properties5Settings5De6ault5nombreDeArc4ivo' int longitudDe)egistro & Properties5Settings5De6ault5longitudDe)egistro' FileStream 6s & ne7 FileStream2arc4ivo3 File!ode5#pen#r reate3 FileAccess58rite)' Binar"8riter b7 & ne7 Binar"8riter26s)' b75BaseStream5See92posicion:longitudDe)egistro3See9#rigin5Begin)' b758rite2oAlumno5alumno_id)' b758rite2oAlumno5apellidoNombre)' b758rite2oAlumno5evaluacionParcial1)' b758rite2oAlumno5evaluacionParcial2)' b758rite2oAlumno5promedioDeTrabajo)' b758rite2oAlumno5promedioFinal)' b75 lose2)' 6s5 lose2)' return true' 1

Ing. Javier Alberto Manrique Quionez

Pgina QO

Microsoft C# - Enfoque Prctico

-os m;todos m<s utili=ados de esta clase se resumen en la Tabla .52>

Ta?#a 0.*: R )u! ( % # MF+$%$ 8ri+


Arite (b$te) Arite (b$te>?) Arite (char) Arite (char>?) Arite (short) Arite (int) Arite (long) Arite ((ecimal) Arite (float) Arite (double) Arite (string) 4ase*tream() .lose 1lush *eeT Escribe un &alor de tipo b$te Escribe una cadena como una secuencia de b$tes Escribe un &alor de tipo char Escribe una cadena como una secuencia de caracteres Escribe un &alor de tipo short Escribe un &alor de tipo int Escribe un &alor de tipo long Escribe un &alor de tipo (ecimal Escribe un &alor de tipo float Escribe un &alor de tipo double Escribe una cadena de caracteres en formato +"1FQ2 el primer b$te o los dos primeros b$tes especifican el nmero de b$tes de datos escritos a continuaci,n )btiene el flujo sub$acente (fs en la figura anterior) .ierra el flujo $ libera los recursos ad!uiridos Limpia el buffer asociado con el flujo Establece mo&imiento del puntero de LecturaDEscritura en el flujo

Bi(ar6R a% r +n flujo de la clase 4inar$0eader, permite a una aplicaci,n leer datos de cual!uier archi&o datos de tipo primiti&os escritos por un flujo de la clase 4inar$Ariter. *e puede crear un flujo de esta clase utili'ando el siguiente constructor: 4inar$0eader(*tream flujo) Este constructor abre un flujo de entrada (para leer) desde el archi&o &inculando con otro flujo e istente de la clase *tream o de sus deri&adas. Ejemplo: 1ile*tream fs 8 new 1ile*tream(archi&o, 1ile-ode.)pen)r.reate, 1ile3ccess.0ead)2 4inar$0eader br 8 new 4inar$0eader(fs)2 public 3lumno # rR gi)+r$(3lumno o3lumno, int posicion) 5 *tring archi&o 8 <roperties.*ettings.(efault.nombre(e3rchi&o2 int longitud(e0egistro 8 <roperties.*ettings.(efault.longitud(e0egistro2 1ile*tream fs 8 new 1ile*tream(archi&o, 1ile-ode.)pen, 1ile3ccess.0ead)2 4inar$0eader br 8 new 4inar$0eader(fs)2 br.4ase*tream.*eeT(posicion_longitud(e0egistro, *eeT)rigin.4egin)2 o3lumno 8 new 3lumno(br.0eadInt=;(), br.0ead*tring(),br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble())2 br..lose()2 fs..lose()2 return o3lumno2 :
-os m;todos m<s utili=ados de la clase 4inar$0eader se resumen en la Tabla .525

PROPIEDADES H MRTODO PARA ACCESO ALEATORIO La clase 1ile*tream, !ue se deri&a directamente de *tream, implementa las propiedades <osition $ Length $ el m%todo seeT !ue combinados entre sE facilitan el acceso aleatorio a un archi&o. P$)i+i$( : (e&uel&e la posici,n actual en b$tes del puntero de lecturaDescritura en un archi&o L (g+K : (e&uel&e la longitud del archi&o en b$tes S S : -ue&e el puntero de lecturaDescritura a una nue&a locali'aci,n despla'ada % )" b$tes de la posici,n "$) del archi&o

Ing. Javier Alberto Manrique Quionez

Pgina QQ

Microsoft C# - Enfoque Prctico

La posici,n pos es un &alor de tipo S SOrigi( !ue define las siguientes constantes: B gi( : Nace referencia a la primera posici,n en el archi&o Curr (+ : Nace referencia a la posici,n actual del puntero de lecturaDescritura E(% : Nace referencia a la ltima posici,n en el archi&o. Ta?#a 0.-: R )u! ( % #a &#a) Bi(ar6R a% r
0ead4$te 0ead4$tes 0ead.har 0ead.hars 0eadInt1L 0eadInt=; 0eadIntLG 0ead(ecimal 0ead*ingle 0ead(ouble 0ead*tring 4ase*tream .lose <eeT.har (e&uel&e un &alor de tipo b$te (e&uel&e un &alor de tipo b$te> ? (e&uel&e un &alor de tipo char (e&uel&e un &alor de tipo char> ? (e&uel&e en &alor de tipo short (e&uel&e un &alor de tipo int (e&uel&e un &alor de tipo long (e&uel&e un &alor de tipo decimal (e&uel&e una &alor de tipo float (e&uel&e un &alor de tipo double (e&uel&e una cadena de caracteres en formato +"1FQ2 el primer o dos primeros b$tes especifican el nmero de b$tes de datos !ue sern leEdos a continuaci,n )btiene el flujo sub$acente .ierra el flujo $ libera los recursos ad!uiridos )btiene el siguiente carcter sin e traerlo

Ej !"#$: public int buscar0egistro(int bus!ueda) 5 3lumno o3lumno2 *tring archi&o 8 <roperties.*ettings.(efault.nombre(e3rchi&o2 int longitud(e0egistro 8 <roperties.*ettings.(efault.longitud(e0egistro2 1ile*tream fs 8 new 1ile*tream(archi&o, 1ile-ode.)pen, 1ile3ccess.0ead)2 4inar$0eader br 8 new 4inar$0eader(fs)2 int encontrado 8 92 int posicion 8 92 int tama#o(el3rchi&o 8 numero(e0egistro()2 while ( (posicion S tama#o(el3rchi&o) UU (encontrado 88 9) ) 5 br.4ase*tream.*eeT(posicion_longitud(e0egistro,*eeT)rigin.4egin)2 o3lumno 8 new 3lumno(br.0eadInt=;(), br.0ead*tring(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble())2 if ( bus!ueda 88 o3lumno.alumno6id ) 5 encontrado 8 12 : else 5 posicionBB2 : : fs..lose()2 br..lose()2 if ( encontrado 88 1 ) 5 return posicion2 : else 5 return FRR2 : : 3 continuaci,n se presenta un ejemplo de una aplicaci,n !ue administra un archi&o de acceso aleatorio !ue tiene las siguientes caracterEsticas:

Ing. Javier Alberto Manrique Quionez

Pgina QR

Microsoft C# - Enfoque Prctico

a) <resenta un formulario para un *istema de -antenimiento 34.- de alumnos. b) La letra 34.- significan 3ltas, 4ajas, .onsultas $ -odificaci,n respecti&amente. c) La estructura de la clase 3lumno es la siguiente:
int alumno_id String apellidoNombre double evaluacionParcial1 double evaluacionParcial2 double promedioDeTrabajo double promedioFinal

d) La longitud del registro es 1G9 b$tes. e) +tili'a una clase de acceso a datos ((3)) !ue permite interactuar la aplicaci,n con el archi&o de datos almacenado e ternamente f) +tili'a un clase denominada 34.-3ction para almacenar las constantes de las operaciones posibles. g) La 1igura J.; &isuali'a el diagrama de clases de clase de la aplicaci,n ejemplo. h) En la 1igura J.=, 1igura J.G, 1igura J.J, 1igura J.L, 1igura J.O, 1igura J.Q $ 1igura J.R se &isuali'an los formularios de la aplicaci,n ejemplo. i) La 1igura J.19 &isuali'a la aplicaci,n en el E plorador de *oluciones. `) La 1igura J.11 &isuali'a las propiedades seteadas para la aplicaci,n. T) La 1igura J.1; presenta el c,digo de la aplicaci,n K 34.-3ction l) La 1igura J.1= presenta el c,digo de la aplicaci,n K <rograma principal. m)La 1igura J.1G presenta el c,digo de la aplicaci,n K .lase 3lumno. n) La 1igura J.1J presenta el c,digo de la aplicaci,n K .lase 3lumno (3). o) La 1igura J.1L presenta .,digo de la aplicaci,n K .lase 1ormulario34.Figura 0.*: Diagra!a % &#a) )

Figura 0.-: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 N$ a&+i$(

Ing. Javier Alberto Manrique Quionez

Pgina R9

Microsoft C# - Enfoque Prctico

Figura 0..: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( I() r+arGBu)&ar

Figura 0.0: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( I() r+arGGuar%ar

Ing. Javier Alberto Manrique Quionez

Pgina R1

Microsoft C# - Enfoque Prctico

Figura 0.2: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( M$%i<i&arG Guar%ar

Ing. Javier Alberto Manrique Quionez

Pgina R;

Microsoft C# - Enfoque Prctico

Figura 0.4: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( M$%i<i&arG C$(<ir!ar

Figura 0.7: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 C$()u#+ar r gi)+r$

Ing. Javier Alberto Manrique Quionez

Pgina R=

Microsoft C# - Enfoque Prctico

Figura 0.:: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 E#i!i(ar G C$(<ir!ar

Figura 0.1>: A"#i&a&i'( ( # E/"#$ra%$r % )$#u&i$( )

Ing. Javier Alberto Manrique Quionez

Pgina RG

Microsoft C# - Enfoque Prctico

Figura 0.11: Pr$"i %a% ) ) + a%a) "ara #a a"#i&a&i'(

Figura 0.1*: C'%ig$ % #a a"#i&a&i'( 1 ABCMA&+i$(


using S"stem' namespace AB !"DA# $ public class AB !Accion $ public static int N#_A T%#N public static int A T%#N_B(S A) public static int A T%#N_%NS*)TA) public static int A T%#N_!#D%F% A) public static int A T%#N_ AN *-A) public static int A T%#N_*-%!%NA) public static int A T%#N_ #NS(-TA 1

& 1' & 2' & +' & ,' & .' & /' & 0'

Figura 0.1-: C'%ig$ % #a a"#i&a&i'( 1 Pr$gra!a "ri(&i"a#


using S"stem' using S"stem5 ollections5?eneric' using S"stem5-in@' using S"stem58indo7s5Forms' namespace Arc4ivoDeDatos on?(%"DA# $ static class Program $ AAA Bsummar"C AAA Punto de entrada principal para la aplicaciDn5 AAA BAsummar"C ESTAT4readF static void !ain 2 ) $ Application5*nableGisualSt"les2)' Application5Set ompatibleTeHt)enderingDe6ault26alse)' Application5)un2ne7 FormularioAB !2))' 1 1 1

Figura 0.1.: C'%ig$ % #a a"#i&a&i'( 1 C#a) A#u!($

Ing. Javier Alberto Manrique Quionez

Pgina RJ

Microsoft C# - Enfoque Prctico

using *$stem2 namespace 34.-$(3) 5 public class 3lumno 5 public int alumno6id public *tring apellido7ombre public double e&aluacion<arcial1 public double e&aluacion<arcial; public double promedio(e"rabajo public double promedio1inal public 3lumno ( ) 5 this.alumno6id 8 92 this.apellido7ombre 8 null2 this.e&aluacion<arcial1 8 92 this.e&aluacion<arcial; 8 92 this.promedio(e"rabajo 8 92 :

5get2set2: 5get2set2: 5get2set2: 5get2set2: 5get2set2: 5get2set2:

public 3lumno ( int alumno6id, *tring apellido7ombre, double e&aluacion<arcial1, double e&aluacion<arcial;, double promedio(e"rabajo, double promedio1inal ) 5 this.alumno6id 8 alumno6id2
this.apellido7ombre 8 apellido7ombre2 this.e&aluacion<arcial1 8 e&aluacion<arcial12 this.e&aluacion<arcial; 8 e&aluacion<arcial;2 this .promedio(e"rabajo 8 promedio(e"rabajo2 this .promedio1inal 8 promedio1inal2

: public &oid set<romedio1inal ( )


5 this.promedio1inal 8(this.e&aluacion<arcial1 B this.e&aluacion<arcial; B this .promedio(e"rabajo) D =2

: public o&erride *tring "o*tring ( ) 5 return apellido7ombre2 : : : Figura 0.10: C'%ig$ % #a a"#i&a&i'( 1 C#a) A#u!($ DAO using *$stem2 using *$stem..ollections.Heneric2 using *$stem.I)2 using *$stem.Aindows.1orms2 namespace 34.-$(3) 5 public class 3lumno(3) 5 public 4oolean insertar0egistro(3lumno o3lumno) 5 int posicion 8 numero(e0egistro()2 if(escribir0egistro(o3lumno, posicion)) 5 return true2 : else 5 return false2 : : public 3lumno consultar0egistro(int bus!ueda) 5 3lumno o3lumno 8 new 3lumno()2

Ing. Javier Alberto Manrique Quionez

Pgina RL

Microsoft C# - Enfoque Prctico

int posicion 8 buscar0egistro(bus!ueda)2 if(posicion V8 FRR) 5 o3lumno 8 leer0egistro(o3lumno, posicion)2 return o3lumno2 : else 5 return null2 : : public 4oolean modificar0egistro ( int bus!ueda, 3lumno o3lumno ) 5 int posicion 8 buscar0egistro(bus!ueda)2 if ( posicion V8 FRR ) 5 if (escribir0egistro(o3lumno, posicion)) 5 return true2 : else 5 return false2 : : else 5 return false2 : : public 4oolean eliminar0egistro(int bus!ueda) 5 3lumno o3lumno 8 new 3lumno()2 int posicion 8 buscar0egistro(bus!ueda)2 if(posicion V8 FRR) 5 o3lumno 8 leer0egistro(o3lumno, posicion)2 o3lumno.alumno6id892 if(escribir0egistro(o3lumno, posicion)) 5 return true2 : else 5 return false2 : : else 5 return false2 : : public int buscar0egistro(int bus!ueda) 5 3lumno o3lumno2 *tring archi&o 8 <roperties.*ettings.(efault.nombre(e3rchi&o2 int longitud(e0egistro 8 <roperties.*ettings.(efault.longitud(e0egistro2 1ile*tream fs 8 new 1ile*tream(archi&o, 1ile-ode.)pen, 1ile3ccess.0ead)2 4inar$0eader br 8 new 4inar$0eader(fs)2 int encontrado 8 92 int posicion 8 92 int tama#o(el3rchi&o 8 numero(e0egistro()2 while ( (posicion S tama#o(el3rchi&o) UU (encontrado 88 9) ) 5 br.4ase*tream.*eeT(posicion_longitud(e0egistro,*eeT)rigin.4egin)2 o3lumno 8 new 3lumno(br.0eadInt=;(), br.0ead*tring(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble())2 if ( bus!ueda 88 o3lumno.alumno6id )

Ing. Javier Alberto Manrique Quionez

Pgina RO

Microsoft C# - Enfoque Prctico

5 encontrado 8 12 : else 5 posicionBB2 : : fs..lose()2 br..lose()2 if ( encontrado 88 1 ) 5 return posicion2 : else 5 return FRR2 : : public 3lumno leer0egistro(3lumno o3lumno, int posicion) 5 *tring archi&o 8 <roperties.*ettings.(efault.nombre(e3rchi&o2 int longitud(e0egistro 8 <roperties.*ettings.(efault.longitud(e0egistro2 1ile*tream fs 8 new 1ile*tream(archi&o, 1ile-ode.)pen, 1ile3ccess.0ead)2 4inar$0eader br 8 new 4inar$0eader(fs)2 br.4ase*tream.*eeT(posicion_longitud(e0egistro, *eeT)rigin.4egin)2 o3lumno8new 3lumno( br.0eadInt=;(),
br.0ead*tring(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble())2

br..lose()2 fs..lose()2 return o3lumno2 : public 4oolean escribir0egistro ( 3lumno o3lumno, int posicion ) 5 tr$ 5 *tring archi&o8<roperties.*ettings.(efault.nombre(e3rchi&o2 int longitud(e0egistro 8 <roperties.*ettings.(efault.longitud(e0egistro2 1ile*tream fs 8 new 1ile*tream(archi&o, 1ile-ode.)pen)r.reate, 1ile3ccess.0eadArite)2 4inar$Ariter bw 8 new 4inar$Ariter(fs)2 bw.4ase*tream.*eeT(posicion_longitud(e0egistro,*eeT)rigin.4egin)2
bw.Arite(o3lumno.alumno6id)2 bw.Arite(o3lumno.apellido7ombre)2 bw.Arite(o3lumno.e&aluacion<arcial1)2 bw.Arite(o3lumno.e&aluacion<arcial;)2 bw.Arite(o3lumno.promedio(e"rabajo)2 o3lumno.set<romedio1inal()2 bw.Arite(o3lumno.promedio1inal)2

bw..lose()2 fs..lose()2 return true2 : catch(E ception e) 5 -essage4o .*how(@7o se pudo grabar el registro ... error de tipo @Be)2 return false2 : : public int numero(e0egistro()

Ing. Javier Alberto Manrique Quionez

Pgina RQ

Microsoft C# - Enfoque Prctico

5 *tring archi&o 8 <roperties.*ettings.(efault.nombre(e3rchi&o2 int longitud(e0egistro 8 <roperties .*ettings.(efault.longitud(e0egistro2 1ile*tream fs 8 new 1ile*tream(archi&o, 1ile-ode.)pen)r.reate, 1ile3ccess.0ead)2 int n 8 (int) (-ath..eiling((double) fs.Length D (double) longitud(e0egistro))2 fs..lose()2 return n2 : public ListS3lumnoP obtener(atosEnList() 5 *tring archi&o 8 <roperties.*ettings.(efault.nombre(e3rchi&o2 int longitud(e0egistro 8 <roperties.*ettings.(efault.longitud(e0egistro2 ListS3lumnoP oList3lumno 8 new ListS3lumnoP()2 1ile*tream fs 8 new 1ile*tream(archi&o, 1ile-ode.)pen)r.reate, 1ile3ccess.0ead)2 4inar$0eader br 8 new 4inar$0eader(fs)2 3lumno o3lumno2 for (int posicion 8 92 posicion S numero(e0egistro()2 posicion 8 posicion B 1) 5 br.4ase*tream.*eeT(posicion _ longitud(e0egistro, *eeT)rigin.4egin)2 o3lumno 8 new 3lumno(br.0eadInt=;(), br.0ead*tring(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble(), br.0ead(ouble())2 oList3lumno.3dd(o3lumno)2 : br..lose()2 fs..lose()2 return oList3lumno2 : : : : Figura 0.12: C'%ig$ % #a a"#i&a&i'( 1 C#a) F$r!u#ari$ABCM using *$stem2 using *$stem..ollections.Heneric2 using *$stem.Aindows.1orms2 namespace 34.-$(3) 5 public partial class 1ormulario34.-:1orm 5 pri&ate int action 8 34.-3ction.7)63."I)72 public 1ormulario34.-() 5 Initiali'e.omponent()2 formatear"abla()2 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : public &oid formatear"abla() 5 dataHridMiew3lumno.*election-ode 8 (ataHridMiew*election-ode.1ull0ow*elect2 : public 3lumno get)bjeto3lumno() 5 3lumno o3lumno 8 new 3lumno()2 o3lumno.alumno6id 8 int.<arse(te t4o 3lumno6id."e t)2 o3lumno.apellido7ombre 8 te t4o 3pellido7ombre."e t2 o3lumno.e&aluacion<arcial1 8 (double.<arse(te t4o E&aluacion<arcial1."e t))2 o3lumno.e&aluacion<arcial; 8 (double.<arse(te t4o E&aluacion<arcial;."e t))2 o3lumno.promedio(e"rabajo 8 (double.<arse(te t4o <romedio(e"rabajo."e t))2

Ing. Javier Alberto Manrique Quionez

Pgina RR

Microsoft C# - Enfoque Prctico

return o3lumno2 : public &oid set)bjeto3lumno(3lumno o3lumno) 5 te t4o 3lumno6id."e t 8 o3lumno.alumno6id B @@2 te t4o 3pellido7ombre."e t 8 o3lumno.apellido7ombre B @@2 te t4o E&aluacion<arcial1."e t 8 o3lumno.e&aluacion<arcial1 B @@2 te t4o E&aluacion<arcial;."e t 8 o3lumno.e&aluacion<arcial; B @@2 te t4o <romedio(e"rabajo."e t 8 o3lumno.promedio(e"rabajo B @@2 : public &oid actuali'ar(ataHridMiew3lumno() 5 limpiar(ataHridMiew3lumno()2 3lumno(3) o3lumn(3) 8 new 3lumno(3)()2 ListS3lumnoP oList3lumno 8 o3lumn(3).obtener(atosEnList()2 for (int posicion 8 92 posicion S oList3lumno..ount2 posicion 8 posicion B 1) 5 if (oList3lumno>posicion?.alumno6id V8 9) 5 dataHridMiew3lumno.0ows.3dd( oList3lumno>posicion?.alumno6id, oList3lumno>posicion?, oList3lumno>posicion?.e&aluacion<arcial1, oList3lumno>posicion?.e&aluacion<arcial;, oList3lumno>posicion?.promedio(e"rabajo, oList3lumno>posicion?.promedio1inal)2 : : : pri&ate &oid habilitar4otones34.-(4oolean c4uscar, 4oolean c7ue&o, 4oolean cHuardar, 4oolean cEditar, 4oolean cEliminar, 4oolean c.onsultar, 4oolean c.ancelar, 4oolean c*alir) 5 button4uscar.Enabled 8 c4uscar2 button7ue&o.Enabled 8 c7ue&o2 buttonHuardar.Enabled 8 cHuardar2 button-odificar.Enabled 8 cEditar2 buttonEliminar.Enabled 8 cEliminar2 button.onsultar.Enabled 8 c.onsultar2 button.ancelar.Enabled 8 c.ancelar2 button*alir.Enabled 8 c*alir2 : pri&ate &oid habilitar.ajas(e"e to(4oolean editable) 5 te t4o 3pellido7ombre.Enabled 8 editable2 te t4o E&aluacion<arcial1.Enabled 8 editable2 te t4o E&aluacion<arcial;.Enabled 8 editable2 te t4o <romedio(e"rabajo.Enabled 8 editable2 : pri&ate &oid limpiar.ajas(e"e to() 5 te t4o 3pellido7ombre."e t 8 @@2 te t4o E&aluacion<arcial1."e t 8 @@2 te t4o E&aluacion<arcial;."e t 8 @@2 te t4o <romedio(e"rabajo."e t 8 @@2 : pri&ate &oid button4uscar6.licT(object sender, E&ent3rgs e) 5 if (action 88 34.-3ction.3."I)764+*.30) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 int bus!ueda 8 Int=;.<arse(te t4o 3lumno6id."e t)2 3lumno o3lumno 8 o3lumno(3).consultar0egistro(bus!ueda)2 if (o3lumno V8 null)

Ing. Javier Alberto Manrique Quionez

Pgina 199

Microsoft C# - Enfoque Prctico

5 -essage4o .*how(@0egistro e istente VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : else 5 action 8 34.-3ction.3."I)76I7*E0"302 te t4o 3lumno6id.Enabled 8 false2 habilitar.ajas(e"e to(true)2 controlador(eE&entos4otones34.-()2 te t4o 3pellido7ombre.1ocus()2 : : else 5 if (action 88 34.-3ction.3."I)76.)7*+L"3) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 int bus!ueda 8 Int=;.<arse(te t4o 3lumno6id."e t)2 3lumno o3lumno 8 o3lumno(3).consultar0egistro(bus!ueda)2 if (o3lumno V8 null) 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 set)bjeto3lumno(o3lumno)2 : else 5 -essage4o .*how(@7o se encuentra VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : : : pri&ate &oid button7ue&o6.licT(object sender, E&ent3rgs e) 5 dataHridMiew3lumno.Enabled 8 false2 te t4o 3lumno6id."e t 8 @@2 limpiar.ajas(e"e to()2 action 8 34.-3ction.3."I)764+*.302 controlador(eE&entos4otones34.-()2 te t4o 3lumno6id.Enabled 8 true2 te t4o 3lumno6id.1ocus()2 : pri&ate &oid buttonHuardar6.licT(object sender, E&ent3rgs e) 5 if (action 88 34.-3ction.3."I)76I7*E0"30) 5 if (-essage4o .*how(@W(esea guardarloX@, @.onfirme el guardado@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 if (o3lumno(3).insertar0egistro(get)bjeto3lumno())) 5 -essage4o .*how(@)peraci,n e itosa ... VVV@)2 : else 5 -essage4o .*how(@7o se pudo guardar el registro ... VVV@)2 : action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 button7ue&o.1ocus()2 : else

Ing. Javier Alberto Manrique Quionez

Pgina 191

Microsoft C# - Enfoque Prctico

5 limpiar.ajas(e"e to()2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : : else 5 if (action 88 34.-3ction.3."I)76-)(I1I.30) 5 if (-essage4o .*how(@Est seguro de guardar los datosX@, @.onfirme el guardado@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 3lumno o3lumno 8 new 3lumno()2 if (o3lumno(3).modificar0egistro(int.<arse(te t4o 3lumno6id."e t), get)bjeto3lumno())) 5 -essage4o .*how(@)peraci,n e itosa ... VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 actuali'ar(ataHridMiew3lumno()2 : else 5 -essage4o .*how(@7o se pudo guardar el registro ...VVV@)2 : : else 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : : :

pri&ate &oid button-odificar6.licT(object sender, E&ent3rgs e) 5 if (dataHridMiew3lumno.0ow.ount P8 1) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if (fila*eleccionada V8 F1 UU (te t4o 3lumno6id."e t.Length) P 9) 5 te t4o 3pellido7ombre.1ocus()2 action 8 34.-3ction.3."I)76-)(I1I.302 controlador(eE&entos4otones34.-()2 : else 5 -essage4o .*how(@7o se ha seleccionado un registro ...VVV@)2 : : else 5 -essage4o .*how(@7o e isten registros ...VVV@)2 : : pri&ate &oid buttonEliminar6.licT(object sender, E&ent3rgs e) 5 if (dataHridMiew3lumno.0ow.ount P8 1)

Ing. Javier Alberto Manrique Quionez

Pgina 19;

Microsoft C# - Enfoque Prctico

5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if (fila*eleccionada V8 F1 UU (te t4o 3lumno6id."e t.Length) P 9) 5 if (-essage4o .*how(@Est seguro de eliminar los datosX@, @.onfirme la eliminaci,n@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 3lumno o3lumno 8 new 3lumno()2 int bus!ueda 8 int.<arse(te t4o 3lumno6id."e t)2 o3lumno 8 o3lumno(3).consultar0egistro(bus!ueda)2 if (o3lumno V8 null) 5 o3lumno 8 get)bjeto3lumno()2 o3lumno.alumno6id 8 92 if (o3lumno(3).eliminar0egistro(bus!ueda)) 5 -essage4o .*how(@*e elimin, el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : else 5 -essage4o .*how(@7o se pudo eliminar el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 -essage4o .*how(@7o se pudo eliminar el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 -essage4o .*how(@*e tiene !ue seleccionar un registro ...VVV@)2 : : else 5 -essage4o .*how(@7o e isten registros ...VVV@)2 : : pri&ate &oid button.ancelar6.licT(object sender, E&ent3rgs e) 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 button7ue&o.1ocus()2 : pri&ate &oid button*alir6.licT(object sender, E&ent3rgs e) 5 (ispose()2 : pri&ate &oid dataHridMiew3lumno6-ouse.licT(object sender, -ouseE&ent3rgs e) 5 if (e..licTs 88 1 UU dataHridMiew3lumno.0ow.ount P8 1) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2

Ing. Javier Alberto Manrique Quionez

Pgina 19=

Microsoft C# - Enfoque Prctico

if (fila*eleccionada V8 F1) 5 3lumno o3lumno*eleccionado 8 (3lumno)


dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2

set)bjeto3lumno(o3lumno*eleccionado)2 : : : pri&ate &oid limpiar(ataHridMiew3lumno() 5 dataHridMiew3lumno.0ows..lear()2 : pri&ate &oid controlador(eE&entos4otones34.-() 5 if (action 88 34.-3ction.7)63."I)7) 5 te t4o 3lumno6id."e t 8 @@2 limpiar.ajas(e"e to()2 te t4o 3lumno6id.Enabled 8 false2 habilitar.ajas(e"e to(false)2 habilitar4otones34.-(false, true, false, true, true, true, false, true)2 dataHridMiew3lumno.Enabled 8 true2 button7ue&o.1ocus()2 : else 5 if (action 88 34.-3ction.3."I)764+*.30) 5 habilitar.ajas(e"e to(false)2 limpiar.ajas(e"e to()2 habilitar4otones34.-(true, false, false, false, false, false, true, false)2 : else 5 if (action 88 34.-3ction.3."I)76I7*E0"30) 5 limpiar.ajas(e"e to()2 te t4o 3lumno6id.Enabled 8 true2 habilitar4otones34.-(true, false, true, false, false, false, true, false)2 : else 5 if (action 88 34.-3ction.3."I)76-)(I1I.30) 5 habilitar.ajas(e"e to(true)2 habilitar4otones34.-(false, false, true, false, false, false, true, false)2 te t4o 3lumno6id.Enabled 8 false2 : else 5 if (action 88 34.-3ction.3."I)76ELI-I730) 5 actuali'ar(ataHridMiew3lumno()2 : else 5 if (action 88 34.-3ction.3."I)76.)7*+L"3) 5 habilitar.ajas(e"e to(false)2 habilitar4otones34.-(true, false, false, false, false, false, true,
false)2

te t4o 3lumno6id.Enabled 8 true2 : : : : : : :

Ing. Javier Alberto Manrique Quionez

Pgina 19G

Microsoft C# - Enfoque Prctico

pri&ate &oid dataHridMiew3lumno6Ce$(own(object sender, Ce$E&ent3rgs e) 5 if (e.Ce$.ode 88 Ce$s.(own) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde B 12 if (fila*eleccionada P8 dataHridMiew3lumno.0ow.ount) 5 fila*eleccionada 8 fila*eleccionada F 12 : else 5 3lumno o3lumno*eleccionado 8 (3lumno)
dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2

set)bjeto3lumno(o3lumno*eleccionado)2 : : if (e.Ce$.ode 88 Ce$s.+p) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde F 12 if (fila*eleccionada S8 F1) 5 fila*eleccionada 8 fila*eleccionada B 12 : else 5 3lumno o3lumno*eleccionado 8 (3lumno)
dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2

set)bjeto3lumno(o3lumno*eleccionado)2 : : :

pri&ate &oid button.onsultar6.licT(object sender, E&ent3rgs e) 5 dataHridMiew3lumno..lear*election()2 limpiar.ajas(e"e to()2 te t4o 3lumno6id."e t 8 @@2 te t4o 3lumno6id.Enabled 8 true2 te t4o 3lumno6id.1ocus()2 action 8 34.-3ction.3."I)76.)7*+L"32 controlador(eE&entos4otones34.-()2 : : :

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioABCM - Arc!i"o de datos Propiedades.

Ing. Javier Alberto Manrique Quionez

Pgina 19J

Microsoft C# - Enfoque Prctico

CAPTULO 2 ARCLI3OS DE DATOS CON REPORTES CON C#

Ing. Javier Alberto Manrique Quionez

Pgina 19L

Microsoft C# - Enfoque Prctico

ARCLI3OS DE DATOS H REPORTES CON CRHSTAL REPORT


.r$stal 0eports es una aplicaci,n de inteligencia empresarial utili'ada para dise#ar $ generar informes desde una amplia gama de fuentes de datos (archi&o de datos $ bases de datos). Marias aplicaciones, como -icrosoft Misual *tudio, inclu$en una &ersi,n)E- de .r$stal 0eports como una herramienta de prop,sito general para informesDreportes. .r$stal 0eports se con&irti, en el escritor de informes estndar cuando -icrosoft lo liber, con Misual 4asic. <ara el desarrollo de ejemplo se utili'ar la aplicaci,n desarrollada en el .apEtuo = F *istema de mantenimiento 34.- de alumnos por lo !ue no se la describir en forma repetida. *e debe construir sistema de men principal (1orm*istema(e-enu) con las opciones 3lumnos $ 0eporte. La 1igura J.1 $ la 1igura J.; muestra el 1ormulario !ue contiene el sistema de men principal con las opciones 1ormulario 34.- $ 0eporte de alumnos. El c,digo del 1ormulario 1orm*istema de men se &isuali'a en la 1igura J.=. Figura 2.1: Si)+ !a % M (D Pri(&i"a# 1 O"&i'( F$r!u#ari$ ABCM

Figura 2.*: Si)+ !a % M (D Pri(&i"a# 1 O"&i'( R "$r+ % a#u!($)

Ing. Javier Alberto Manrique Quionez

Pgina 19O

Microsoft C# - Enfoque Prctico

Figura 2.-: C'%ig$ % # F$r!u#ari$ Si)+ !a % M (D

La 1igura L.G muestra la aplicaci,n en el e plorador de aplicaciones. 7ote algunos objetos nue&os como (ata*et3lumno. sd $ .r$stal0eporte.rpt !ue son un (ata*et (.onjunto de datos) $ un reporte dise#ado utili'ando .r$stal 0eport. Figura 2..: A"#i&a&i'( ( # /"#$ra%$r % )$#u&i$( )

La 1igura L.J muestra la configuraci,n de pro$ecto, la cual tiene !ue ser personali'ada utili'ando como &ersi,n de .7E" 1rameworT destino el .7E" 1rameworT G

Ing. Javier Alberto Manrique Quionez

Pgina 19Q

Microsoft C# - Enfoque Prctico

<ara crear el (ata*et3lumno (.onjunto de datos alumno) se debe seguir el siguiente procedimiento: Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregarF 7ue&oElemento. En la 1igura L.J nuestra lo indicado. Figura 2.0: Agr gar (u 5$ # ! (+$

*eleccione (atos K .onjunto de datos. Escriba (ata*et3lumno como nombre del .onjunto de datos. En la 1igura L.L nuestra lo indicado.

Ing. Javier Alberto Manrique Quionez

Pgina 19R

Microsoft C# - Enfoque Prctico

Figura 2.2: S # &&i'( % %a+$) 1 C$(ju(+$ % %a+$)

Merifi!ue !ue se muestra el dise#ador de (ata*et. La 1igura L.O muestra el dise#ador de (ata*et. Figura 2.4: Di) =a%$r % Da+aS +

En el rea de dise#o de (ata*et haga clic derecho $ seleccione del men conceptual 3gregar K "abla de datos. En la 1igura L.Q nuestra lo indicado.

Ing. Javier Alberto Manrique Quionez

Pgina 119

Microsoft C# - Enfoque Prctico

Figura 2.7: S # &&i'( Agr gar 1 Ta?#a % %a+$)

En el rea de dise#o de (ata*et seleccione el (ata"able $ haga clic derecho $ seleccione del men conceptual 3gregar K .olumna. En la 1igura L.R nuestra lo indicado. Figura 2.:: S # &&i'( Agr gar 1 C$#u!(a

Merifi!ue !ue el dise#ador de (ata*et se &isualice como en la 1igura L.19, en la cual se se obser&a !ue se ha creado un (ata"able con dos columnas ((ata.omun1 $ (ata.olumn;) Figura 2.1>: Da+aTa?# 1

Ing. Javier Alberto Manrique Quionez

Pgina 111

Microsoft C# - Enfoque Prctico

<ara crear un reporte utili'ando .r$stal report se debe seguir el siguiente procedimiento: Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregarF 7ue&oElemento. En la 1igura L.11 nuestra lo indicado. Figura 2.11: Agr gar (u 5$ # ! (+$

. *eleccione 0eporting K .r$stal 0eports. Escriba .r$stal0eporte como nombre del 0eporte. En la 1igura L.1; nuestra lo indicado. Figura 2.1*: S # &&i'( R "$r+i(g 1 Cr6)+a# R "$r+)

Ing. Javier Alberto Manrique Quionez

Pgina 11;

Microsoft C# - Enfoque Prctico

*eleccione Estndar $ haga clic en el bot,n de comando 3ceptar. En la 1igura L.1= nuestra lo indicado. Figura 2.1-: S # &&i'( E)+E(%ar 1 B$+'( % &$!a(%$ A& "+ar

*eleccione en datos del pro$ecto 3().7E" (ata*ets F 34.-$(3).(ata*et3lumno F (ata"able1. Luego haga clic en el bot,n de comando indicado. . En la 1igura L.1G nuestra lo

Ing. Javier Alberto Manrique Quionez

Pgina 11=

Microsoft C# - Enfoque Prctico

Figura 2.1.: Da+$) % # "r$6 &+$ ADO.NET Da+aS +)GABCM6DAO.Da+aS +A#u!($Da+aTa?# 1

Merifi!ue !ue la &entana del asistente para la creaci,n de informes estndar se &isualice como en la 1igura L.1J. Luego haga clic en el bot,n de comando siguiente. Figura 2.10: A)i)+ (+ "ara #a &r a&i'( % i(<$r! ) )+E(%ar

*eleccione todos los campos del (ata"able1 haciendo clic en el bot,n de comando 1igura L.1L. muestra el asistente en la selecci,n de campos a mostrar. Figura 2.12: S # &&i'( % &a!"$) a !$)+rar

. La

Ing. Javier Alberto Manrique Quionez

Pgina 11G

Microsoft C# - Enfoque Prctico

Merifi!ue !ue la &entana del asistente para la creaci,n de informes estndar se &isualice como en la 1igura L.1O. Luego haga clic en el bot,n de comando 1inali'ar. Figura 2.14: A)i)+ (+ "ara #a &r a&i'( % i(<$r! ) )+E(%ar

Merifi!ue !ue la &entana del reporte se &isualice como en la 1igura L.1Q. Figura 2.17: 3 (+a(a % r "$r+

Ing. Javier Alberto Manrique Quionez

Pgina 11J

Microsoft C# - Enfoque Prctico

<ara crear un formulario para desplegar el reporte se debe seguir el siguiente procedimiento: Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregarF 7ue&oElemento. En la 1igura L.1R nuestra lo indicado. Figura 2.1:: Agr gar (u 5$ # ! (+$

. *eleccione Aindows 1orms K Aindows 1orms. Escriba 1ormulario0eporte como nombre del 1ormulario. En la 1igura L.;9 nuestra lo indicado.

Ing. Javier Alberto Manrique Quionez

Pgina 11L

Microsoft C# - Enfoque Prctico

Figura 2.*>: S # &&i'( 8i(%$9) F$r!)G 8i(%$9) F$r!)

(el cuadro de herramientas arrastre el control .r$stal0eportMiewer. En la 1igura L.;1 nuestra lo indicado. Figura 2.*1: S # &&i'( % &$(+r$# Cr6)+a#R "$r+3i 9 r a# F$r!u#ari$R "$r+

Ing. Javier Alberto Manrique Quionez

Pgina 11O

Microsoft C# - Enfoque Prctico

Merifi!ue !ue el 1ormulario0eporte se &isualice como en la 1igura L.;;. $ el icono se#alado por la fecha. Este icono acti&a el men conceptual "areas del .r$stal0eportMiewer Figura 2.**: 3 (+a(a F$r!u#ari$R "$r+

(el men conceptual "areas del .r$stal0eportMiewer ) # &&i$( Cr6)+a#\] tal como se presenta en la 1igura L.;=.

IE# gir u( i(<$r!

Figura 2.*- M (D &$(& "+ua# +ar a) % Cr6)+aR "$r+3i 9 r

Ing. Javier Alberto Manrique Quionez

Pgina 11Q

Microsoft C# - Enfoque Prctico

En elegir un informe de .r$stal K cristal0eportMiewer1 seleccione .r$stalreport1.rpt tal como se presenta en la 1igura L.;G. Figura 2.*.: M (D &$(& "+ua# +ar a) % Cr6)+a#r "$r+3i 9 r &$( ) # &&i'( % r "$r+

Merifi!ue !ue el 1ormulario0eporte.cs se presente como en la 1igura L.;J Figura 2.*0: 3 (+a(a F$r!u#ari$R "$r+

Ing. Javier Alberto Manrique Quionez

Pgina 11R

Microsoft C# - Enfoque Prctico

<ulse 1O ingrese el c,digo del 1ormulario0eporte el cual se presenta en la 1igura L.;L. Figura 2.*2: C'%ig$ % # F$r!u#ari$R "$r+

Naga docle clic en el objeto app.config del E plorador de soluciones. En la 1igura L.;O. se &isuali'a el objeto app..onfig. Figura 2.*4: O?j +$ a"".C$(<ig ( # /"#$ra%$r % )$#u&i$( )

Ing. Javier Alberto Manrique Quionez

Pgina 1;9

Microsoft C# - Enfoque Prctico

3gregue el siguiente c,digo en el objeto app.config. En la 1igura L.;Q. el c,digo a agregarse en el objeto app..onfig. Figura 2.*7: C'%ig$ a agr gar ( # O?j +$ a"".C$(<ig

Ejecute el pro$ecto $ &erifi!ue !ue el reporte se &isualice como en la 1igura L.;R. Figura 2.*:: Ej &u&i'( % # r "$r+

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioABCM-Arc!i"oDeDatos#$# eporteConCr$stal.

Ing. Javier Alberto Manrique Quionez

Pgina 1;1

Microsoft C# - Enfoque Prctico

CAPTULO 4 ARCLI3OS DE DATOS DE ACCESO SECUENCIAL CON C#

Ing. Javier Alberto Manrique Quionez

Pgina 1;;

Microsoft C# - Enfoque Prctico

ARCLI3OS DE DATOS DE ACCESO SECUENCIAL


.omo $a se ha dicho en el capEtulo anterior, el almacenamiento en &ariables, arreglos o colecciones es + !"$ra#2 los datos se pierden cuando una &ariable local !ueda fuera del alcance del m%todo o cuando la aplicaci,n termina. La $rga(i;a&i'( ) &u (&ia# es una alternati&a a la organi'aci,n directa. La $rga(i;a&i'( ) &u (&ia# es el m%todo en el cual los registros se deben acceder (leer) en el mismo orden en !ue se almacenaron, por lo !ue su acceso se reali'a utili'ando el acceso secuencial. <ara su manejo eficiente se puede combinar la organi'aci,n secuencial con el uso de arreglos de objetos. Esto permitirEa almacenar los datos en archi&os de datos $ para el mantenimiento los datos se cargarEan en la memoria. 3l terminar la ejecuci,n de la aplicaci,n los datos actuali'ados se regrabarEan en el archi&o secuencial utili'ando la organi'aci,n secuencial. FLUJOS Los ejemplos posteriores utili'arn archi&os de te to $ por lo !ue la comunicaci,n entre una aplicaci,n $ el origen o el destino del archi&o se reali'ar de forma similar a los archi&os binarios. Esto es, mediante el uso de flujos de informaci,n (stream), !ue no es ms !ue un objeto !ue hace de intermediario entre la aplicaci,n $ el origen o el destino de datos. (e esta forma la aplicaci,n leer o escribir en el flujo sin importarle desde donde &ienen o &an los datos. Los archi&os de te to utili'an el espacio de nombres S6)+ !.IO de la biblioteca .7et !ue contiene una colecci,n de clases !ue soportan la lectura $ escritura en archi&os. La clase 1ile*tream subclase de *tream permite escribir $ leer datos de un archi&o b$te a b$te2 anal,gicamente, las clases S+r a!8ri+ r $ S+r a!R a% r subclases de "e tAriter $ te t0eader permiten escribir $ leer caracteres o te to. FLUJO DE BHTES EN ARCLI3O DE TEOTO Los datos pueden ser escritos o leEdos de un archi&o b$te a b$te utili'ando un flujo de la clase 1ile*tream Fi# S+r a! +n flujo de la clase 1ile*tream permite leer $ escribir b$tes en un archi&o . Esta clase adems de los m%todos !ue hereda de la clase *tream, proporciona el constructor siguiente: Fi# S+r a!@)+ri(g ($!?r B Fi# M$% B Fi# A&& )) a&& )$C El constructor abre el flujo de entrada $ salida (para leer $ escribir) &inculando con el archi&o especificado por el nombre $ especificando el tipo de acceso (leer, escribir o leer $ escribir). El parmetro nombre es una cadena de caracteres !ue especifica la ruta donde se guarda o se guardar el archi&o. El parmetro modo, del tipo enumerado 1ile-ode, puede tomar diferentes tipos de &alores. En la tabla J.1 se muestra los tipos de &alores !ue puede tomar el parmetro 1ile-ode. Ta?#a 0.1: Ti"$ % 5a#$r ) % # "arE! +r$ Fi# M$%
.reate7ew .reate )pen )pen)r.reat e "runcate 3ppend 0ead 0eadArite Arite
B

.rear un nue&o archi&o. *i el archi&o e iste se lan'ar una e cepci,n del tipo I)E ception .rea un nue&o archi&o. *i el archi&o e iste ser sobreescrito 3bre un archi&o e istente 3bre un archi&o si e iste2 si no, se crea un nue&o archi&o 3bre un archi&o e istente. +na &e' abierto, el archi&o ser truncado a cero b$tes de longitud 3bre un archi&o para a#adir datos al final del mismo si e iste o crea uno nue&o sino e iste <ermite abrir un archi&o para operaciones de lectura <ermite abrir un archi&o para operaciones de lectura D escritura <ermite abrir un archi&o para operaciones de escritura

FLUJOS DE CARACTERES Los datos pueden ser escritos $ leEdos de un archi&o carcter por carcter den forma portable (+"1F Q: +.* "ransformation 1ormat, formato Q de bits en el !ue cada carcter +nicode emplea 1 o ms b$tes) utili'ando flujos de las clases *treamAriter $ *tream0eader, subclases de "e tAriter $ te t0eader respecti&amente. S+r a!8ri+ r

Ing. Javier Alberto Manrique Quionez

Pgina 1;=

Microsoft C# - Enfoque Prctico

+n flujo de la clase *treamAriter permite escribir caracteres en un archi&o. Esta clase, adems de los m%todos !ue hereda de la clase "e tAriter, proporciona los siguientes constructores: *treamAriter(string flujo) Este constructor abre un flujo de salida (para escribir) hacia el archi&o &inculado con otro flujo e istente de la clase *tream o de sus deri&adas. El flujo de la clase *treamAriter acta como un filtro2 los datos en&iados al destino son transformados en formato portable +"1FQ $ &ice&ersa si son recuperados a tra&%s de un flujo de la clase *tream0eader, los cual hace !ue la aplicaci,n lea o escriba datos a tra&%s del filtro. *treamAriter posee m%todos como Arite, Ariteline $ 1lush. Arite permite escribir cual!uier tipo de datos primiti&os, arreglo de caracteres, objetos *tring con o sin formato en forma de cadena. Estos datos escritos (grabados) se caracteri'an por!ue ocupan bastante espacio en el disco. Ariteline hace lo mismo, pero a#ade los caracteres a[r[nb. 1lush limpia el buffer de salida &olcando los datos en el archi&o &inculado al flujo. 3dems, en la utili'aci,n de Arite o AriteLine se puede utili'ar una salida formateada. Esto se puede reali'ar a tra&%s de *tring.1ormat, !ue con&ierte el &alor de un objeto en una representaci,n de cadena basada en un formato personali'ado (plantilla) !ue se encribe entre lla&es (@5:@). La sinta is de un plantilla de formato es la siguiente: *tring cadena 8 *tring.1ormat(@5indice1,longitud1:5indice;, longitud;, \:], objeto1,objeto;, \)2 cadena Endice7 : )bjeto de tipo string !ue se grabar utili'ando Arite o AriteLine. : <osici,n del objeto !ue inicia en cero en la lista de argumentos !ue se &an a dar formato. longitud7 :7mero mEnimo de caracteres de la representaci,n de cadena del parmetro. *i su &alor es positi&o, el objeto se alinear a la derecha2 si es negati&o el objeto se alinear a la i'!uierda. objeto7 :Mariable num%rica o &ariable de cadena. 3 continuaci,n se presenta un ejemplo de utili'aci,n de flujo de caracteres para escritura: public &oid gra?arAr&Ki5$D T /+$(*a&e1ile(ialog o*a&e1ile(ialog, 3lumno>? o3rreglo3lumno) 5 Fi# S+r a! o1ile*tream8new 1ile*tream(o*a&e1ile(ialog.1ile7ame, 1ile-ode..reate, 1ile3ccess.Arite)2 S+r a!8ri+ r o*treamAriter 8 new *treamAriter(o1ile*tream)2 tr$ 5 for (int i 8 92 iS1ormulario*istema(e-enu.numero(e3lumno2 i8iB1) 5 *tring output 8 S+ri(g.F$r!a+(@59,FJ: 51,F;J: 5;,FJ: 5=,FJ: 5G,FJ: 5J,FJ:@, o3rreglo3lumno>i?.alumno6id."o*tring(), o3rreglo3lumno>i?.apellido7ombre, o3rreglo3lumno>i?.e&aluacion<arcial1."o*tring(), o3rreglo3lumno>i?.e&aluacion<arcial;."o*tring(), o3rreglo3lumno>i?.promedio(e"rabajo."o*tring(), o3rreglo3lumno>i?.promedio1inal."o*tring() )2 $S+r a!8ri+ r.8ri+ Li( @$u+"u+CT : : ... : S+r a!R a% r +n flujo de la clase *tream0eader, permite a una aplicaci,n leer caracteres desde cual!uier archi&o datos grabados en formato te to. *e puede crear un flujo de esta clase utili'ando el siguiente constructor: *tream0eader(*tream flujo)

Ing. Javier Alberto Manrique Quionez

Pgina 1;G

Microsoft C# - Enfoque Prctico

Este constructor abre un flujo de entrada (para leer) desde el archi&o &inculando con otro flujo e istente de la clase *tream o de sus deri&adas. La funcionalidad de esta clase est soportada por &arios m%todos entre los !ue cabe destacar 0ead, 0eadLine, <eeT $ (iscard4uffered(ata. 0ead permite leer un carcter o un conjunto de caracteres. 0eadline permite leer una lEnea. +na lEnea est definida como una secuencia de caracteres seguidos por a[r, b[nb , o bien por a[r b[nb. <eeT permite obtener el siguiente carcter a leer pero sin e traerlo del buffer asociado con el flujo. (iscard4uffered(ata permite eliminar los caracteres !ue actualmente ha$ en el buffer asociado con el flujo. Ejemplo: public 3lumno>? .argar3rchi&o(e"e to()pen1ile(ialog o)pen1ile(ialog, 3lumno>? o3rreglo3lumno) 5 int tama#o(el0egistro8J12 int numero(e0egistros2
1ile*tream 1ile3ccess.0ead)2 o1ile*tream8new 1ile*tream(o)pen1ile(ialog.1ile7ame, 1ile-ode.)pen,

S+r a!R a% r o*tream0eader 8 new *tream0eader(o1ile*tream)2 1ileInfo o1ileInfo 8 new 1ileInfo(o)pen1ile(ialog.1ile7ame)2 int tama#o(el3rchi&o 8 (int) o1ileInfo.Length2 numero(e0egistros8tama#o(el3rchi&oDtama#o(el0egistro2 tr$ 5 *tring linea2 int i892 while (iSnumero(e0egistros) 5 linea8$S+r a!R a% r.R a%Li( @C2 3lumno o3lumno8new 3lumno()2 o3lumno.alumno6id 8 Int=;.<arse(linea.*ubstring(9,J)."rim())2 o3lumno.apellido7ombre 8 linea.*ubstring(J, ;J)."rim()2 o3lumno.e&aluacion<arcial1 8 double.<arse(linea.*ubstring(=9,J)."rim())2 o3lumno.e&aluacion<arcial; 8 double.<arse(linea.*ubstring(=J,J)."rim())2 o3lumno.promedio(e"rabajo 8 double.<arse(linea.*ubstring(G9,J)."rim())2 o3lumno.promedio1inal 8 double.<arse(linea.*ubstring(GJ,J)."rim())2 o3rreglo3lumno>i? 8 o3lumno2 i8iB12 : return o3rreglo3lumno2 : ... : <ara la selecci,n del archi&o a abrir o guardar se utili'a la .lase O" (Fi# Dia#$g $ Sa5 Fi# Dia#$g respecti&amente. )pen1ile(ialog permite al usuario e aminar una unidad de disco, carpetas $ &isuali'ar archi&os con e tensi,n especificada $ finalmente seleccionar el nombre de un archi&o. +na &e' reali'ada la selecci,n, la propiedad 1ile7ame contendr la ruta $ el nombre del archi&o seleecionado. 3dems se tiene las siguientes propiedades: O" (Fi# Dia#$g.SK$9Dia#$g -uestra un )pen1ile(ialog !ue es modal con respecto al formulario !ue hace la llamada. Dia#$gR )u#+ )btiene o establece el resultado del cuadro de dilogo. El &alor de tipo (ialog0esult de&uelto por *how(ialog indica si el usuario acept, la operaci,n ()T) o la .ancel, (.ancel). .uando el usuario hace clic en el control de 4utton, el &alor asignado a la propiedad de (ialog0esult de 4utton se asigna a la propiedad de (ialog0esult . (ialogo0esult tiene los siguientes &alores: (ialog0esult.3bort (ialog0esult..ancel : El &alor de&uelto por el cuadro de dilogo es 3bort (suele en&iarse desde un bot,n 3nular). : El &alor de&uelto por el cuadro de dilogo es .ancel (suele en&iarse desde un bot,n .ancelar).

Ing. Javier Alberto Manrique Quionez

Pgina 1;J

Microsoft C# - Enfoque Prctico

(ialog0esult.Ignore (ialog0esult.7o (ialog0esult.7one (ialog0esult.)C (ialog0esult.0etr$ (ialog0esult.Yes

: El &alor de&uelto por el cuadro de dilogo es Ignore (suele en&iarse desde un bot,n )mitir). : El &alor de&uelto por el cuadro de dilogo es 7o (suele en&iarse desde un bot,n de eti!ueta 7o). : El cuadro de dilogo de&uel&e 7othing. Esto significa !ue el cuadro de dilogo modal contina ejecutndose. : El &alor de&uelto por el cuadro de dilogo es )C (suele en&iarse desde un bot,n 3ceptar). : El &alor de&uelto por el cuadro de dilogo es 0etr$ (suele en&iarse desde un bot,n de eti!ueta 0eintentar). : El &alor de&uelto por el cuadro de dilogo es Yes (suele en&iarse desde un bot,n de eti!ueta *E).

3dems )pen1ile(ialog tiene las siguientes propiedades: O" (Fi# Dia#$g . I(i+ia#Dir &+$r6. )btiene o establece el directorio inicial !ue muestra el cuadro de dilogo )pen1ile(ialog . O" (Fi# Dia#$g.Ti+# . <roporciona le nombre del .uadro de dilogo. O" (Fi# Dia#$g.Fi# (a! . )btiene el nombre de un de un archi&o seleccionado por O" (Fi# Dia#$g. Fi# I(<$.L (g+K. )btiene el tama#o, en b$tes, del archi&o actual. Fi# Dia#$g.Fi#+ r. )btiene o establece la cadena de filtro !ue determina !u% tipos de archi&o se muestran desde )pen1ile(ialog o *a&e1ile(ialog. +n objeto *tring !ue contiene el filtro. El &alor predeterminado es Empt$, !ue indica !ue no se aplica ningn filtro $ !ue se muestran todos los tipos de archi&o. 3l menos, una Extension debe describir cada tipo de archi&o. *i se usa ms de una Extension, se deben separar por punto $ coma (@2@). <or ejemplo:

@_.doc@ @_. ls2@ @_.ppt@ @_.doc2_. ls2_.ppt@ @_._@ Aord (ocumentsc_.doc E cel AorTsheetsc_. ls <ower<oint <resentationsc_.ppt )ffice 1ilesc_.doc2_. ls2_.ppt 3ll 1ilesc_._ Aord (ocumentsc_.doccE cel AorTsheetsc_. lsc<ower<oint <resentationsc_.pptc)ffice 1ilesc _.doc2_. ls2_.pptc3ll 1ilesc_._

O" (Fi# Dia#$g o)pen1ile(ialog 8 new )pen1ile(ialog()2 o)pen1ile(ialog.Initial(irector$8@c:[[@2 o)pen1ile(ialog."itle8@*elecione un archi&o de te to @2 o)pen1ile(ialog.1ilter8@3rchi&os de datos c_.dat@2 (ialog0esult o(ialog0esult 8 o)pen1ile(ialog.*how(ialog()2 if (o(ialog0esult88(ialog0esult.)C) 5 3lumno(3) o3lumno(3)8new 3lumno(3)()2 o3rreglo3lumno8o3lumno(3)..argar3rchi&o(e"e to(o)pen1ile(ialog, o3rreglo3lumno)2 \ : \ Sa5 Fi# Dia#$g.SK$9Dia#$g Es id%ntico al cuadro de dilogo )pen1ile(ialog donde *a&e1ile(ialog permite al usuario seleccionar una unidad de disco, abrir una carpeta, &isuali'ar archi&os con e tensi,n especificadas $ finalmente seleccionar o proporcionar el nombre de un archi&o para guardarlo. Ejemplo:

Ing. Javier Alberto Manrique Quionez

Pgina 1;L

Microsoft C# - Enfoque Prctico

pri&ate &oid buttonHrabar3rchi&ode"e to6.licT(object sender, E&ent3rgs e) 5 Sa5 Fi# Dia#$g o*a&e1ile(ialog 8 new *a&e1ile(ialog()2 o*a&e1ile(ialog.Initial(irector$8@c:[[@2 o*a&e1ile(ialog.1ilter8@3rchi&os de datos c_.dat@2 o*a&e1ile(ialog."itle8@*elecione un archi&o de te to @2 (ialog0esult o(ialog0esult 8 o*a&e1ile(ialog.*how(ialog()2 if (o(ialog0esult88(ialog0esult.)C) 5 3lumno(3) o3lumno(3)8new 3lumno(3)()2 o3lumno(3).grabar3rchi&o(e"e to(o*a&e1ile(ialog, o3rreglo3lumno)2 : : 3 continuaci,n se presenta un ejemplo de una aplicaci,n !ue administra un archi&o de testo secuencial !ue tiene las siguientes caracterEsticas: a) <resenta un formulario para un *sistema de -antenimiento 34.- de alumnos. b) La letra 34.- significan 3ltas, 4ajas, .onsultas $ -odificaci,n respecti&amente. c) La estructura de la clase 3lumno es la siguiente:
int alumno_id String apellidoNombre double evaluacionParcial1 double evaluacionParcial2 double promedioDeTrabajo double promedioFinal

d) La longitud del registro es J; b$tes. e) +tili'a una clase de acceso a datos ((3)) !ue permite interactuar la aplicaci,n con el archi&o de datos de te to almacenado e ternamente f) +tili'a un clase denominada 34.-3ction para almacenar las constantes de las operaciones posibles. g) La 1igura O.1 &isuali'a el diagrama de clases de clase de la aplicaci,n ejemplo. h) En la 1igura O.;, 1igura O.=, 1igura O.G, 1igura O.J, 1igura O.L, 1igura O.O $ 1igura O.Q se &isuali'an los formularios de la aplicaci,n ejemplo. i) La 1igura O.R &isuali'a la aplicaci,n en el E plorador de *oluciones. j) La 1igura O.19 presenta el c,digo de la aplicaci,n K 34.-3ction. T) La 1igura O.11 presenta el c,digo de la aplicaci,n K <rograma principal. l) La 1igura O.1; presenta el c,digo de la aplicaci,n K .lase 3lumno. m) La 1igura O.1= presenta el c,digo de la aplicaci,n K .lase 3lumno (3). n) La 1igura O.1G presenta .,digo de la aplicaci,n K .lase 1ormulario34.Figura 4.1: Diagra!a % &#a) )

Ing. Javier Alberto Manrique Quionez

Pgina 1;O

Microsoft C# - Enfoque Prctico

Figura 4.*: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 N$ a&+i$(

Figura 4.-: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( I() r+arGBu)&ar

Ing. Javier Alberto Manrique Quionez

Pgina 1;Q

Microsoft C# - Enfoque Prctico

Figura 4..: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( I() r+arGGuar%ar

Ing. Javier Alberto Manrique Quionez

Pgina 1;R

Microsoft C# - Enfoque Prctico

Figura 4.0: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( M$%i<i&arG Guar%ar

Figura 4.2: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 A&+i$( M$%i<i&arG C$(<ir!ar

Ing. Javier Alberto Manrique Quionez

Pgina 1=9

Microsoft C# - Enfoque Prctico

Figura 4.4: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 C$()u#+ar

Figura 4.7: F$r!u#ari$ Si)+ !a % Ma(+ (i!i (+$ ABCM % a#u!($) 1 E#i!i(ar G C$(<ir!ar

Ing. Javier Alberto Manrique Quionez

Pgina 1=1

Microsoft C# - Enfoque Prctico

Figura 4.:: A"#i&a&i'( ( # E/"#$ra%$r % )$#u&i$( )

Figura 4.1>: C'%ig$ % #a a"#i&a&i'( 1 ABCMA&+i$(


using S"stem'

Ing. Javier Alberto Manrique Quionez

Pgina 1=;

Microsoft C# - Enfoque Prctico


namespace AB !"DA# $ public class AB !Accion $ public static int N#_A T%#N public static int A T%#N_B(S A) public static int A T%#N_%NS*)TA) public static int A T%#N_!#D%F% A) public static int A T%#N_ AN *-A) public static int A T%#N_*-%!%NA) public static int A T%#N_ #NS(-TA 1

& 1' & 2' & +' & ,' & .' & /' & 0'

Figura 4.11: C'%ig$ % #a a"#i&a&i'( 1 Pr$gra!a "ri(&i"a#


using S"stem' using S"stem58indo7s5Forms' namespace AB !"DA# $ static class Program $ ESTAT4readF static void !ain2) $ AlumnoEF oArregloAlumno & ne7 AlumnoE1IIF' 6or 2int i & I' iB1II' i&iJ1) $ oArregloAlumnoEiF&ne7 Alumno2)' 1 Application5*nableGisualSt"les2)' Application5Set ompatibleTeHt)enderingDe6ault26alse)' AlumnoDA# oAlumnoDA#&ne7 AlumnoDA#2)' Application5)un2ne7 FormularioSistemaDe!enu2oArregloAlumno))'

1 1 1

Figura 4.1*: C'%ig$ % #a a"#i&a&i'( 1 C#a) A#u!($ using *$stem2 namespace 34.-$(3) 5 public class 3lumno 5 public int alumno6id 5get2set2: public *tring apellido7ombre 5get2set2: public double e&aluacion<arcial1 5get2set2: public double e&aluacion<arcial; 5get2set2: public double promedio(e"rabajo 5get2set2: public double promedio1inal 5get2set2: public 3lumno ( ) 5 this.alumno6id 8 92 this.apellido7ombre 8 null2 this.e&aluacion<arcial1 8 92 this.e&aluacion<arcial; 8 92 this.promedio(e"rabajo 8 92 :

public 3lumno ( int alumno6id, *tring apellido7ombre, double e&aluacion<arcial1, double e&aluacion<arcial;, double promedio(e"rabajo, double promedio1inal ) 5 this.alumno6id 8 alumno6id2
this.apellido7ombre 8 apellido7ombre2

Ing. Javier Alberto Manrique Quionez

Pgina 1==

Microsoft C# - Enfoque Prctico this.e&aluacion<arcial1 8 e&aluacion<arcial12 this.e&aluacion<arcial; 8 e&aluacion<arcial;2 this .promedio(e"rabajo 8 promedio(e"rabajo2 this .promedio1inal 8 promedio1inal2

: public &oid set<romedio1inal ( )


5 this.promedio1inal .promedio(e"rabajo) D =2 8(this.e&aluacion<arcial1 B this.e&aluacion<arcial; B this

: public o&erride *tring "o*tring ( ) 5 return apellido7ombre2 : : : Figura 4.1-: C'%ig$ % #a a"#i&a&i'( 1 C#a) A#u!($ DAO using *$stem2 using *$stem.I)2 using *$stem.Aindows.1orms2 namespace 34.-$(3) 5 public class 3lumno(3) 5 public int insertar0egistro(3lumno>? o3rreglo3lumno, 3lumno numero(e3lumno) 5 o3rreglo3lumno>numero(e3lumno?8o3lumno2 numero(e3lumno8numero(e3lumnoB12 return numero(e3lumno2 :

o3lumno,

int

public 3lumno consultar0egistro(3lumno>? o3rreglo3lumno, int numero(e3lumno,int bus!ueda) 5 3lumno o3lumno 8 new 3lumno()2 for (int i 8 92 i S numero(e3lumno2 i 8 i B 1) 5 if (o3rreglo3lumno>i?.alumno6id88bus!ueda) 5 o3lumno8o3rreglo3lumno>i?2 return o3lumno2 : : return null2 : public 4oolean modificar0egistro (3lumno>? o3rreglo3lumno, int numero(e3lumno,int bus!ueda, 3lumno o3lumno ) 5 int indice8buscar0egistro(o3rreglo3lumno,numero(e3lumno, bus!ueda)2 o3rreglo3lumno>indice?8o3lumno2 return true2 : public int eliminar0egistro(3lumno>? o3rreglo3lumno, int numero(e3lumno, int bus!ueda) 5 int indice 8 buscar0egistro(o3rreglo3lumno, numero(e3lumno, bus!ueda)2 for (int i 8 indice2 i S numero(e3lumnoF12 i 8 i B 1) 5 o3rreglo3lumno>i?8o3rreglo3lumno>iB1?2 : numero(e3lumno8numero(e3lumnoF12 return numero(e3lumno2 : public int buscar0egistro(3lumno>? o3rreglo3lumno, int numero(e3lumno,int bus!ueda) 5 3lumno o3lumno 8 new 3lumno()2

Ing. Javier Alberto Manrique Quionez

Pgina 1=G

Microsoft C# - Enfoque Prctico

for (int i 8 92 i S numero(e3lumno2 i 8 i B 1) 5 if (o3rreglo3lumno>i?.alumno6id88bus!ueda) 5 o3lumno8o3rreglo3lumno>i?2 return i2 : : return FRR2 : public 3lumno>? obtener(atosEnList(3lumno>? o3rreglo3lumno) 5 return o3rreglo3lumno2 : public 3lumno>? .argar3rchi&o(e"e to()pen1ile(ialog o3rreglo3lumno) 5 int tama#o(el0egistro8J12 int numero(e0egistros2
1ile*tream 1ile3ccess.0ead)2 o1ile*tream8new

o)pen1ile(ialog,

3lumno>?

1ile*tream(o)pen1ile(ialog.1ile7ame,

1ile-ode.)pen,

*tream0eader o*tream0eader 8 new *tream0eader(o1ile*tream)2 1ileInfo o1ileInfo 8 new 1ileInfo(o)pen1ile(ialog.1ile7ame)2 int tama#o(el3rchi&o 8 (int) o1ileInfo.Length2 numero(e0egistros8tama#o(el3rchi&oDtama#o(el0egistro2 tr$ 5 *tring linea2 int i892 while (iSnumero(e0egistros) 5 linea8o*tream0eader.0eadLine()2 3lumno o3lumno8new 3lumno()2 o3lumno.alumno6id8Int=;.<arse(linea.*ubstring(9,J)."rim())2 o3lumno.apellido7ombre 8 linea.*ubstring(J, ;J)."rim()2 o3lumno.e&aluacion<arcial18 double.<arse(linea.*ubstring(=9,J)."rim())2 o3lumno.e&aluacion<arcial;8 double.<arse(linea.*ubstring(=J,J)."rim())2 o3lumno.promedio(e"rabajo 8 double.<arse(linea.*ubstring(G9,J)."rim())2 o3lumno.promedio1inal 8 double.<arse(linea.*ubstring(GJ,J)."rim())2 o3rreglo3lumno>i?8o3lumno2 i8iB12 : return o3rreglo3lumno2 : catch (1ile7ot1oundE ception e ) 5 -essage4o .*how(@El archi&o no e isteV@Be )2 return null2 : catch (I)E ception e ) 5 -essage4o .*how(@El archi&o no se puede leerV@Be )2 return null2 : :

public o3rreglo3lumno)

&oid

grabar3rchi&o(e"e to(*a&e1ile(ialog

o*a&e1ile(ialog,

3lumno>?

Ing. Javier Alberto Manrique Quionez

Pgina 1=J

Microsoft C# - Enfoque Prctico

5 1ile*tream 1ile-ode..reate,

o1ile*tream8new

1ile*tream(o*a&e1ile(ialog.1ile7ame,

1ile3ccess.Arite)2 *treamAriter o*treamAriter 8 new *treamAriter(o1ile*tream)2 tr$ 5 for (int i 8 92 iS1ormulario*istema(e-enu.numero(e3lumno2 i8iB1) 5 DD *e utili'a *tring.1ormat para formatear la salida. DD se grabar un registro con todos sus campos, los cuales se alinean a la i'!uierda. *tring output 8 *tring.1ormat@59,FJ: 51,F;J: 5;,FJ: 5=,FJ: 5G,FJ: 5J,FJ:@, o3rreglo3lumno>i?.alumno6id."o*tring(), o3rreglo3lumno>i?.apellido7ombre, o3rreglo3lumno>i?.e&aluacion<arcial1."o*tring(), o3rreglo3lumno>i?.e&aluacion<arcial;."o*tring(), o3rreglo3lumno>i?.promedio(e"rabajo."o*tring(), o3rreglo3lumno>i?.promedio1inal."o*tring() )2 o*treamAriter.AriteLine(output)2 : o*treamAriter..lose()2 o1ile*tream..lose()2 : catch (I)E ception e) 5 -essage4o .*how(@Error...@Be)2 : : : : Figura 4.1.: C'%ig$ % #a a"#i&a&i'( 1 C#a) F$r!u#ari$ABCM using *$stem2 using *$stem.Aindows.1orms2 using *$stem.(rawing2 namespace 34.-$(3) 5 public partial class 1ormulario34.-$(3): 1orm 5 pri&ate int action 8 34.-3ction.7)63."I)72 3lumno>? o3rreglo3lumno2 public 1ormulario34.-$(3)(3lumno>? o3rreglo3lumno) 5 Initiali'e.omponent()2 this.o3rreglo3lumno8o3rreglo3lumno2 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : pri&ate &oid formatear(ataHridMiew() 5 DD<ara especificar la fuente utili'ada por las celdas de (ataHridMiew dataHridMiew3lumno.(efault.ell*t$le.1ont8new 1ont(@"ahoma@, 9O)2 DD <ara cambiar mediante programaci,n el estilo de borde de todo el control (ataHridMiew dataHridMiew3lumno.4order*t$le84order*t$le.1i ed=(2 DD <ara cambiar mediante programaci,n el color de la lEnea de la cuadrEcula dataHridMiew3lumno.Hrid.olor8.olor.4lue2 DD <ara indicar la forma de selecci,n de las filas

Ing. Javier Alberto Manrique Quionez

Pgina 1=L

Microsoft C# - Enfoque Prctico

dataHridMiew3lumno.*election-ode8(ataHridMiew*election-ode.1ull0ow*elect2 DD <ara especificar los colores de primer plano $ de fondo de celdas seleccionadas dataHridMiew3lumno.(efault.ell*t$le.*election1ore.olor8.olor.4lacT2 dataHridMiew3lumno.(efault.ell*t$le.*election4acT.olor8.olor.3!ua2 DD <ara establecer estilos de filas alternas mediante programaci,n dataHridMiew3lumno.0ows(efault.ell*t$le.4acT.olor8.olor.<inT2 dataHridMiew3lumno.3lternating0ows(efault.ell*t$le.4acT.olor8.olor.3'ure2 DD <ara especificar la alineaci,n del te to de celdas de (ataHridMiew dataHridMiew3lumno..olumns>@.olumn3lumno6id@?.(efault.ell*t$le.3lignment8 (ataHridMiew.ontent3lignment.-iddle0ight2 dataHridMiew3lumno..olumns>@.olumn3pellido7ombre@?.(efault.ell*t$le.3lignment8 (ataHridMiew.ontent3lignment.-iddleLeft2 dataHridMiew3lumno..olumns>@.olumnE&aluacionparcial1@?.(efault.ell*t$le.3lignment8 (ataHridMiew.ontent3lignment.-iddle0ight2 dataHridMiew3lumno..olumns>@.olumnE&aluacionparcial;@?.(efault.ell*t$le.3lignment8 (ataHridMiew.ontent3lignment.-iddle0ight2 dataHridMiew3lumno..olumns>@.olumn<romedio(etrabajo@?.(efault.ell*t$le.3lignment8 (ataHridMiew.ontent3lignment.-iddle0ight2 dataHridMiew3lumno..olumns>@.olumn<romedio1inal@?.(efault.ell*t$le.3lignment8 (ataHridMiew.ontent3lignment.-iddle0ight2 DD <ara especificar los colores de primer plano $ de fondo de las celdas de (ataHridMiew dataHridMiew3lumno.(efault.ell*t$le.1ore.olor8.olor.4lacT2 dataHridMiew3lumno.(efault.ell*t$le.4acT.olor8.olor.4eige2 : pri&ate 3lumno get)bjeto3lumno() 5 3lumno o3lumno 8 new 3lumno()2 o3lumno.alumno6id8int.<arse(te t4o 3lumno6id."e t)2 o3lumno.apellido7ombre8te t4o 3pellido7ombre."e t2 o3lumno.e&aluacion<arcial18double.<arse(te t4o E&aluacion<arcial1."e t)2 o3lumno.e&aluacion<arcial;8double.<arse(te t4o E&aluacion<arcial;."e t)2 o3lumno.promedio(e"rabajo8double.<arse(te t4o <romedio(e"rabajo."e t)2 return o3lumno2 : pri&ate &oid set)bjeto3lumno(3lumno o3lumno) 5 te t4o 3lumno6id."e t8o3lumno.alumno6idB@@2 te t4o 3pellido7ombre."e t8o3lumno.apellido7ombreB@@2 te t4o E&aluacion<arcial1."e t8o3lumno.e&aluacion<arcial1B@@2 te t4o E&aluacion<arcial;."e t8o3lumno.e&aluacion<arcial;B@@2 te t4o <romedio(e"rabajo."e t8o3lumno.promedio(e"rabajoB@@2 : pri&ate &oid limpiar(ataHridMiew3lumno() 5 dataHridMiew3lumno.0ows..lear()2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1=O

Microsoft C# - Enfoque Prctico

pri&ate &oid actuali'ar(ataHridMiew3lumno() 5 limpiar(ataHridMiew3lumno()2 3lumno(3) o3lumn(3) 8 new 3lumno(3)()2 o3rreglo3lumno8o3lumn(3).obtener(atosEnList(o3rreglo3lumno)2 for (int posicion 8 92 posicionS1ormulario*istema(e-enu.numero(e3lumno2 posicion8posicionB1) 5 dataHridMiew3lumno.0ows.3dd(o3rreglo3lumno>posicion?.alumno6id, o3rreglo3lumno>posicion?, o3rreglo3lumno>posicion?.e&aluacion<arcial1, o3rreglo3lumno>posicion?.e&aluacion<arcial;, o3rreglo3lumno>posicion?.promedio(e"rabajo, o3rreglo3lumno>posicion?.promedio1inal)2 : : pri&ate &oid dataHridMiew3lumno6-ouse.licT(object sender, -ouseE&ent3rgs e) 5 if (e..licTs881 UU 1ormulario*istema(e-enu.numero(e3lumnoP81) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if (fila*eleccionadaV8F1) 5 3lumno o3lumno*eleccionado 8 (3lumno) dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2 : : : pri&ate &oid habilitar4otones34.-(4oolean c4uscar, 4oolean c7ue&o, 4oolean cHuardar, 4oolean cEditar, 4oolean cEliminar, 4oolean c.onsultar, 4oolean c.ancelar, 4oolean c*alir) 5 button4uscar.Enabled 8 c4uscar2 button7ue&o.Enabled 8 c7ue&o2 buttonHuardar.Enabled 8 cHuardar2 button-odificar.Enabled 8 cEditar2 buttonEliminar.Enabled 8 cEliminar2 button.onsultar.Enabled 8 c.onsultar2 button.ancelar.Enabled 8 c.ancelar2 button*alir.Enabled 8 c*alir2 : pri&ate &oid habilitar.ajas(e"e to(4oolean editable) 5 te t4o 3pellido7ombre.Enabled 8 editable2 te t4o E&aluacion<arcial1.Enabled 8 editable2 te t4o E&aluacion<arcial;.Enabled 8 editable2 te t4o <romedio(e"rabajo.Enabled 8 editable2 : pri&ate &oid limpiar.ajas(e"e to() 5 te t4o 3pellido7ombre."e t 8 @@2 te t4o E&aluacion<arcial1."e t 8 @@2 te t4o E&aluacion<arcial;."e t 8 @@2 te t4o <romedio(e"rabajo."e t 8 @@2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1=Q

Microsoft C# - Enfoque Prctico

pri&ate &oid button4uscar6.licT(object sender, E&ent3rgs e) 5 if (action 88 34.-3ction.3."I)764+*.30) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 int bus!ueda 8 Int=;.<arse(te t4o 3lumno6id."e t)2 3lumno o3lumno 8 o3lumno(3).consultar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, bus!ueda)2 if (o3lumno V8 null) 5 -essage4o .*how(@0egistro e istente VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : else 5 action 8 34.-3ction.3."I)76I7*E0"302 te t4o 3lumno6id.Enabled 8 false2 habilitar.ajas(e"e to(true)2 controlador(eE&entos4otones34.-()2 te t4o 3pellido7ombre.1ocus()2 : : else 5 if (action 88 34.-3ction.3."I)76.)7*+L"3) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 int bus!ueda 8 Int=;.<arse(te t4o 3lumno6id."e t)2 3lumno o3lumno 8 o3lumno(3).consultar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, bus!ueda)2 if (o3lumno V8 null) 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 set)bjeto3lumno(o3lumno)2 : else 5 -essage4o .*how(@7o se encuentra VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : : : pri&ate &oid button7ue&o6.licT(object sender, E&ent3rgs e) 5 dataHridMiew3lumno.Enabled 8 false2 te t4o 3lumno6id."e t 8 @@2 limpiar.ajas(e"e to()2 action 8 34.-3ction.3."I)764+*.302 controlador(eE&entos4otones34.-()2 te t4o 3lumno6id.Enabled 8 true2 te t4o 3lumno6id.1ocus()2 :

pri&ate &oid buttonHuardar6.licT(object sender, E&ent3rgs e) 5 if (action8834.-3ction.3."I)76I7*E0"30) 5 if (-essage4o .*how(@W(esea guardarlo...X@, @.onfirme el guardado@,

Ing. Javier Alberto Manrique Quionez

Pgina 1=R

Microsoft C# - Enfoque Prctico

-essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion)88(ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 1ormulario*istema(e-enu.numero(e3lumno8 o3lumno(3).insertar0egistro(o3rreglo3lumno, get)bjeto3lumno(), 1ormulario*istema(e-enu.numero(e3lumno)2 action834.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 button7ue&o.1ocus()2 : else 5 limpiar.ajas(e"e to()2 action834.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 if (action8834.-3ction.3."I)76-)(I1I.30) 5 if (-essage4o .*how(@Est seguro de guardar las modificacionesX@, @.onfirme el guardado@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion)88(ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 3lumno o3lumno 8 new 3lumno()2 if (o3lumno(3).modificar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, int.<arse(te t4o 3lumno6id."e t), get)bjeto3lumno())) 5 -essage4o .*how(@)peraci,n e itosa ... VVV@)2 action834.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : else 5 -essage4o .*how(@7o se pudo guardar el registro ...VVV@)2 : : : : : pri&ate &oid button-odificar6.licT(object sender, E&ent3rgs e) 5 if (1ormulario*istema(e-enu.numero(e3lumnoP81) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if (fila*eleccionadaV8F1UU(te t4o 3lumno6id."e t.Length)P9) 5 te t4o 3pellido7ombre.1ocus()2 action834.-3ction.3."I)76-)(I1I.302 controlador(eE&entos4otones34.-()2 : else 5 -essage4o .*how(@7o se ha seleccionado un registro ...VVV@)2 : : else 5 -essage4o .*how(@7o e isten registros ...VVV@)2 : : pri&ate &oid button.ancelar6.licT(object sender, E&ent3rgs e)

Ing. Javier Alberto Manrique Quionez

Pgina 1G9

Microsoft C# - Enfoque Prctico

5 action834.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 button7ue&o.1ocus()2 : pri&ate &oid button*alir6.licT(object sender, E&ent3rgs e) 5 (ialog0esult dialogo 8 -essage4o .*how(@W(esea cerrar el formularioX@, @.uidado@, -essage4o 4uttons.Yes7o)2 if (dialogo88(ialog0esult.Yes) 5 (ispose()2 : : pri&ate &oid controlador(eE&entos4otones34.-() 5 if (action 88 34.-3ction.7)63."I)7) 5 te t4o 3lumno6id."e t 8 @@2 limpiar.ajas(e"e to()2 te t4o 3lumno6id.Enabled 8 false2 habilitar.ajas(e"e to(false)2 habilitar4otones34.-(false, true, false, true, true, true, false, true)2 dataHridMiew3lumno.Enabled 8 true2 button7ue&o.1ocus()2 : else 5 if (action 88 34.-3ction.3."I)764+*.30) 5 habilitar.ajas(e"e to(false)2 limpiar.ajas(e"e to()2 habilitar4otones34.-(true, false, false, false, false, false, true, false)2 : else 5 if (action 88 34.-3ction.3."I)76I7*E0"30) 5 limpiar.ajas(e"e to()2 te t4o 3lumno6id.Enabled 8 true2 habilitar4otones34.-(false, false, true, false, false, false, true, false)2 : else 5 if (action 88 34.-3ction.3."I)76-)(I1I.30) 5 habilitar.ajas(e"e to(true)2 habilitar4otones34.-(false, false, true, false, false, false, true, false)2 te t4o 3lumno6id.Enabled 8 false2 : else 5 if (action 88 34.-3ction.3."I)76ELI-I730) 5 actuali'ar(ataHridMiew3lumno()2 : else 5 if (action 88 34.-3ction.3."I)76.)7*+L"3) 5 habilitar.ajas(e"e to(false)2 habilitar4otones34.-(true, false, false, false, false, false, true, false)2 te t4o 3lumno6id.Enabled 8 true2 : : : : :

Ing. Javier Alberto Manrique Quionez

Pgina 1G1

Microsoft C# - Enfoque Prctico

: : pri&ate &oid buttonEliminar6.licT(object sender, E&ent3rgs e) 5 if (1ormulario*istema(e-enu.numero(e3lumnoP81) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if (fila*eleccionadaV8F1UU(te t4o 3lumno6id."e t.Length)P9) 5 if (-essage4o .*how(@Est seguro de eliminar los datosX@, @.onfirme la eliminaci,n@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion)88(ialog0esult.Yes) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 3lumno o3lumno 8 new 3lumno()2 int bus!ueda 8 int.<arse(te t4o 3lumno6id."e t)2 o3lumno8o3lumno(3).consultar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, bus!ueda)2 if (o3lumnoV8null) 5 1ormulario*istema(e-enu.numero(e3lumno 8 o3lumno(3).eliminar0egistro(o3rreglo3lumno, 1ormulario*istema(e-enu.numero(e3lumno, bus!ueda)2 -essage4o .*how(@*e elimin, el registro ...VVV@)2 action834.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : else 5 -essage4o .*how(@7o se pudo eliminar el registro ...VVV@)2 action834.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 -essage4o .*how(@7o se pudo eliminar el registro ...VVV@)2 action834.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 -essage4o .*how(@*e tiene !ue seleccionar un registro ...VVV@)2 : : else 5 -essage4o .*how(@7o e isten registros ...VVV@)2 : : pri&ate &oid 1ormulario34.-$(3)$4(61orm.losing(object sender, 1orm.losingE&ent3rgs e) 5 (ialog0esult dialogo 8 -essage4o .*how(@W(esea cerrar el formularioX@, @.uidado@, -essage4o 4uttons.Yes7o)2 if (dialogo88(ialog0esult.7o) 5 e..ancel8true2 : else 5 if (dialogo88(ialog0esult.7o) 5 e..ancel8false2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1G;

Microsoft C# - Enfoque Prctico

: : pri&ate &oid dataHridMiew3lumno6Ce$(own(object sender, Ce$E&ent3rgs e) 5 if (e.Ce$.ode88Ce$s.(own) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde B12 if (fila*eleccionadaP8dataHridMiew3lumno.0ow.ount) 5 fila*eleccionada8fila*eleccionadaF12 : else 5 3lumno o3lumno*eleccionado 8 (3lumno) dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2 : : if (e.Ce$.ode88Ce$s.+p) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde F12 if (fila*eleccionadaS8F1) 5 fila*eleccionada8fila*eleccionadaB12 : else 5 3lumno o3lumno*eleccionado 8 (3lumno) dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2 : : : pri&ate &oid button.argar3rchi&o(e"e to6.licT(object sender, E&ent3rgs e) 5 )pen1ile(ialog o)pen1ile(ialog 8 new )pen1ile(ialog()2 o)pen1ile(ialog.Initial(irector$8@c:[[@2 o)pen1ile(ialog.1ilter8@3rchi&os de datos c_.dat@2 o)pen1ile(ialog."itle8@*elecione un archi&o de te to @2 (ialog0esult o(ialog0esult 8 o)pen1ile(ialog.*how(ialog()2 if (o(ialog0esult88(ialog0esult.)C) 5 3lumno(3) o3lumno(3)8new 3lumno(3)()2 o3rreglo3lumno8o3lumno(3)..argar3rchi&o(e"e to(o)pen1ile(ialog, o3rreglo3lumno)2 1ormulario*istema(e-enu.numero(e3lumno892 for (int i892 iS1992 i8iB1) 5 if (o3rreglo3lumno>i?.alumno6idV89) 5 1ormulario*istema(e-enu.numero(e3lumno8 1ormulario*istema(e-enu.numero(e3lumnoB12 : else 5 breaT2 : : for (int i892 iS1ormulario*istema(e-enu.numero(e3lumno2 i8iB1) 5 dataHridMiew3lumno.0ows.3dd( o3rreglo3lumno>i?.alumno6id, o3rreglo3lumno>i?, o3rreglo3lumno>i?.e&aluacion<arcial1, o3rreglo3lumno>i?.e&aluacion<arcial;, o3rreglo3lumno>i?.promedio(e"rabajo, o3rreglo3lumno>i?.promedio1inal)2

Ing. Javier Alberto Manrique Quionez

Pgina 1G=

Microsoft C# - Enfoque Prctico

: : : pri&ate &oid buttonHrabar3rchi&ode"e to6.licT(object sender, E&ent3rgs e) 5 *a&e1ile(ialog o*a&e1ile(ialog 8 new *a&e1ile(ialog()2 o*a&e1ile(ialog.Initial(irector$8@c:[[@2 o*a&e1ile(ialog.1ilter8@3rchi&os de datos c_.dat@2 o*a&e1ile(ialog."itle8@*elecione un archi&o de te to @2 (ialog0esult o(ialog0esult 8 o*a&e1ile(ialog.*how(ialog()2 if (o(ialog0esult88(ialog0esult.)C) 5 3lumno(3) o3lumno(3)8new 3lumno(3)()2 o3lumno(3).grabar3rchi&o(e"e to(o*a&e1ile(ialog, o3rreglo3lumno)2 : : pri&ate &oid button.onsultar6.licT(object sender, E&ent3rgs e) 5 dataHridMiew3lumno..lear*election()2 limpiar.ajas(e"e to()2 te t4o 3lumno6id."e t 8 @@2 te t4o 3lumno6id.Enabled 8 true2 te t4o 3lumno6id.1ocus()2 action 8 34.-3ction.3."I)76.)7*+L"32 controlador(eE&entos4otones34.-()2 : : :

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioABCM-Arc!i"o de datos con acceso secuencial.

Ing. Javier Alberto Manrique Quionez

Pgina 1GG

Microsoft C# - Enfoque Prctico

CAPTULO 7 ACCESO A BASE DE DATOS C#

Ing. Javier Alberto Manrique Quionez

Pgina 1GJ

Microsoft C# - Enfoque Prctico

ACCESO A BASE DE DATOS CON C#


+na base de datos es una colecci,n de datos clasificados $ estructurados !ue son guardados en una o &arias tablas pero referenciados como si fueran una sola entidad (nombre de base de datos). <ara crear $ manipular la base de datos relacionales, e isten &arios sistemas de administraci,n de base de datos como 3ccess, Mi&r$)$<+ SPL S r5 r, )racle, (4;, <ostgress, -$*ZL entre otros. Los datos en una base de datos relacional se almacenan en tablas l,gicamente relacionadas entre sE utili'ando campos cla&es comunes. La tabla a su &e' posee filas (registros) $ columnas (campos). El conjunto de todos los registros forman la tabla de base de datos. Los usuarios de un sistema de administraci,n de base de datos pueden reali'ar determinadas operaciones como insertar, recuperar, modificar o eliminar datos de la tabla de base de datos, asE como a#adir nue&as tablas o eliminarlas. Estas operaciones se e presan en el lenguaje *ZL "ransact. *ZL es un lenguaje estndar para interactuar con una base de datos relacional $ es soportado por casi todos los administradores de base de datos actuales. En %l, las unidades bsicas son los campos, los registros, las tablas $ relaciones entre tablas. En 3ne o 7d91 muestra un resumen de las sentencias de -icrosoft *ZL *er&er ;99Q 0; trabajando sobre Aindows O. <ara el desarrollo del siguiente apartado se crea un script utili'ando de -icrosoft *ZL *er&er ;99Q 0; $ En la 1igura Q.1 se &isuali'a el script para el ejemplo a reali'ar. Figura 7.1: S&ri"+ "ara &r a&i'( % ?a) % %a+$) j !"#$

ADO.NET
ADO.NET ) u( &$(ju(+$ % &#a) ) , pertenecientes al espacio de nombres *$stem.(ata (librerEa de clases del .7E" 1rameworT), para acceder a los datos de un origen de datos (base de datos $ otros) $ cual!uier tipo de aplicaci,n. <roporciona un grupo de componentes para crear aplicaciones distribuidas de uso compartido de datos. Entre las caracterEsticas ms importantes tenemos: ADO.NET ($ % " (% % #a) &$( /i$( ) &$(+i(ua! (+ a&+i5a), !ue se refiere a !ue la cone i,n solo se reali'a durante el tiempo necesario para e traer (consulta) o actuali'ar los datos. Las interacciones para insertar, consultar, eliminar $ actuali'ar registros se reali'an con las sentencias *ZL insert, select, delete, update respecti&amente con la base de datos se reali'a mediante ,rdenes para acceso a los datos, !ue son objetos !ue encapsulan las sentencias *ZL o los procedimientos almacenados !ue definen la operaci,n a reali'ar sobre el origen de datos.

Ing. Javier Alberto Manrique Quionez

Pgina 1GL

Microsoft C# - Enfoque Prctico

Los datos re!ueridos, normalmente se almacenan en memoria cach% en conjunto de datos, lo !ue permite trabajar sin cone i,n sobre una copia temporal de los datos obtenidos. Los conjuntos de datos son independientes de los orEgenes de datos. .uando sea necesario, se puede restablecer la cone i,n con la base de datos $ actuali'arlos desde el conjunto de datos. El formato de transferencia de datos es e-L. La representaci,n e-L no utili'a informaci,n binaria, sino se basa en te to !ue permite en&iarla mediante cual!uier protocolo como por ejemplo N""<. En el Hrfico Q.; presenta a 3().7E" $ su relaci,n entre las aplicaciones $ los orEgenes de datos. Figura 7.*: ADO.N + 6 )u r #a&i'( (+r #a) a"#i&a&i$( ) 6 $rig ( % %a+$)

Los componentes de 3().7E" estn dise#ados para separar el acceso a datos de la manipulaci,n de los mismos $ son: (ata*et $ el pro&eedor de datos del 7E".1rameworT. El pro&eedor de datos es un conjunto de componentes entre los !ue se inclu$en los objetos cone i,n (.onnection), de ,rdenes (.ommand), el lector de datos ((ata0eader) $ adaptador de datos ((ata3dapter). La 1igura Q.= muestra la interacci,n entre los objetos de 3().7E" Figura 7.-: I(+ ra&&i'( (+r #$) $?j +$) ADO.N +

En la 1igura Q.G se &isuali'a c,mo trabajan los objetos de manera conjunta para !ue una aplicaci,n pueda interactuar con un origen de datos utili'ando la ar!uitectura de tres capas: Figura 7..: ADO.N + 6 #a arAui+ &+ura % +r ) &a"a)

Ing. Javier Alberto Manrique Quionez

Pgina 1GO

Microsoft C# - Enfoque Prctico

El trabajo de cone i,n con la base de datos o la ejecuci,n de la sentencia *ZL lo reali'a el pro&eedor de datos. La recuperaci,n de los datos (para procesarlos, manipularlos o &olcarlo a un determinado control o dispositi&o) es una acci,n ejecutada en la capa superior. El resultado es un conjunto de datos agrupados en tablas. PRO3EEDOR DE DATOS En .7E" 1rameworT sir&e como un puente entre una aplicaci,n $ un origen de datos. *e utili'a tanto para recuperar datos desde un origen de datos $ para actuali'arlos. Los componentes principales de un pro&eedor de datos .7E" son los siguientes objetos: C$( /i'( &$( # $rig ( % %a+$) (objeto connection), !ue establece una cone i,n a un origen de datos determinado. Or% ( "ara !a(i"u#ar @i() r+arB #i!i(arB a&+ua#i;arB &$()u#+arC #$) %a+$) (objeto .ommand), !ue ejecuta una orden en lenguaje *ZL en un origen de datos $a sea como sentencia *!l incrustada o procedimiento almacenado. L &+$r % %a+$) (objeto (ata0eader) !ue lee una secuencia de datos de solo a&ance $ solo lectura desde un origen de datos. A%a"+a%$r % %a+$) (objeto (ata3dapter), !ue llena un (ata*et (conjunto de datos) $ reali'a actuali'aciones necesarias en la base de datos. .7E" inclu$e los siguientes pro&eedores de datos: )(4., )LE (4, )racle $ *ZL *er&er !ue se pueden encontrar en el espacio de nombres como *$stem.(ata.)dbc, *$stem.(ata.)le(b, *$stem.(ata.)racle.lient $ *$stem.(ata.*!l.lient. .ada uno de estos pro&eedores proporciona los dri&ers adecuados para acceder a las distintas bases de datos. Na$ pro&eedores de igual importancia como -$*!l, 3*DG99 !ue proporcionan el conjunto de clases !ue pro&een acceso a sus bases de datos. OBJETO CONEOIN El objeto cone i,n establece la cone i,n a un origen de datos. <or ejemplo para establecer una cone i,n a -icrosoft *ZL *er&er se utili'a el objeto *!l.onnection. La funci,n del objeto cone i,n es presentar atributos $ m%todos para permitir establecer $ modificar las propiedades de la cone i,n (por ejemplo identificador del usuario, contrase#a entre otras). Ejemplo:

using *$stem2 using *$stem.(ata.*!l.lient2

Ing. Javier Alberto Manrique Quionez

Pgina 1GQ

Microsoft C# - Enfoque Prctico

namespace 34.-$(3) 5 public class 3dministrador(e.one ion 5 static *!l.onnection cone ion2 static public *!l.onnection get.one ion() 5 o*!l.onnection 8 new *!l.onnection(@(ata *ource8(local)2Initial .atalog8db3lumno2Integrated
*ecurit$8"rue@)2

return o*!l.onnection2 : : : OBJETO RDEN <ermite ejecutar sentencias *ZL (sentencia *!l incrustada o procedimiento almacenado) $ de&ol&er resultados desde el origen de datos. Ejemplo: namespace 34.-$(3) 5 public class 3lumno(3) 5 *!l.onnection o*!l.onnection2 public 4oolean insertar0egistro(3lumno o3lumno) 5 tr$ 5 o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *tring sentencia 8 @I7*E0" I7") 3lumno( alumno6id, apellido7ombre, e&aluacion<arcial1, e&aluacion<arcial;, promedio(e"rabajo, promedio1inal) M3L+E*(@B o3lumno.alumno6idB@,f@B o3lumno.apellido7ombreB@f,@B o3lumno.e&aluacion<arcial1B@,@B o3lumno.e&aluacion<arcial;B@,@B o3lumno.promedio(e"rabajo B@,@B o3lumno.promedio1inalB@)@2 *!l.ommand o*!l.ommand 8 new *!l.ommand(sentencia, o*!l.onnection)2 o*!l.ommand.E ecute7onZuer$()2 o*!l.onnection..lose()2 return true2 : catch (*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@Be.-essage)2 return false2 : : ... :

OBJETO LECTOR DE DATOS +n objeto lector de datos obtiene los datos del origen de datos $ los pasa directamente a la aplicaci,n cuando no se necesite actuali'ar los datos. Ejemplo "u?#i& A#u!($ &$()u#+arR gi)+r$@i(+ ?u)Au %aC 5 tr$ 5 3lumno o3lumno2

Ing. Javier Alberto Manrique Quionez

Pgina 1GR

Microsoft C# - Enfoque Prctico

*!l.onnection o*!l.onnection 8 3dministrador(e.one ion .get.one ion()2 o*!l.onnection.)pen()2 *tring sentencia8@*ELE." _ 10)- 3lumno ANE0E alumno6id 8@ B bus!ueda2 *!l.ommand o*!l.ommand 8 new *!l.ommand(sentencia, o*!l.onnection)2 *!l(ata0eader $SA#Da+aR a% r 8 o*!l.ommand.E ecute0eader()2 if ($SA#Da+aR a% r.0ead()) 5 o3lumno 8 new 3lumno()2 o3lumno.alumno6id 8 (int) o*!l(ata0eader >@3lumno6id@?2 o3lumno.apellido7ombre 8 (*tring) o*!l(ata0eader >@apellido7ombre@?2 o3lumno.e&aluacion<arcial1 8 (double) o*!l(ata0eader >@e&aluacion<arcial1@?2 o3lumno.e&aluacion<arcial; 8 (double) o*!l(ata0eader >@e&aluacion<arcial;@?2 o3lumno.promedio(e"rabajo 8 (double) o*!l(ata0eader
UV"r$! %i$D Tra?aj$VWT

o3lumno.promedio1inal >@promedio1inal@?2 o*!l(ata0eader..lose()2 o*!l.onnection..lose()2 return o3lumno2 :

8 (double)

o*!l(ata0eader

else 5 return null2 : : catch (*$stem.E ception e) 5 o*!l(ata0eader..lose()2 -essage4o .*how(@Error ...VVV@Be.-essage)2 return null2 : : 3dems el lector de datos es utili'ado por un adaptador de datos para llenar un conjunto de datos. ADAPTADOR DE DATOS Es un conjunto de objetos utili'ado para intercambiar datos entre un origen de datos $ un conjunto de datos ($?j +$ Da+aS +). Esto significa !ue una aplicaci,n leer datos de una base de datos para un conjunto de datos $ a continuaci,n manipular dichos datos en el conjunto de datos, para !ue luego, en algunas ocasiones &uel&a a escribir en la base de datos los datos modificados del conjunto de datos. +n adaptador de datos contiene propiedades para facilitar la lectura $ actuali'aci,n de los datos en un origen de datos tales como *elect.ommand, Insert.ommand, (elete.ommand, +pdate.ommand $ "able-appings. *elect.ommand hace referencia a una orden !ue recupera filas del origen datos, entendiendo por un objeto .ommand !ue almacena una instrucci,n *ZL o un nombre de procedimiento, insert.ommand hace referencia a una orden para insertar filas en un origen de datos, +pdate.ommand hace referencia a una orden para modificar filas en el origen de datos $ delete.ommand hace referencia a una orden para eliminar filas en una base de datos. CONJUNTO DE DATOS +na aplicaci,n accede a los datos de un origen de datos utili'ando un adaptador de datos !ue # #$) %a+$) % #a ?a) % %a+$) 6 #$ a#!a& (a ( +a?#a) % u( &$(ju(+$ % %a+$) . <osteriormente para escribir en el origen de datos se utili'a el adaptador de datos !ue tomar los datos del conjunto de datos $ los escribir en el origen de datos. +n conjunto de datos inclu$e una o ms tablas basadas en un origen de datos, las relaciones entre esas tablas $ las restricciones para los datos !ue puede contener dichas tablas. Las partes de un conjunto de datos se e ponen mediante propiedades $ colecciones.

Ing. Javier Alberto Manrique Quionez

Pgina 1J9

Microsoft C# - Enfoque Prctico

En 3().7E" el componente central de la ar!uitectura sin cone i,n es la clase (ata*et (conjunto de datos). La clase (ata*et inclu$e la colecci,n (ata"able.ollection de objetos (ata"able (tabla de datos) $ la colecci,n (ata.olumn.ollection de objetos (ata.olumn $ la colecci,n .onstraint.ollection de objetos constraint (relaciones entre tablas). La .lase (ata"able inclu$e la colecci,n (ata0ow.ollection de objetos (ata0ow (filas de tabla), la colecci,n (ata.olumn.ollection (columna de datos) $ la colecci,n .onstaint.ollection de objetos .onstraint (restricciones). 3simismo, la clase (ata0ow inclu$e la propiedad 0ow*tate !ue permite saber si la fila cambi, $ de !ue modo, desde !ue la tabla de datos se carg, por primera &e'. 3lgunas propiedades son 3dded, (eleted, -odified $ +nchanged. 3ISTA DE DATOS Es importante destacar la e istencia de la clase (ataMiew por su relaci,n con la clase (ata"able. La clase (ataMiew permite representar los datos de la clase (ata"able creando mltiples &istas de los mismos, puesto !ue permite editar, ordenar, filtrar, buscar $ na&egar por un conjunto de datos. En la 1igura Q.J se resume los componentes del (ata*et. Figura 7.0: E# Da+aS +

En la 1igura Q.L se &isuali'a un resumen de 3().7et respecto al pro&eedor de datos $ el conjunto de datos. Figura 7.2: R )u! ( % ADO.N +

3 continuaci,n se presenta un ejemplo de una aplicaci,n !ue administra un tabla de base de datos !ue tiene las siguientes caracterEsticas:

Ing. Javier Alberto Manrique Quionez

Pgina 1J1

Microsoft C# - Enfoque Prctico

a) <resenta un formulario para un sistema de mantenimiento 34.- de alumnos la cual se &isuali'a en la 1igura Q.O. El formulario 34.- tiene la misma funcionalidad !ue la del ejemplo anterior. b) La letra 34.- significan 3ltas, 4ajas, .onsultas $ -odificaci,n c) La estructura de la clase alumno es la siguiente: int alumno6id *tring apellido7ombre double e&aluacion<arcial1 double e&aluacion<arcial; double promedio(e"rabajo double promedio1inal d) +tili'a una clase 34.-3ccion para definir las acciones !ue se puedan reali'ar, la cual se &isuali'a en la 1igura Q.Q como c,digo de la 3plicaci,n 34.-3ction. e) En la 1igura Q.R se &isuali'a la aplicaci,n en el E plorador de 3plicaciones. f) En la 1igura Q.19 se &isuali'a el diagrama de clases de la aplicaci,n. g) En la 1igura Q.11 se &isuali'a la .lase 3dministrador(e.one ion !ue contiene el m%todo get.one ion() el cual permite la cone i,n con la base de datos. h) En la 1igura Q.1; se &isuali'a la clase entidad 3lumno. i) En la 1igura Q.1= se &isuali'a el c,digo de la aplicaci,n <rograma principal j) +tili'a una clase de acceso a datos ((3)) !ue permite interactuar la aplicaci,n con el arreglo de objetos, la cual se &isuali'a en la 1igura Q.1G. T) En la 1igura Q.1J se &isuali'a el c,digo de la aplicaci,n K .lase 1ormulario34.-$(3). l) En la 1igura Q.1L: Ejecuci,n del formulario 1ormulario0eporte(e3lumnos. m) En las 1iguras del Q.1O a la 1igura Q.G1 se &isuali'a el procedimiento para generar reporte con .r$stal 0eport $ ./ utili'ando como origen de datos una base de datos. Figura 7.4: F$r!u#ari$ % # )i)+ !a % !a(+ (i!i (+$ ABCM % a#u!($) &$( ?a) % %a+$)

Figura 7.7: C'%ig$ % #a a"#i&a&i'( G ABCMA&+i$( namespace 34.-$(3)

Ing. Javier Alberto Manrique Quionez

Pgina 1J;

Microsoft C# - Enfoque Prctico

5 public class 34.-3ccion 5 public static int 7)63."I)7 8 12 public static int 3."I)76I7*E0"30 8 ;2 public static int 3."I)76-)(I1I.30 8 =2 public static int 3."I)76.37.EL30 8 G2 public static int 3."I)76ELI-I730 8 J2 public static int 3."I)76.)7*+L"3 8 L2 : : Figura 7.:: A"#i&a&i'( ( # /"#$ra%$r % )$#u&i$( )

Figura 7.1>: Diagra!a % &#a) ) % #a a"#i&a&i'(

Figura 7.11: C'%ig$ % #a a"#i&a&i'( 1 C#a) A%!i(i)+ra%$rD C$( /i$(

Ing. Javier Alberto Manrique Quionez

Pgina 1J=

Microsoft C# - Enfoque Prctico

using *$stem2 using *$stem.(ata.*!l.lient2 namespace 34.-$(3) 5 public class 3dministrador(e.one ion 5 static *!l.onnection cone ion2 static public *!l.onnection get.one ion() 5 o*!l.onnection 8 new *!l.onnection(@(ata
*ecurit$8"rue@)2 return o*!l.onnection2

*ource8(local)2Initial

.atalog8db3lumno2Integrated

: : : Figura 7.1*: C'%ig$ % #a a"#i&a&i'( 1 C#a) E(+i%a% A#u!($ using *$stem2 namespace 34.-$(3) 5 public class 3lumno 5 public int alumno6id 5get2set2: public *tring apellido7ombre 5get2set2: public double e&aluacion<arcial1 5get2set2: public double e&aluacion<arcial; 5get2set2: public double promedio(e"rabajo 5get2set2: public double promedio1inal 5get2set2: public 3lumno ( ) 5 this.alumno6id 8 92 this.apellido7ombre 8 null2 this.e&aluacion<arcial1 8 92 this.e&aluacion<arcial; 8 92 this.promedio(e"rabajo 8 92 : public 3lumno ( int alumno6id, *tring apellido7ombre, double e&aluacion<arcial1, double e&aluacion<arcial;, double promedio(e"rabajo, double promedio1inal ) 5 this.alumno6id 8 alumno6id2 this.apellido7ombre 8 apellido7ombre2 this.e&aluacion<arcial1 8 e&aluacion<arcial12 this.e&aluacion<arcial; 8 e&aluacion<arcial;2 this .promedio(e"rabajo 8 promedio(e"rabajo2 this .promedio1inal 8 promedio1inal2 : public &oid set<romedio1inal ( )
5 this.promedio1inal 8(this.e&aluacion<arcial1 B this.e&aluacion<arcial; B this .promedio(e"rabajo) D =2

: public o&erride *tring "o*tring ( ) 5 return apellido7ombre2 : : : Figura 7.1-: C'%ig$ % #a a"#i&a&i'( 1 Pr$gra!a "ri(&i"a# using *$stem2 using *$stem .Aindows .1orms2

Ing. Javier Alberto Manrique Quionez

Pgina 1JG

Microsoft C# - Enfoque Prctico

namespace 34.-$(3) 5 static class <rogram 5 static &oid -ain ( ) 5 3pplication .EnableMisual*t$les()2 3pplication .*et.ompatible"e t0endering(efault(false)2 3pplication .0un(new 1ormulario34.-$(3)$4(())2 : : :

Figura 7.1.: C'%ig$ % #a a"#i&a&i'( 1 C#a) A#u!($DAO using *$stem2 using *$stem..ollections.Heneric2 using *$stem.(ata2 using *$stem.(ata.*!l.lient2 using *$stem.Aindows.1orms2 namespace 34.-$(3) 5 public class 3lumno(3) 5 *!l.onnection $SA#C$(( &+i$(2 public 4oolean insertar0egistro(3lumno o3lumno) 5 tr$ 5 $SA#C$(( &+i$( 8 3dministrador(e.one ion.get.one ion()2 $SA#C$(( &+i$(.O" (@C2 *tring sentencia 8 @I7*E0" I7") 3lumno(alumno6id,apellido7ombre, e&aluacion<arcial1, e&aluacion<arcial;, promedio(e"rabajo, promedio1inal) M3L+E*(@B o3lumno.alumno6idB@,f@B o3lumno.apellido7ombreB@f,@B o3lumno.e&aluacion<arcial1B@,@B o3lumno.e&aluacion<arcial;B@,@B o3lumno.promedio(e"rabajo B@,@B o3lumno.promedio1inalB@)@2 *!l.ommand $SA#C$!!a(% 8 new *!l.ommand(sentencia, o*!l.onnection)2 o*!l.ommand.E/ &u+ N$(Pu r6@CT o*!l.onnection..lose()2 return true2 : catch (*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@Be.-essage)2 return false2 : :

public 3lumno consultar0egistro(int bus!ueda) 5 tr$ 5 3lumno o3lumno2 *!l.onnection o*!l.onnection 8 3dministrador(e.one ion .get.one ion()2 o*!l.onnection.)pen()2 *tring sentencia8@*ELE." _ 10)- 3lumno ANE0E alumno6id 8@ B bus!ueda2 *!l.ommand o*!l.ommand 8 new *!l.ommand(sentencia, o*!l.onnection)2

Ing. Javier Alberto Manrique Quionez

Pgina 1JJ

Microsoft C# - Enfoque Prctico

*!l(ata0eader o*!l(ata0eader 8 o*!l.ommand.E ecute0eader()2 if (o*!l(ata0eader.0ead()) 5 o3lumno 8 new 3lumno()2 o3lumno.alumno6id8(int) o*!l(ata0eader>@3lumno6id@?2 o3lumno.apellido7ombre8(*tring) o*!l(ata0eader>@apellido7ombre@?2 o3lumno.e&aluacion<arcial18(double) o*!l(ata0eader>@e&aluacion<arcial1@?2 o3lumno.e&aluacion<arcial;8(double) o*!l(ata0eader>@e&aluacion<arcial;@?2 o3lumno.promedio(e"rabajo8(double)
o*!l(ata0eader>@promedio(e"rabajo@?2

o3lumno.promedio1inal8(double) o*!l(ata0eader>@promedio1inal@?2 o*!l(ata0eader..lose()2 return o3lumno2 : else 5 return null2 : : catch (*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@Be.-essage)2 return null2 : : public 4oolean modificar0egistro ( int bus!ueda, 3lumno o3lumno ) 5 tr$ 5 *!l.onnection o*!l.onnection 8 3dministrador(e.one ion .get.one ion()2 o*!l.onnection.)pen()2 string sentencia 8 @+<(3"E 3lumno *E" apellido7ombre8f@Bo3lumno.apellido7ombreB@f,@B @e&aluacion<arcial18@Bo3lumno.e&aluacion<arcial1B@,@B @e&aluacion<arcial;8@Bo3lumno.e&aluacion<arcial;B@,@B @promedio(e"rabajo8@Bo3lumno.promedio(e"rabajoB @,@B @promedio1inal8@Bo3lumno.promedio1inalB @ ANE0E alumno6id 8@ B bus!ueda2 *!l.ommand o*!l.ommand 8 new *!l.ommand(sentencia, o*!l.onnection)2 o*!l.ommand.E ecute7onZuer$()2 o*!l.onnection..lose()2 return true2 : catch ( *$stem .E ception e ) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@Be.-essage)2 return false2 : :

public 4oolean eliminar0egistro(int bus!ueda) 5 tr$ 5 *!l.onnection o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 string sentencia 8 @(ELE"E 10)- 3lumno ANE0E alumno6id 8@Bbus!ueda2 *!l.ommand o*!l.ommand 8 new *!l.ommand(sentencia, o*!l.onnection)2 o*!l.ommand.E ecute7onZuer$()2

Ing. Javier Alberto Manrique Quionez

Pgina 1JL

Microsoft C# - Enfoque Prctico

o*!l.onnection..lose()2 return true2 : catch (*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@Be.-essage)2 return false2 : : public int buscar0egistro(int bus!ueda) 5 3lumno o3lumno 8 new 3lumno()2 tr$ 5 *!l.onnection o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *tring sentencia8 @*ELE." _ 10)- 3lumno ANE0E alumno6id8@ B bus!ueda2 *!l.ommand o*!l.ommand 8 new *!l.ommand(sentencia, o*!l.onnection)2 *!l(ata0eader o*!l(ata0eader 8 o*!l.ommand.E ecute0eader()2 if (o*!l(ata0eader.0ead()) 5 o3lumno.alumno6id8(int) o*!l(ata0eader>@alumno6id@?2 o3lumno.apellido7ombre8(*tring)o*!l(ata0eader>@apellido7ombre@?2 o3lumno.e&aluacion<arcial18(double)o*!l(ata0eader>@e&aluacion<arcial1@?2 o3lumno.e&aluacion<arcial;8(double)o*!l(ata0eader>@e&aluacion<arcial;@?2 o3lumno.promedio(e"rabajo8(double)o*!l(ata0eader>@promedio(e"rabajo@?2 o3lumno.promedio1inal8(double)o*!l(ata0eader>@promedio1inal@?2 o*!l(ata0eader..lose()2 o*!l.onnection..lose()2 return o3lumno.alumno6id2 : return FRR2 : catch (*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@Be.-essage)2 return FRR2 : : public ListS3lumnoP obtener(atosEnList() 5 ListS3lumnoP oList3lumno8new ListS3lumnoP()2 tr$ 5 o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *tring sentencia 8 @*ELE." _ 10)- 3lumno@2 *!l.ommand o*!l.ommand 8 new *!l.ommand(sentencia, o*!l.onnection)2 *!l(ata0eader o*!l(ata0eader 8 o*!l.ommand .E ecute0eader()2 3lumno o3lumno2 while (o*!l(ata0eader.0ead()) 5 o3lumno8new 3lumno()2
o3lumno.alumno6id8(int) o*!l(ata0eader>@3lumno6id@?2 o3lumno.apellido7ombre8(*tring)o*!l(ata0eader>@apellido7ombre@?2 o3lumno.e&aluacion<arcial18(double)o*!l(ata0eader>@e&aluacion<arcial1@?2 o3lumno.e&aluacion<arcial;8(double)o*!l(ata0eader>@e&aluacion<arcial;@?2 o3lumno.promedio(e"rabajo8(double)o*!l(ata0eader>@promedio(e"rabajo@?2 o3lumno.promedio1inal8(double)o*!l(ata0eader>@promedio1inal@?2 oList3lumno.3dd(o3lumno)2

Ing. Javier Alberto Manrique Quionez

Pgina 1JO

Microsoft C# - Enfoque Prctico

: o*!l(ata0eader..lose()2 o*!l.onnection..lose()2 return oList3lumno2 : catch (*$stem.E ception e ) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@ B e .-essage)2 return null2 : : public 4oolean calcular<romedio1inal.on.ommand() 5 tr$ 5 o*!l.onnection 8 3dministrador(e.one ion .get.one ion()2 o*!l.onnection .)pen()2 string sentencia 8 @+<(3"E 3lumno
set promedio1inal8(e&aluacion<arcial1Be&aluacion<arcial;Bpromedio(e"rabajo)D=@2

*!l.ommand o*!l.ommand 8 new *!l.ommand(sentencia, o*!l.onnection)2 o*!l.ommand.E ecute7onZuer$()2 o*!l.onnection..lose()2 return true2 : catch ( *$stem .E ception e ) 5 o*!l.onnection ..lose()2 -essage4o .*how(@Error ...VVV@ B e .-essage)2 return false2 : :

Ing. Javier Alberto Manrique Quionez

Pgina 1JQ

Microsoft C# - Enfoque Prctico

public 4oolean calcular<romedio1inal.on(ata*et() 5 *!l.onnection o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2


DD .rear el adaptador de datos *!l(ata3dapter o*!l(ata3dapter 8 new *!l(ata3dapter()2

DD .rear objetos ,rdenes


*!l.ommand o*!l*elect.ommand 8 new *!l.ommand()2 *!l.ommand o*!lInsert.ommand 8 new *!l.ommand()2 *!l.ommand o*!l+pdate.ommand 8 new *!l.ommand()2 *!l.ommand o*!l(elete.ommand 8 new *!l.ommand()2 DD 3signar la cone i,n a cada propiedad del adaptador de datos o*!l*elect.ommand..onnection 8 o*!l.onnection2 o*!lInsert.ommand..onnection 8 o*!l.onnection2 o*!l+pdate.ommand..onnection 8 o*!l.onnection2 o*!l(elete.ommand..onnection 8 o*!l.onnection2 DD 0eferenciar las ,rdenes a las propiedades del adaptador de datos o*!l(ata3dapter.*elect.ommand 8 o*!l*elect.ommand2 o*!l(ata3dapter.(elete.ommand 8 s!l(elete.ommand2 o*!l(ata3dapter.Insert.ommand 8 o*!lInsert.ommand2 o*!l(ata3dapter.+pdate.ommand 8 o*!l+pdate.ommand2

DD -odificar la propiedad .omand."e t del objeto o*!l*elect.ommand o*!l*elect.ommand..ommand"e t 8 @select _ from 3lumno@2 DD .rear el conjunto de datos (ata*et o(ata*et 8 new (ata*et()2 DD 0ellenar el (ata*et con el contenido obtenido por *ELE." o*!l(ata3dapter.1ill(o(ata*et, @3lumno@)2 DD .alcular el promedio final utili'ando un buble for for ( int posicion 8 9 2 posicion S o(ata*et."ables>9?.0ows..ount 2 posicion8posicion B 1 ) 5 DD 0ecuperar datos del conjunto de datos $ crear objetos o3lumno 3lumno o3lumno8new 3lumno (
(int ) o(ata*et."ables>@3lumno@?.0ows>posicion?>@alumno6id@?, (string) o(ata*et."ables>@3lumno@?.0ows>posicion? >@apellido7ombre@?, (double) o(ata*et."ables>@3lumno@?.0ows>posicion? >@e&aluacion<arcial1@?, (double) >@e&aluacion<arcial;@?, (double) >@promedio(e"rabajo@?, (double) o(ata*et."ables>@3lumno@?.0ows>posicion?>@promedio1inal@? )2 o(ata*et."ables>@3lumno@?.0ows>posicion? o(ata*et."ables>@3lumno@?.0ows>posicion?

DD .alcular el promedio final o3lumno.set<romedio1inal()2


DD 3signar promedio final calculado a la columna @promedio final@ de la fila actual en el conjunto de datos

o(ata*et."ables>9?.0ows>posicion?>@promedio1inal@?8o3lumno.promedio1inal2 : DD Merificar si ha habido cambio en el conjunto de datos if (o(ata*et.Nas.hanges() ) DD Implementaci,n de la orden +pdate 5 DD 3#adir los parmetros a la orden o*!l+pdate.ommand para cada campo de la fila o*!l+pdate.ommand.<arameters.3dd(@galumno6id@, *!l(b"$pe.Int, 9,
@alumno6id@)2

o*!l+pdate.ommand.<arameters.3dd(@gpromedio1inal@,*!l(b"$pe.1loat,9, @promedio1inal@)2 DD -odificar la *entencia +pdate a ejecutar o*!l+pdate.ommand..ommand"e t 8 @+<(3"E 3lumno *E" promedio1inal8 gpromedio1inal where alumno6id8galumno6id@2 DD 3ctuali'ar la base de datos desde el (ata3dapter o*!l(ata3dapter.+pdate(o(ata*et, @3lumno@)2 : -essage4o .*how(@)rigen de datos actuali'ado@)2 return true2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1JR

Microsoft C# - Enfoque Prctico

: : Figura 7.10: C'%ig$ % #a a"#i&a&i'( 1 C#a) F$r!u#ari$ABCM6DAO using S"stem' using S"stem5 ollections5?eneric' using S"stem58indo7s5Forms' namespace AB !"DA# $ public partial class FormularioAB !"DA#"BD>Form $ private int action & AB !Action5N#_A T%#N' public FormularioAB !"DA#"BD2) $ %nitiali=e omponent2)' 6ormatearTabla2)' controladorDe*ventosBotonesAB !2)' 1 public void 6ormatearTabla2) $ data?ridGie7Alumno5Selection!ode & Data?ridGie7Selection!ode5Full)o7Select' 1 public Alumno get#bjetoAlumno2) $ Alumno oAlumno & ne7 Alumno2)'
oAlumno5alumno_id & int5Parse2teHtBoHAlumno_id5TeHt)' oAlumno5apellidoNombre & teHtBoHApellidoNombre5TeHt' oAlumno5evaluacionParcial1 &2double5Parse2teHtBoH*valuacionParcial15TeHt))' oAlumno5evaluacionParcial2 & 2double5Parse2teHtBoH*valuacionParcial25TeHt))' oAlumno5promedioDeTrabajo & 2double5Parse2teHtBoHPromedioDeTrabajo5TeHt))'

return oAlumno' 1 public void set#bjetoAlumno2Alumno oAlumno) $ teHtBoHAlumno_id5TeHt & oAlumno5alumno_id J KK' teHtBoHApellidoNombre5TeHt & oAlumno5apellidoNombre J KK' teHtBoH*valuacionParcial15TeHt & oAlumno5evaluacionParcial1 J KK' teHtBoH*valuacionParcial25TeHt & oAlumno5evaluacionParcial2 J KK' teHtBoHPromedioDeTrabajo5TeHt & oAlumno5promedioDeTrabajo J KK' 1 public void actuali=arData?ridGie7Alumno2) $ limpiarData?ridGie7Alumno2)' AlumnoDA# oAlumnDA# & ne7 AlumnoDA#2)' -istBAlumnoC o-istAlumno & oAlumnDA#5obtenerDatos*n-ist2)' 6or 2int posicion&I' posicionBo-istAlumno5 ount' posicion&posicionJ 1) $ i6 2o-istAlumnoEposicionF5alumno_id L& I) $ data?ridGie7Alumno5)o7s5Add2o-istAlumnoEposicionF5alumno_id3 o-istAlumnoEposicionF3 o-istAlumnoEposicionF5evaluacionParcial13 o-istAlumnoEposicionF5evaluacionParcial23 o-istAlumnoEposicionF5promedioDeTrabajo3 o-istAlumnoEposicionF5promedioFinal)'

Ing. Javier Alberto Manrique Quionez

Pgina 1L9

Microsoft C# - Enfoque Prctico

1 1 1

private void 4abilitarBotonesAB !2Boolean cBuscar3 Boolean cNuevo3 Boolean c?uardar3 Boolean c*ditar3 Boolean c*liminar3 Boolean c onsultar3 Boolean c ancelar3 Boolean cSalir) $ buttonBuscar5*nabled & cBuscar' buttonNuevo5*nabled & cNuevo' button?uardar5*nabled & c?uardar' button!odi6icar5*nabled & c*ditar' button*liminar5*nabled & c*liminar' button onsultar5*nabled & c onsultar' button ancelar5*nabled & c ancelar' buttonSalir5*nabled & cSalir' 1 private void 4abilitar ajasDeTeHto2Boolean editable) $ teHtBoHApellidoNombre5*nabled & editable' teHtBoH*valuacionParcial15*nabled & editable' teHtBoH*valuacionParcial25*nabled & editable' teHtBoHPromedioDeTrabajo5*nabled & editable' 1 private void limpiar ajasDeTeHto2) $ teHtBoHApellidoNombre5TeHt & KK' teHtBoH*valuacionParcial15TeHt & KK' teHtBoH*valuacionParcial25TeHt & KK' teHtBoHPromedioDeTrabajo5TeHt & KK' 1 private void buttonBuscar_ lic92object sender3 *ventArgs e) $ i6 2action && AB !Action5A T%#N_B(S A)) $ AlumnoDA# oAlumnoDA# & ne7 AlumnoDA#2)' int bus@ueda & %nt5Parse2teHtBoHAlumno_id5TeHt)' Alumno oAlumno & oAlumnoDA#5consultar)egistro2bus@ueda)' i6 2oAlumno L& null) $ !essageBoH5S4o72K)egistro eHistente LLLK)' action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' 1 else $ action & AB !Action5A T%#N_%NS*)TA)' teHtBoHAlumno_id5*nabled & 6alse' 4abilitar ajasDeTeHto2true)' controladorDe*ventosBotonesAB !2)' teHtBoHApellidoNombre5Focus2)' 1 1 else $ i6 2action && AB !Action5A T%#N_ #NS(-TA) $ AlumnoDA# oAlumnoDA# & ne7 AlumnoDA#2)'

Ing. Javier Alberto Manrique Quionez

Pgina 1L1

Microsoft C# - Enfoque Prctico

int bus@ueda & %nt+25Parse2teHtBoHAlumno_id5TeHt)' Alumno oAlumno & oAlumnoDA#5consultar)egistro2bus@ueda)' i6 2oAlumno L& null) $ action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' set#bjetoAlumno2oAlumno)' 1 else $ !essageBoH5S4o72KNo se encuentra LLLK)' action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' 1 1 1 1 private void buttonNuevo_ lic92object sender3 *ventArgs e) $ data?ridGie7Alumno5*nabled & 6alse'
teHtBoHAlumno_id5TeHt & KK' limpiar ajasDeTeHto2)' action & AB !Action5A T%#N_B(S A)' controladorDe*ventosBotonesAB !2)' teHtBoHAlumno_id5*nabled & true' teHtBoHAlumno_id5Focus2)'

1 private void button?uardar_ lic92object sender3 *ventArgs e) $ i6 2action && AB !Action5A T%#N_%NS*)TA)) $ i6 2!essageBoH5S4o72KMDesea guardarloNK3 K on6irme el guardadoK3
!essageBoHButtons5OesNo3 !essageBoH%con5Puestion) && Dialog)esult5Oes)

$ AlumnoDA# oAlumnoDA# & ne7 AlumnoDA#2)' i6 2oAlumnoDA#5insertar)egistro2get#bjetoAlumno2))) $ !essageBoH5S4o72K#peraciDn eHitosa 555 LLLK)' 1 else $ !essageBoH5S4o72KNo se pudo guardar el registro 555 LLLK)' 1 action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' buttonNuevo5Focus2)' 1 else $ limpiar ajasDeTeHto2)' action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' 1 1 else $ i6 2action && AB !Action5A T%#N_!#D%F% A)) $ i6 2!essageBoH5S4o72K*st< seguro de guardar los datosNK3
K on6irme el guardadoK3 !essageBoHButtons5OesNo3 !essageBoH%con5Puestion) && Dialog)esult5Oes)

$ AlumnoDA# oAlumnoDA# & ne7 AlumnoDA#2)' Alumno oAlumno & ne7 Alumno2)' i62oAlumnoDA#5modi6icar)egistro2int5Parse2teHtBoHAlumno_id5TeHt)3

get#bjetoAlumno2)))

Ing. Javier Alberto Manrique Quionez

Pgina 1L;

Microsoft C# - Enfoque Prctico

$ !essageBoH5S4o72K#peraciDn eHitosa 555 LLLK)' action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' actuali=arData?ridGie7Alumno2)' 1 else $ !essageBoH5S4o72KNo se pudo guardar el
registro 555LLLK)'

1 1 else $ action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' 1 1 1 1 private void button!odi6icar_ lic92object sender3 *ventArgs e) $ i6 2data?ridGie7Alumno5)o7 ount C& 1) $ int 6ilaSeleccionada & data?ridGie7Alumno5 urrent)o75%ndeH' i6 26ilaSeleccionada L& Q1 RR 2teHtBoHAlumno_id5TeHt5-engt4) C I) $ teHtBoHApellidoNombre5Focus2)' action & AB !Action5A T%#N_!#D%F% A)' controladorDe*ventosBotonesAB !2)' 1 else $ !essageBoH5S4o72KNo se 4a seleccionado un registro 555LLLK)' 1 1 else $ !essageBoH5S4o72KNo eHisten registros 555LLLK)' 1 1 private void button*liminar_ lic92object sender3 *ventArgs e) $ i6 2data?ridGie7Alumno5)o7 ount C& 1) $ int 6ilaSeleccionada & data?ridGie7Alumno5 urrent)o75%ndeH' i6 26ilaSeleccionada L& Q1 RR 2teHtBoHAlumno_id5TeHt5-engt4) C I) $ i6 2!essageBoH5S4o72K*st< seguro de eliminar los datosNK3 K on6irme la eliminaciDnK3 !essageBoHButtons5OesNo3 !essageBoH%con5Puestion) && Dialog)esult5Oes) $ AlumnoDA# oAlumnoDA# & ne7 AlumnoDA#2)' Alumno oAlumno & ne7 Alumno2)' int bus@ueda & int5Parse2teHtBoHAlumno_id5TeHt)' oAlumno & oAlumnoDA#5consultar)egistro2bus@ueda)' i6 2oAlumno L& null) $ oAlumno & get#bjetoAlumno2)' oAlumno5alumno_id & I' i6 2oAlumnoDA#5eliminar)egistro2bus@ueda)) $ !essageBoH5S4o72KSe eliminD el registro 555LLLK)' action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)'

Ing. Javier Alberto Manrique Quionez

Pgina 1L=

Microsoft C# - Enfoque Prctico

actuali=arData?ridGie7Alumno2)' 1 else $ !essageBoH5S4o72KNo se pudo eliminar el


registro 555LLLK)'

action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' 1 1 else $ !essageBoH5S4o72KNo se pudo eliminar el
registro 555LLLK)'

action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' 1 1 else $ action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' 1

1 else $ !essageBoH5S4o72KSe tiene @ue seleccionar un registro 555LLLK)' 1 1 else $ !essageBoH5S4o72KNo eHisten registros 555LLLK)' 1 1 private void button ancelar_ lic92object sender3 *ventArgs e) $ action & AB !Action5N#_A T%#N' controladorDe*ventosBotonesAB !2)' buttonNuevo5Focus2)' 1 private void buttonSalir_ lic92object sender3 *ventArgs e) $ Dispose2)' 1 private void data?ridGie7Alumno_!ouse lic92object sender3
!ouse*ventArgs e)

$ i6 2e5 lic9s && 1 RR data?ridGie7Alumno5)o7 ount C& 1) $ int 6ilaSeleccionada & data?ridGie7Alumno5 urrent)o75%ndeH' i6 26ilaSeleccionada L& Q1) $ Alumno oAlumnoSeleccionado & 2Alumno) data?ridGie7Alumno5)o7sE6ilaSeleccionadaF5 ellsE1F5Galue' set#bjetoAlumno2oAlumnoSeleccionado)' 1 1 1 private void limpiarData?ridGie7Alumno2) $ data?ridGie7Alumno5)o7s5 lear2)' 1 private void controladorDe*ventosBotonesAB !2)

Ing. Javier Alberto Manrique Quionez

Pgina 1LG

Microsoft C# - Enfoque Prctico

$ i6 2action && AB !Action5N#_A T%#N) $ actuali=arData?ridGie7Alumno2)' teHtBoHAlumno_id5TeHt & KK' limpiar ajasDeTeHto2)' teHtBoHAlumno_id5*nabled & 6alse' 4abilitar ajasDeTeHto26alse)' 4abilitarBotonesAB !26alse3 true3 6alse3 true3 true3 true3 6alse3 true)' data?ridGie7Alumno5*nabled & true' buttonNuevo5Focus2)' 1 else $ i6 2action && AB !Action5A T%#N_B(S A)) $ 4abilitar ajasDeTeHto26alse)' limpiar ajasDeTeHto2)' 4abilitarBotonesAB !2true3 6alse3 6alse3 6alse3 6alse3 6alse3 true3 6alse)' 1 else $ i6 2action && AB !Action5A T%#N_%NS*)TA)) $ limpiar ajasDeTeHto2)' teHtBoHAlumno_id5*nabled & true' 4abilitarBotonesAB !2true3 6alse3 true3 6alse3 6alse3 6alse3 true3 6alse)' 1 else $ i6 2action && AB !Action5A T%#N_!#D%F% A)) $ 4abilitar ajasDeTeHto2true)'
4abilitarBotonesAB !26alse3 6alse3 true3 6alse3 6alse3 6alse3 true3 6alse)' teHtBoHAlumno_id5*nabled & 6alse'

1 else $ i6 2action && AB !Action5A T%#N_*-%!%NA)) $ actuali=arData?ridGie7Alumno2)' 1 else $ i6 2action && AB !Action5A T%#N_ #NS(-TA) $ 4abilitar ajasDeTeHto26alse)'
4abilitarBotonesAB !2true3 6alse3 6alse3 6alse3 6alse3 6alse3 true3 6alse)' teHtBoHAlumno_id5*nabled & true'

1 1 1 1 1 1 1

private void button alcularPromedioFinal onDataSet_ lic92object sender3 *ventArgs e) $ AlumnoDA# oAlumnoDA# & ne7 AlumnoDA#2)'

Ing. Javier Alberto Manrique Quionez

Pgina 1LJ

Microsoft C# - Enfoque Prctico

oAlumnoDA#5calcularPromedioFinal onDataSet2)' actuali=arData?ridGie7Alumno2)' 1 private void button alcularPromedioFinal on ommand_ lic92object sender3 *ventArgs e) $ AlumnoDA# oAlumnoDA# & ne7 AlumnoDA#2)' oAlumnoDA#5calcularPromedioFinal on ommand2)' actuali=arData?ridGie7Alumno2)' 1 private void data?ridGie7Alumno_Se"Do7n2object sender3 Se"*ventArgs e) $ i6 2e5Se" ode && Se"s5Do7n) $ int 6ilaSeleccionada & data?ridGie7Alumno5 urrent)o75%ndeH J 1' i6 26ilaSeleccionada C& data?ridGie7Alumno5)o7 ount) $ 6ilaSeleccionada & 6ilaSeleccionada Q 1' 1 else $ Alumno oAlumnoSeleccionado & 2Alumno) data?ridGie7Alumno5)o7sE6ilaSeleccionadaF5 ellsE1F5Galue' set#bjetoAlumno2oAlumnoSeleccionado)' 1 1 i6 2e5Se" ode && Se"s5(p) $ int 6ilaSeleccionada & data?ridGie7Alumno5 urrent)o75%ndeH Q 1' i6 26ilaSeleccionada B& Q1) $ 6ilaSeleccionada & 6ilaSeleccionada J 1' 1 else $ Alumno oAlumnoSeleccionado & 2Alumno) data?ridGie7Alumno5)o7sE6ilaSeleccionadaF5 ellsE1F5Galue' set#bjetoAlumno2oAlumnoSeleccionado)' 1 1 1 private void button%mprimir_ lic92object sender3 *ventArgs e) $ Formulario)eporteDeAlumnos oFormulario)eporteDeAlumnos&ne7 Formulario)eporteDeAlumnos2)' oFormulario)eporteDeAlumnos5S4o7Dialog2)' 1 private void button onsultar_ lic92object sender3 *ventArgs e) $ data?ridGie7Alumno5 learSelection2)' limpiar ajasDeTeHto2)' teHtBoHAlumno_id5TeHt & KK' teHtBoHAlumno_id5*nabled & true' teHtBoHAlumno_id5Focus2)' action & AB !Action5A T%#N_ #NS(-TA' controladorDe*ventosBotonesAB !2)' 1 1

Ing. Javier Alberto Manrique Quionez

Pgina 1LL

Microsoft C# - Enfoque Prctico

1 Figura 7.12: Ej &u&i'( % # <$r!u#ari$ F$r!u#ari$R "$r+ D A#u!($)

3 continuaci,n se presenta el procedimiento para generar un 1ormulario !ue presente un reporte creado en .r$stal report con origen de datos a una tabla de base de datos. El proceso empie'a con la creaci,n de un (ata*et3lumno (.onjunto de datos alumno), pala el cual se debe seguir el siguiente procedimiento:

Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregarF 7ue&oElemento. En la 1igura Q.1O nuestra lo indicado. Figura 7.14: Agr gar (u 5$ # ! (+$

*eleccione (atos K .onjunto de datos. Escriba (ata*et3lumno como nombre del .onjunto de datos. En la 1igura Q.1Q nuestra lo indicado.

Ing. Javier Alberto Manrique Quionez

Pgina 1LO

Microsoft C# - Enfoque Prctico

Figura 7.17: S # &&i'( % %a+$) 1 C$(ju(+$ % %a+$)

Merifi!ue !ue se muestra el dise#ador de (ata*et. La 1igura Q.1R muestra el dise#ador de (ata*et. Luego haga doble clic en el &Enculo E plorador de *oluciones !ue se encuentra en el rea de dise#o del (ata*et. Figura 7.1:: ,r a % %i) =$ % # Da+aS +

En el rea de dise#o de (ata*et haga doble clic derecho $ seleccione del men conceptual 3gregar K "abla de datos. En la 1igura O.1R nuestra lo indicado. Figura 7.*>: S # &&i'( Agr gar 1 Ta?#a % %a+$)

Ing. Javier Alberto Manrique Quionez

Pgina 1LQ

Microsoft C# - Enfoque Prctico

En 3gregar cone i,n en )rigen de datos escriba L$&a#L$)+ (ser&idor local) $ en seleccione o escriba el nombre de una base de datos escriba %?A#u!($. En la 1igura Q.;1 nuestra lo indicado. Figura 7.*1: S # &&i'( Agr gar 1 C$#u!(a

Ing. Javier Alberto Manrique Quionez

Pgina 1LR

Microsoft C# - Enfoque Prctico

Merifi!ue !ue el E plorador de *er&idores &isualice la cone i,n dbalumno (cone i,n a la base de datos db3lumno). La 1igura Q.;; &isuali'a la cone i,n a la base de datos db3lumno. Figura 7.**: C$( /i'( a #a ?a) % %a+$) %?A#u!($

3rrastre la tabla 3lumno del E plorador de ser&idores al rea de dise#o del (ata*et. La 1igura Q.;= &isuali'a la tabla 3lumno en el (ata*et despu%s de arrastrarla desde el ser&idor de archi&os. Figura 7.*-: Ta?#a a#u!($ % )"uF) % arra)+rar#a % # E/"#$ra%$r % S r5i%$r )

Ing. Javier Alberto Manrique Quionez

Pgina 1O9

Microsoft C# - Enfoque Prctico

<ara crear un reporte utili'ando .r$stal 0eport se debe seguir el siguiente procedimiento: Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregar FP 7ue&oElemento. En la 1igura Q.;G nuestra lo indicado. Figura 7.*.: Agr gar (u 5$ # ! (+$

. *eleccione 0eporting K .r$stal 0eports. Escriba .r$stal0eporte3lumno.rpt 0eporte. En la 1igura Q.;J nuestra lo indicado. Figura 7.*0: S # &&i'( R "$r+i(g 1 Cr6)+a# R "$r+) como nombre del

Ing. Javier Alberto Manrique Quionez

Pgina 1O1

Microsoft C# - Enfoque Prctico

*eleccione +sar asistente de informes FP Estndar $ haga clic en el bot,n de comando 3ceptar. En la 1igura Q.;L nuestra lo indicado. Figura 7.*2: S # &&i'( E)+E(%ar 1 B$+'( % &$!a(%$ A& "+ar

*eleccione en datos del pro$ecto 3().7E" (ata*ets F 34.-$(3).(ata*et3lumno F (ata"able1. Luego haga clic en el bot,n de comando indicado. . En la 1igura Q.;O nuestra lo

Figura 7.*4: Da+$) % # "r$6 &+$ ADO.NET Da+aS +) G ABCM6DAO.Da+aS +A#u!($Da+a

Ing. Javier Alberto Manrique Quionez

Pgina 1O;

Microsoft C# - Enfoque Prctico

Merifi!ue !ue la &entana del 3sistente para la creaci,n de informes estndar se &isualice como en la 1igura Q.;Q. Luego haga clic en el bot,n de comando *iguiente. Figura 7.*7: A)i)+ (+ "ara #a &r a&i'( % i(<$r! ) )+E(%ar

*eleccione todos los campos de la table 3lumno haciendo clic en el bot,n de comando La 1igura Q.;R muestra el asistente en la selecci,n de campos a mostrar. Figura 7.*:: S # &&i'( % &a!"$) a !$)+rar

Ing. Javier Alberto Manrique Quionez

Pgina 1O=

Microsoft C# - Enfoque Prctico

Merifi!ue !ue la &entana del asistente para la creaci,n de informes estndar se &isualice como en la 1igura Q.=9. Luego haga clic en el bot,n de comando 1inali'ar. Figura 7.->: A)i)+ (+ "ara #a &r a&i'( % i(<$r! ) )+E(%ar

Merifi!ue !ue la &entana del reporte se &isualice como en la 1igura Q.=1 despu%s de agregar otros objetos de te to. Figura 7.-1: 3 (+a(a % r "$r+

Ing. Javier Alberto Manrique Quionez

Pgina 1OG

Microsoft C# - Enfoque Prctico

<ara crear un formulario para desplegar el reporte se debe seguir el siguiente procedimiento: Nacer clic derecho en el pro$ecto 34.-$(3) $ seleccionar 3gregarF 7ue&oElemento. En la 1igura Q.=; nuestra lo indicado. Figura 7.-*: Agr gar (u 5$ # ! (+$

. *eleccione Aindows 1orms K Aindows 1orms. Escriba 1ormulario0eporte como nombre del 1ormulario. En la 1igura Q.== nuestra lo indicado. Figura 7.--: S # &&i'( 8i(%$9) F$r!)G 8i(%$9) F$r!)

Ing. Javier Alberto Manrique Quionez

Pgina 1OJ

Microsoft C# - Enfoque Prctico

(el cuadro de herramientas arrastre el control .r$stal0eportMiewer. En la 1igura Q.=G nuestra lo indicado. Figura 7.-.: S # &&i'( % &$(+r$# Cr6)+a#R "$r+3i 9 r a# F$r!u#ari$R "$r+ D A#u!($)

Merifi!ue !ue el 1ormulario0eporte $ el icono se#alado por la fecha se &isualicen como en la 1igura Q.=J. Este icono acti&a el -en conceptual "areas del .r$stal0eportMiewer

Ing. Javier Alberto Manrique Quionez

Pgina 1OL

Microsoft C# - Enfoque Prctico

Figura 7.-0: 3 (+a(a F$r!u#ari$R "$r+ D A#u!($)

(el -en conceptual FP "areas del .r$stal0eportMiewer seleccione IE# gir u( i(<$r! Cr6)+a#\] tal como se presenta en la 1igura Q.=L. Figura 7.-2 M (D &$(& "+ua#GJTar a) % Cr6)+aR "$r+3i 9 r

En Elegir un informe de .r$stal K cristal0eportMiewer1 seleccione .r$stalreport1.rpt tal como se presenta en la 1igura Q.=O. Figura 7.-4: M (D &$(& "+ua# +ar a) % Cr6)+a#r "$r+3i 9 r &$( ) # &&i'( % r "$r+

Ing. Javier Alberto Manrique Quionez

Pgina 1OO

Microsoft C# - Enfoque Prctico

Merifi!ue !ue el 1ormulario0eporte.cs se presente como en la 1igura Q.=Q Figura 7.-7: 3i)+a % # <$r!u#ari$ F$r!u#ari$R "$r+ D A#u!($.&)

<ulse 1O ingrese el c,digo del 1ormulario0eporte el cual se presenta en la 1igura Q.=R. Figura 7.-:: C'%ig$ % # F$r!u#ari$R "$r+

Ing. Javier Alberto Manrique Quionez

Pgina 1OQ

Microsoft C# - Enfoque Prctico

Naga docle clic en el objeto app.config del E plorador de soluciones. En la 1igura Q.G9 se &isuali'a el objeto app..onfig. Figura 7..>: O?j +$ a"".C$(<ig ( # /"#$ra%$r % )$#u&i$( )

3gregue el siguiente c,digo en el objeto app.config. En la 1igura Q.G1. el c,digo a agregarse en el objeto app..onfig. Esto se reali'a siempre en cuando no corre la aplicaci,n.

Ing. Javier Alberto Manrique Quionez

Pgina 1OR

Microsoft C# - Enfoque Prctico

Figura 7:.1: C'%ig$ a agr gar ( # O?j +$ a"".C$(<ig

Ejecute el pro$ecto $ &erifi!ue !ue se presente el *istema de mantenimiento 34.- de 3lumnos $ se presente el 0eporte de 3lumno cuando se haga clic en el bot,n de comando imprimir tal como se &isuali'a en la 1igura Q.G;. Figura 7..*: Ej &u&i'( % # F$r!u#ari$ ABCM &$( ?a) % %a+$) 6 # r "$r+ % a#u!($).

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioABCM-Base de Datos con DA% Propiedades.

Ing. Javier Alberto Manrique Quionez

Pgina 1Q9

Microsoft C# - Enfoque Prctico

CAPTULO : PROCEDIMIENTOS ALMACENADOS

Ing. Javier Alberto Manrique Quionez

Pgina 1Q1

Microsoft C# - Enfoque Prctico

PROCEDIMIENTOS ALMACENADOS
+n procedimiento almacenado (stored procedure) es un programa !ue se almacena fEsicamente en una base de datos. *u implementaci,n &arEa de un gestor de bases de datos a otro. La &entaja de un procedimiento almacenado es !ue se ejecuta en respuesta a una petici,n de usuario directamente en el motor de bases de datos, el cual usualmente corre en un ser&idor de datos. Los procedimientos almacenados acceden directamente a los datos $ s,lo necesita parmetros para pasar datos de la aplicaci,n al procedimiento almacenado $ luego de hacer un proceso de&uel&e resultados a la aplicaci,n !ue lo llam,. Esto elimina la sobrecarga de comunicar grandes cantidades de datos salientes $ entrantes. Los procedimientos almacenados son &entajosos cuando una base de datos es manipulada desde muchas aplicaciones e ternas, los cuales pueden ser escritos en diferentes lenguajes. Inclu$en la l,gica de la aplicaci,n en la base de datos e eliminan la necesidad de incrustar la l,gica en todas las aplicaciones !ue acceden a los datos, lo cual simplifica la creaci,n $ particularmente el mantenimiento de las aplicaciones clientes in&olucrados. Esto reduce la probabilidad de !ue los datos sean corrompidos por el uso de aplicaciones clientes defectuosos. Los procedimientos se asemejan a las construcciones de otros lenguajes de programaci,n por!ue pueden: 3ceptar parmetros de entrada (parmetros) $ de&ol&er &arios &alores (resultados) de salida a la aplicaci,n !ue lo llam,. .ontener instrucciones reali'an operaciones en la base de datos $ pueden contener llamadas a otros procedimientos almacenados. (e&ol&er un &alor de estado a un programa !ue reali'a una llamada para indicar si la operaci,n se ha reali'ado correctamente o se han producido errores, $ el moti&o de estos. Los comandos de un procedimiento almacenado se ejecutan en un nico lote de c,digo. Esto reduce significati&amente el trfico de red entre el ser&idor $ el cliente, $a !ue solo se en&Ea la llamada red !ue &a a ejecutar a tra&%s de ella. Los procedimientos almacenados permiten la reutili'aci,n del c,digo, $a !ue el c,digo de cual!uier operaci,n de base de datos redundante resulta un candidato perfecto para la encapsulaci,n de procedimientos. (e este modo, se elimina la necesidad de escribir de nue&o el mismo c,digo, se reducen las inconsistencias de c,digo $ se permite !ue cual!uier usuario o aplicaci,n !ue cuente con los permisos necesarios pueda acceder al c,digo $ ejecutarlo. Los procedimientos almacenados permiten un mantenimiento ms sencillo, $a !ue las aplicaciones cliente llaman a procedimientos $ mantienen las operaciones de base de datos en la capa de datos, solo deben actuali'arse los cambios de los procesos en la base de datos. El ni&el de aplicaci,n permanece independiente $ no tiene !ue tener conocimiento sobre los cambios reali'ados en los dise#os, las relaciones o los procesos de la base de datos. Los procedimientos almacenados aseguran un rendimiento mejorado de forma predeterminada $a se compila la primera &e' !ue se ejecuta $ crea un plan de ejecuci,n !ue &uel&e a usarse en posteriores ejecuciones. .omo el procesador de consultas no tiene !ue crear un nue&o plan, normalmente necesita menos tiempo para procesar el procedimiento. <or otro lado dan ma$or seguridad, $a !ue &arios usuarios $ aplicaciones cliente pueden reali'ar operaciones en los objetos de base de datos sub$acentes a tra&%s de un procedimiento, aun!ue los usuarios $ las aplicaciones no tengan permisos directos sobre esos objetos sub$acentes. El procedimiento controla !ue procesos $ acti&idades se lle&an a cabo $ protege los objetos de base de datos sub$acentes. Esto elimina la necesidad de conceder permisos en cada ni&el de objetos $ simplifica los ni&eles de seguridad. 3l llamar a un procedimiento a tra&%s de la red, solo est &isible la llamada !ue &a a ejecutar el procedimiento. <or lo tanto, los usuarios malintencionados no pueden &er los nombres de los objetos de base de datos $ tabla, incrustados en sus propias instrucciones "ransactF*ZL, ni buscar datos crEticos.

Ing. Javier Alberto Manrique Quionez

Pgina 1Q;

Microsoft C# - Enfoque Prctico

El uso de parmetros a$uda a protegerse contra ata!ues por in$ecci,n de c,digo *ZL. (ado !ue la entrada de parmetros se trata como un &alor literal $ no como c,digo ejecutable, resulta ms difEcil para un atacante insertar un comando en la instrucci,n "ransactF*ZL del procedimiento $ comprometer la seguridad. Los procedimientos pueden cifrarse, lo !ue a$uda a ofuscar el c,digo fuente. Entre los comandos importantes para usar procedimientos almacenados en ./ tenemos: SA#C$(( &+i$( )btiene o establece la cone i,n SA#C$(( &+i$( !ue utili'a esta instancia de la *!l.ommand. Ejemplo: public class AdministradorDeConexion { static SqlConnection conexion; static public SqlConnection getConexion() { conexion = new &qlConnection( Data Source=(local);!nitial Catalog=dbAlumno;!ntegrated Securit"=#rue ); return conexion; $ $ SA#C$(( &+i$(.O" ( 3bre una cone i,n a una base de datos. Ejemplo: oSqlConnection%%pen(); SA#C$(( &+i$(.C#$) .ierra una cone i,n a una base de datos. Ejemplo: oSqlConnection%Close(); SA#C$!!a(% 0epresenta una sentencia "ransactF*ZL o un procedimiento almacenado para ejecutarse en una base de datos *ZL *er&er. Ejemplo: SqlCommand oSqlCommand = new &qlCommand(sentencia& oSqlConnection); SA#C$!!a(% @S+ri(gB SA#C$(( &+i$(C Iniciali'a una nue&a instancia de la clase *!l.ommand con un te to !ue representa una sentencia *!l o el ($!?r % "r$& %i!i (+$ a#!a& (a%$ $ un objeto *!l.onnection. Ejemplo: SqlCommand oSqlCommand = new &qlCommand( dbo%!nsertarAlumno & oSqlConnection); C$!!a(%T6" )btiene o establece la instrucci,n de "ransactF*ZL para ejecutarse en el origen de datos. .uando la propiedad C$!!a(%T6" se establece en S+$r %Pr$& %ur , la propiedad .ommand"e t se establece con el nombre del procedimiento almacenado. El comando ejecutar este procedimiento almacenado cuando se llame a uno de los m%todos E ecute. Ejemplo: oSqlCommand%Command'$pe = Command#"pe%&toredProcedure; SA#C$!!a(%.Para! + r Los objetos de comando utili'an parmetros para pasar &alores a instrucciones *ZL o procedimientos almacenados *e puede definir de manera ms e plEcita parmetros de procedimientos almacenados $ para acceder a los parmetros de salida $ de&ol&er &alores. Los parmetros se almacenan a tra&%s de una colecci,n !ue se asocia a un objeto *!l.ommand El &alor predeterminado es una colecci,n &acEa. .uando se utili'an parmetros con *!l.ommand para ejecutar un procedimiento almacenado de *ZL *er&er, los nombres de los parmetros agregados a la colecci,n deben coincidir con los nombres de los marcadores de parmetros en el procedimiento almacenado. Ejemplo:

Ing. Javier Alberto Manrique Quionez

Pgina 1Q=

Microsoft C# - Enfoque Prctico

E( C#: oSqlCommand%Parameters%Add(new &qlParameter( 'alumno(id & oSqlCommand%Parameters%Add(new Sql)arameter( 'apellido*ombre & oAlumno%getApellido*ombre())); oSqlCommand%Parameters%Add(new Sql)arameter( 'evaluacion)arcial+ & oAlumno%getEvaluacion)arcial+())); oSqlCommand%Parameters%Add(new Sql)arameter( 'evaluacion)arcial, & oAlumno%getEvaluacion)arcial,())); oSqlCommand%Parameters%Add(new Sql)arameter( 'promedio#raba-o & oAlumno%get)romedioDe#raba-o())); oSqlCommand%Parameters%Add(new &qlParameter( 'promedio.inal & oAlumno%get)romedio.inal())); E( SA# ) r5 r *>>7 R*: .0E3"ED3L"E0 <0).E(+0E >dbo?.>Insertar3lumno? galumno6id int, gapellido7ombre char(J9), ge&aluacion<arcial1 float, ge&aluacion<arcial; float, gpromedio"rabajo float, gpromedio1inal float

oAlumno%getAlumno(id()));

SA#C$!!a(%.E/ &u+ N$(Pu r6@CT Ejecuta una instrucci,n de "ransactF*ZL (u"%a+ B i() r+ $ % # + ) o un procedimiento almacenado en una cone i,n $ de&uel&e el nmero de filas afectadas. Ejemplo: &qlCommand.E(ecute)on*uer$+,SA#Da+aR a% r <roporciona una manera de leer una secuencia de s,lo a&ance de filas de una base de datos. La recuperaci,n implica crear una instancia del objeto *!l.ommand $ de un *!l(ata0eader, para lo cual se llama a *!l.ommand.E ecute0eader a fin de recuperar filas de un origen de datos. *e utili'a el m%todo R a% del objeto *!l(ata0eader para obtener una fila a partir de los resultados de una consulta. <ara tener acceso a cada columna de la fila de&uelta, puede pasar a (ata0eader el nombre de la columna. Los datos de los campos leEdos tienen !ue parsearse para ser utili'ados en en ./. Ejemplo: String sentencia= SE/EC# 0 .123 Alumno 45E1E alumno(id = 6 busqueda; SqlCommand oSqlCommand = new SqlCommand(sentencia& oSqlConnection); &qlData eader oSqlData1eader = oSqlCommand%Execute1eader(); i7 (oSqlData1eader% ead()) { oAlumno = new CEAlumno(); oAlumno%alumno(id = (int) oSqlData1eader8 alumno(id 9; oAlumno%apellido*ombre = (String) oSqlData1eader8 apellido*ombre 9; oAlumno%evaluacion)arcial+ = (double) oSqlData1eader8 evaluacion)arcial+ 9; oAlumno%evaluacion)arcial, = (double) oSqlData1eader8 evaluacion)arcial, 9; oAlumno%promedioDe#raba-o = (double) oSqlData1eader8 promedioDe#raba-o 9; oAlumno%set)romedio.inal = (double) oSqlData1eader8 promedio.inal 9; oSqlData1eader%Close(); return oAlumno; $ SA#Da+aR a% r o*!l(ata0eader 8 o*!l.ommand.E ecute0eader()2 SA#Da+aR a% r.C#$) .ierra un *!l(ata0eader aperturado. Ejemplo: oSqlData1eader%Close();

Ing. Javier Alberto Manrique Quionez

Pgina 1QG

Microsoft C# - Enfoque Prctico

3 continuaci,n se presenta un ejemplo de una aplicaci,n !ue adminsitra una tabla de base de datos donde se utili'a procedimientos almacenados $ desarrollo de aplicaciones con la ar!uitectura -odeloFMistaF.ontrolado en 1ormularios Aindows el cual tiene las siguientes caracterEsticas: a) <resenta un formulario para un sistema de mantenimiento 34.- de alumnos el cual se &isuali'a en la 1igura R.1. b) Las letras 34.- significan 3ltas, 4ajas, .onsultas $ -odificaci,n respecti&amente. c) La aplicaci,n se ha desarrollado con la ar!uitectura -odeloFMistaF.ontrolador la cual se &isuali'a en la 1igura R.;. d) La estructura de la clase 3lumno es la siguiente:
int alumno_id String apellidoNombre double evaluacionParcial1 double evaluacionParcial2 double promedioDeTrabajo double promedioFinal

e) +tili'a la clase 34.-3ction para definir las acciones !ue se pueden reali'ar, la cual se &isuali'a en la 1igura R.= como .,digo de la 3plicaci,n F 34.-3ction f) En la 1igura R.G se &isuali'a la clase 3dministrador(e.one ion !ue contiene el m%todo get.one ion(), el cual permite la cone i,n de la aplicaci,n con la base de datos. g) En la 1igura R.J se &isuali'a el diagrama de clases de la aplicaci,n. h) En la 1igura R.L se &isuali'a la clase entidad 3lumno. i) En la 1igura R.O se &isuali'a la clase 3lumno(3) j) En la 1igura R.Q se &isuali'a la .lase .ontrolador3lumno.cs !ue es el controlador en el -odeloF MistaF.ontrolador. T) En la 1igura R.R se &isuali'a el .,digo de la 3plicaci,n F .lase 1ormulario34.-$-M.$4( (Mista) l) En la 1igura R.19 se &isuali'a el .,digo de la 3plicaci,n F .lase 1ormularioImprimir(Mista) m) En la 1igura R.11 un formulario para &isuali'ar el reporte de alumnos. n) En la 1igura R.1; se &isuali'a .,digo de la 3plicaci,n K <rograma principal. o) En la 1igura R.1= se &isuali'a la base de datos en el 3dministrador del -icrsoft *ZL *er&er ;99Q. p) En la 1igura R.1G se &isuali'a el c,digo *ZL para crear la base de datos db3lumno $ la tabla 3lumno. <ara crear la base de datos $ la tabla se tiene !ue ejecutar el c,digo *ZL en el -icrosoft *ZL ;99Q. !) En la 1igura R.1J se &isuali'a el c,digo *ZL para crear los procedimientos almacenados en -icrosft *ZL *er&er ;99Q. <ara crear los procedimientos almacenados se tiene !ue ejecutar el c,digo *ZL en el -icrosoft *ZL ;99Q.

Ing. Javier Alberto Manrique Quionez

Pgina 1QJ

Microsoft C# - Enfoque Prctico

Figura :.1: F$r!u#ari$ % #a a"#i&a&i'(

Figura :.*: ArAui+ &+ura % #a a"#i&a&i'( u+i#i;a(%$ M$% #$G3i)+aGC$(+r$#a%$r

Ing. Javier Alberto Manrique Quionez

Pgina 1QL

Microsoft C# - Enfoque Prctico

Figura :.-: C'%ig$ % #a A"#i&a&i'( G ABCMA&+i$( namespace 34.-$-M..+til 5 public class 34.-3ccion 5 public static int 7)63."I)7 8 12 public static int 3."I)76I7*E0"30 8 ;2 public static int 3."I)76-)(I1I.30 8 =2 public static int 3."I)76.37.EL30 8 G2 public static int 3."I)76ELI-I730 8 J2 public static int 3."I)76.)7*+L"3 8 L2 : : Figura :..: C'%ig$ % #a A"#i&a&i'( 1 C#a) A%!i(i)+ra%$rD C$( /i'( using *$stem2 using *$stem.(ata.*!l.lient2 namespace 34.-$-M..-odelo.(atos 5 public class 3dministrador(e.one ion 5 static *!l.onnection cone ion2 static public *!l.onnection get.one ion() 5 o*!l.onnection 8 new *!l.onnection(@(ata *ource8(local)2Initial .atalog8db3lumno2Integrated
*ecurit$8"rue@)2

return o*!l.onnection2 : : : Figura :.0: Diagra!a % &#a) ) % #a a"#i&a&i'(

Ing. Javier Alberto Manrique Quionez

Pgina 1QO

Microsoft C# - Enfoque Prctico

:.2. C'%ig$ % #a A"#i&a&i'(G C#a) using *$stem2 namespace 34.-$-M..-odelo.Entidad 5 public class 3lumno 5 public int alumno6id 5 get2 set2 : public *tring apellido7ombre 5 get2 set2 : public double e&aluacion<arcial1 5 get2 set2 : public double e&aluacion<arcial; 5 get2 set2 : public double promedio(e"rabajo 5 get2 set2 : public double promedio1inal 5 get2 set2 : public .E3lumno() 5 this.alumno6id 8 92 this.apellido7ombre 8 null2 this.e&aluacion<arcial1 8 92 this.e&aluacion<arcial; 8 92 this.promedio(e"rabajo 8 92 :

(+i%a% A#u!($

public 3lumno(int alumno6id, *tring apellido7ombre, double e&aluacion<arcial1, double e&aluacion<arcial;, double promedio(e"rabajo, double promedio1inal) 5 this.alumno6id 8 alumno6id2 this.apellido7ombre 8 apellido7ombre2 this.e&aluacion<arcial1 8 e&aluacion<arcial12 this.e&aluacion<arcial; 8 e&aluacion<arcial;2 this.promedio(e"rabajo 8 promedio(e"rabajo2 this.promedio1inal 8 promedio1inal2 : public &oid set<romedio1inal() 5 this.promedio1inal 8 (this.e&aluacion<arcial1 B this.e&aluacion<arcial; B this.promedio(e"rabajo) D =2 : public o&erride *tring "o*tring() 5 return apellido7ombre2 : : :

:.4. C'%ig$ % #a A"#i&a&i'(G C#a) A#u!($DAO using *$stem2

Ing. Javier Alberto Manrique Quionez

Pgina 1QQ

Microsoft C# - Enfoque Prctico

using *$stem..ollections.Heneric2 using *$stem.(ata2 using *$stem.(ata.*!l.lient2 using *$stem.Aindows.1orms2 using 34.-$-M..-odelo.Entidad2 namespace 34.-$-M..-odelo.(atos 5 public class 3lumno(3) 5 *!l.onnection o*!l.onnection2 public 4oolean insertar0egistro(3lumno o3lumno) 5 tr$ 5 o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2
o*!l.onnection.)pen()2 *!l.ommand o*!l.ommand 8 new *!l.ommand(@dbo.Insertar3lumno@, o*!l.onnection)2 o*!l.ommand..ommand"$pe 8 .ommand"$pe.*tored<rocedure2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@galumno6id@, o3lumno.alumno6id))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@gapellido7ombre@, o3lumno.apellido7ombre))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@ge&aluacion<arcial1@, o3lumno.e&aluacion<arcial1))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@ge&aluacion<arcial;@, o3lumno.e&aluacion<arcial;))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@gpromedio"rabajo@,
o3lumno.promedio(e"rabajo))2

o*!l.ommand.<arameters.3dd(new *!l<arameter(@gpromedio1inal@, o3lumno.promedio1inal))2

o*!l.ommand.E ecute7onZuer$()2 o*!l.onnection..lose()2 return true2 : catch(*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@ B e.-essage)2 return false2 : : public 3lumno consultar0egistro(int bus!ueda) 5 tr$ 5 3lumno o3lumno2
*!l.onnection o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *!l.ommand o*!l.ommand 8 new *!l.ommand(@dbo.consultar3lumno@, o*!l.onnection)2 o*!l.ommand..ommand"$pe8.ommand"$pe.*tored<rocedure2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@galumno6id@, bus!ueda))2 *!l(ata0eader o*!l(ata0eader 8 o*!l.ommand.E ecute0eader()2 if(o*!l(ata0eader.0ead()) X o3lumno8new 3lumno()2 o3lumno.alumno6id 8 (int) o*!l(ata0eader >@alumno6id@?2 o3lumno.apellido7ombre 8 (*tring) o*!l(ata0eader >@apellido7ombre@?2 o3lumno.e&aluacion<arcial1 8 (double) o*!l(ata0eader >@e&aluacion<arcial1@?2 o3lumno.e&aluacion<arcial; 8 (double) o*!l(ata0eader >@e&aluacion<arcial;@?2 o3lumno.promedio(e"rabajo 8 (double) o*!l(ata0eader >@promedio(e"rabajo@?2 o3lumno.promedio1inal 8 (double) o*!l(ata0eader >@promedio1inal@?2 o*!l(ata0eader..lose()2 return o3lumno2

: else 5 return null2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1QR

Microsoft C# - Enfoque Prctico

: catch(*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@ B e.-essage)2 return null2 : : public 4oolean modificar0egistro(int bus!ueda, 3lumno o3lumno) 5 tr$ 5 o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *!l.ommand o*!l.ommand 8 new *!l.ommand(@dbo.-odificar3lumno@, o*!l.onnection)2 o*!l.ommand..ommand"$pe 8 .ommand"$pe.*tored<rocedure2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@galumno6id@, o3lumno.alumno6id))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@gapellido7ombre@, o3lumno.apellido7ombre))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@ge&aluacion<arcial1@, o3lumno.e&aluacion<arcial1))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@ge&aluacion<arcial;@, o3lumno.e&aluacion<arcial;))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@gpromedio"rabajo@, o3lumno.promedio(e"rabajo))2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@gpromedio1inal@, o3lumno.promedio1inal))2 o*!l.ommand.E ecute7onZuer$()2 o*!l.onnection..lose()2 return true2 : catch(*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@ B e.-essage)2 return false2 : : public 4oolean eliminar0egistro(int bus!ueda) 5 tr$ 5 o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *!l.ommand o*!l.ommand 8 new *!l.ommand(@dbo.Eliminar3lumno@, o*!l.onnection)2 o*!l.ommand..ommand"$pe 8 .ommand"$pe.*tored<rocedure2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@galumno6id@, bus!ueda))2 o*!l.ommand.E ecute7onZuer$()2 o*!l.onnection..lose()2 return true2 : catch(*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@ B e.-essage)2 return false2 : :

Ing. Javier Alberto Manrique Quionez

Pgina 1R9

Microsoft C# - Enfoque Prctico

public int buscar0egistro(int bus!ueda) 5 3lumno o3lumno 8 new 3lumno()2 tr$ 5 *!l.onnection o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *!l.ommand o*!l.ommand 8 new *!l.ommand(@dbo..onsultar3lumno@, o*!l.onnection)2 o*!l.ommand..ommand"$pe 8 .ommand"$pe.*tored<rocedure2 o*!l.ommand.<arameters.3dd(new *!l<arameter(@galumno6id@, o3lumno.alumno6id))2 *!l(ata0eader o*!l(ata0eader 8 o*!l.ommand.E ecute0eader()2 if(o*!l(ata0eader.0ead()) 5 o3lumno.alumno6id 8 (int)o*!l(ata0eader >@alumno6id@?2 o3lumno.apellido7ombre 8 (*tring)o*!l(ata0eader >@apellido7ombre@?2 o3lumno.e&aluacion<arcial1 8 (double)o*!l(ata0eader >@e&aluacion<arcial1@?2 o3lumno.e&aluacion<arcial; 8 (double)o*!l(ata0eader >@e&aluacion<arcial;@?2 o3lumno.promedio(e"rabajo 8 (double)o*!l(ata0eader >@promedio(e"rabajo@?2 o3lumno.promedio1inal 8 (double)o*!l(ata0eader >@promedio1inal@?2 o*!l(ata0eader..lose()2 o*!l.onnection..lose()2 return o3lumno.alumno6id2 : return FRR2 : catch(*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@ B e.-essage)2 return FRR2 : : public ListS3lumnoP obtener(atosEnList() 5 ListS3lumnoP oList3lumno 8 new ListS3lumnoP()2 tr$ 5 o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *!l.ommand o*!l.ommand 8 new *!l.ommand(@dbo.Listar3lumnos@, o*!l.onnection)2 o*!l.ommand..ommand"$pe 8 .ommand"$pe.*tored<rocedure2 *!l(ata0eader o*!l(ata0eader 8 o*!l.ommand.E ecute0eader()2 3lumno o3lumno2 while(o*!l(ata0eader.0ead()) 5 o3lumno 8 new 3lumno()2 o3lumno.alumno6id 8 (int)o*!l(ata0eader>@alumno6id@?2 o3lumno.apellido7ombre 8 (*tring)o*!l(ata0eader>@apellido7ombre@?2 o3lumno.e&aluacion<arcial1 8 (double)o*!l(ata0eader>@e&aluacion<arcial1@?2 o3lumno.e&aluacion<arcial; 8 (double)o*!l(ata0eader>@e&aluacion<arcial;@?2 o3lumno.promedio(e"rabajo 8 (double)o*!l(ata0eader>@promedio(e"rabajo@?2 o3lumno.promedio1inal 8 (double)o*!l(ata0eader>@promedio1inal@?2 oList3lumno.3dd(o3lumno)2 : o*!l(ata0eader..lose()2 o*!l.onnection..lose()2 return oList3lumno2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1R1

Microsoft C# - Enfoque Prctico

catch(*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@ B e.-essage)2 return null2 : : public 4oolean calcular<romedio1inal.on.ommand() 5 tr$ 5 o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 *!l.ommand o*!l.ommand 8 new *!l.ommand(@dbo..alculo<romedio1inal@, o*!l.onnection)2 o*!l.ommand..ommand"$pe 8 .ommand"$pe.*tored<rocedure2 o*!l.ommand.E ecute7onZuer$()2 o*!l.onnection..lose()2 return true2 : catch(*$stem.E ception e) 5 o*!l.onnection..lose()2 -essage4o .*how(@Error ...VVV@ B e.-essage)2 return false2 : : : : : :.7: C'%ig$ % #a A"#i&a&i'(G C#a) C$(+r$#a%$r A#u!($ using *$stem2 using *$stem..ollections.Heneric2 using 34.-$-M..-odelo.Entidad2 using 34.-$-M..-odelo.(atos2 namespace 34.-$-M...ontrolador 5 public class .ontrolador3lumno 5 public 4oolean insertar0egistro(3lumno o3lumno) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 return o3lumno(3).insertar0egistro(o3lumno)2 : public 3lumno consultar0egistro(int bus!ueda) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 return o3lumno(3).consultar0egistro(bus!ueda)2 : public 4oolean modificar0egistro(int bus!ueda, 3lumno o3lumno) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 return o3lumno(3).modificar0egistro(bus!ueda, o3lumno)2 : public 4oolean eliminar0egistro(int bus!ueda) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 return o3lumno(3).eliminar0egistro(bus!ueda)2 : public int buscar0egistro(int bus!ueda) 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2

Ing. Javier Alberto Manrique Quionez

Pgina 1R;

Microsoft C# - Enfoque Prctico

return o3lumno(3).buscar0egistro(bus!ueda)2 : public ListS3lumnoP obtener(atosEnList() 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 return o3lumno(3).obtener(atosEnList()2 : public 4oolean calcular<romedio1inal.on.ommand() 5 3lumno(3) o3lumno(3) 8 new 3lumno(3)()2 return o3lumno(3).calcular<romedio1inal.on.ommand()2 : : : Figura :.:: C'%ig$ % #a A"#i&a&i'( G C#a) F$r!u#ari$ABCM6M3C6BD @3i)+aC using *$stem2 using *$stem..ollections.Heneric2 using *$stem.Aindows.1orms2 using 34.-$-M..+til2 using 34.-$-M..-odelo.Entidad2 using 34.-$-M...ontrolador2 namespace Mista 5 public partial class 1ormulario34.-$-M.$4(: 1orm 5 pri&ate int action 8 34.-3ction.7)63."I)72 public 1ormulario34.-$-M.$4(() 5 Initiali'e.omponent()2 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : public 3lumno get)bjeto3lumno() 5 3lumno o3lumno 8 new 3lumno()2 o3lumno.alumno6id 8 int.<arse(te t4o 3lumno6id."e t)2 o3lumno.apellido7ombre 8 te t4o 3pellido7ombre."e t2 o3lumno.e&aluacion<arcial1 8 double.<arse(te t4o E&aluacion<arcial1."e t)2 o3lumno.e&aluacion<arcial; 8 double.<arse(te t4o E&aluacion<arcial;."e t)2 o3lumno.promedio(e"rabajo 8 double.<arse(te t4o <romedio(e"rabajo."e t)2 return o3lumno2 : public &oid set)bjeto3lumno(3lumno o3lumno) 5 te t4o 3lumno6id."e t 8 o3lumno.alumno6id B @@2 te t4o 3pellido7ombre."e t 8 o3lumno.apellido7ombre B @@2 te t4o E&aluacion<arcial1."e t 8 o3lumno.e&aluacion<arcial1 B @@2 te t4o E&aluacion<arcial;."e t 8 o3lumno.e&aluacion<arcial; B @@2 te t4o <romedio(e"rabajo."e t 8 o3lumno.promedio(e"rabajo B @@2 :

public &oid actuali'ar(ataHridMiew3lumno() 5 limpiar(ataHridMiew3lumno()2 .ontrolador3lumno o.ontrolador3lumno 8 new .ontrolador3lumno()2 ListS3lumnoP oList3lumno 8 o.ontrolador3lumno.obtener(atosEnList()2 for(int posicion 8 92 posicion S oList3lumno..ount2 posicion 8 posicion B 1)

Ing. Javier Alberto Manrique Quionez

Pgina 1R=

Microsoft C# - Enfoque Prctico

5 if(oList3lumno>posicion?.alumno6id V8 9) 5 dataHridMiew3lumno.0ows.3dd(oList3lumno>posicion?.alumno6id, oList3lumno>posicion?, oList3lumno>posicion?.e&aluacion<arcial1, oList3lumno>posicion?.e&aluacion<arcial;, oList3lumno>posicion?.promedio(e"rabajo, oList3lumno>posicion?.promedio1inal )2 : : : pri&ate &oid habilitar4otones34.-(4oolean c4uscar, 4oolean c7ue&o, 4oolean cHuardar, 4oolean cEditar, 4oolean cEliminar, 4oolean c.onsultar, 4oolean c.ancelar, 4oolean c*alir) 5 button4uscar.Enabled 8 c4uscar2 button7ue&o.Enabled 8 c7ue&o2 buttonHuardar.Enabled 8 cHuardar2 button-odificar.Enabled 8 cEditar2 buttonEliminar.Enabled 8 cEliminar2 button.onsultar.Enabled 8 c.onsultar2 button.ancelar.Enabled 8 c.ancelar2 button*alir.Enabled 8 c*alir2 : pri&ate &oid limpiar.ajas(e"e to() 5 te t4o 3pellido7ombre."e t 8 @@2 te t4o E&aluacion<arcial1."e t 8 @@2 te t4o E&aluacion<arcial;."e t 8 @@2 te t4o <romedio(e"rabajo."e t 8 @@2 : pri&ate &oid habilitar.ajas(e"e to(4oolean editable) 5 te t4o 3pellido7ombre.Enabled 8 editable2 te t4o E&aluacion<arcial1.Enabled 8 editable2 te t4o E&aluacion<arcial;.Enabled 8 editable2 te t4o <romedio(e"rabajo.Enabled 8 editable2 : pri&ate &oid button4uscar6.licT(object sender, E&ent3rgs e) 5 if (action 88 34.-3ction.3."I)764+*.30) 5 3lumno o3lumno 8 new 3lumno()2 .ontrolador3lumno o.ontrolador3lumno 8 new .ontrolador3lumno()2 int bus!ueda 8 int.<arse(te t4o 3lumno6id."e t)2 o3lumno 8 o.ontrolador3lumno.consultar0egistro(bus!ueda)2 if (o3lumno V8 null) 5 -essage4o .*how(@0egistro e istente VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : else 5 action 8 34.-3ction.3."I)76I7*E0"302 te t4o 3lumno6id.Enabled 8 false2 habilitar.ajas(e"e to(true)2 controlador(eE&entos4otones34.-()2 te t4o 3pellido7ombre.1ocus()2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1RG

Microsoft C# - Enfoque Prctico

: else 5 if (action 88 34.-3ction.3."I)76.)7*+L"3) 5 .ontrolador3lumno o.ontrolador3lumno 8 new .ontrolador3lumno()2 int bus!ueda 8 Int=;.<arse(te t4o 3lumno6id."e t)2 3lumno o3lumno 8 o.ontrolador3lumno.consultar0egistro(bus!ueda)2 if (o3lumno V8 null) 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 set)bjeto3lumno(o3lumno)2 : else 5 -essage4o .*how(@7o se encuentra VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : : : pri&ate &oid button7ue&o6.licT(object sender, E&ent3rgs e) 5 dataHridMiew3lumno..lear*election()2 dataHridMiew3lumno.Enabled 8 false2 te t4o 3lumno6id."e t 8 @@2 limpiar.ajas(e"e to()2 action 8 34.-3ction.3."I)764+*.302 controlador(eE&entos4otones34.-()2 te t4o 3lumno6id.Enabled 8 true2 te t4o 3lumno6id.1ocus()2 : pri&ate &oid buttonHuardar6.licT(object sender, E&ent3rgs e) 5 if(action 88 34.-3ction.3."I)76I7*E0"30) 5 if(-essage4o .*how(@W(esea guardarloX@, @.onfirme el guardado@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes) 5 .ontrolador3lumno o.ontrolador3lumno 8 new .ontrolador3lumno()2 if(o.ontrolador3lumno.insertar0egistro(get)bjeto3lumno())) 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 button7ue&o.1ocus()2 : else 5 -essage4o .*how(@7o se pudo guardar el registro ... VVV@)2 : : else 5 limpiar.ajas(e"e to()2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 if(action 88 34.-3ction.3."I)76-)(I1I.30) 5 if(-essage4o .*how(@Est seguro de guardar los datosX@, @.onfirme el guardado@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes)

Ing. Javier Alberto Manrique Quionez

Pgina 1RJ

Microsoft C# - Enfoque Prctico

5 .ontrolador3lumno o.ontrolador3lumno 8 new .ontrolador3lumno()2 3lumno o3lumno 8 new 3lumno()2 if(o.ontrolador3lumno.modificar0egistro(int.<arse(te t4o 3lumno6id."e t), get)bjeto3lumno())) 5 -essage4o .*how(@)peraci,n e itosa ... VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : else 5 -essage4o .*how(@7o se pudo guardar el registro ...VVV@)2 : : : : : pri&ate &oid button-odificar6.licT(object sender, E&ent3rgs e) 5 if(dataHridMiew3lumno.0ow.ount P8 1) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if(fila*eleccionada V8 F1 UU (te t4o 3lumno6id."e t.Length) P 9) 5 te t4o 3pellido7ombre.1ocus()2 action 8 34.-3ction.3."I)76-)(I1I.302 controlador(eE&entos4otones34.-()2 : else 5 -essage4o .*how(@7o se ha seleccionado un registro ...VVV@)2 : : else 5 -essage4o .*how(@7o e isten registros ...VVV@)2 : : pri&ate &oid buttonEliminar6.licT(object sender, E&ent3rgs e) 5 if(dataHridMiew3lumno.0ow.ount P8 1) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if(fila*eleccionada V8 F1 UU (te t4o 3lumno6id."e t.Length) P 9) 5 if(-essage4o .*how(@Est seguro de eliminar los datosX@, @.onfirme la eliminaci,n@, -essage4o 4uttons.Yes7o, -essage4o Icon.Zuestion) 88 (ialog0esult.Yes) 5 .ontrolador3lumno o.ontrolador3lumno 8 new .ontrolador3lumno()2 3lumno o3lumno 8 new 3lumno()2 int bus!ueda 8 int.<arse(te t4o 3lumno6id."e t)2 o3lumno 8 o.ontrolador3lumno.consultar0egistro(bus!ueda)2 if(o3lumno V8 null) 5 o3lumno 8 get)bjeto3lumno()2 if(o.ontrolador3lumno.eliminar0egistro(bus!ueda)) 5 -essage4o .*how(@*e elimin, el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 actuali'ar(ataHridMiew3lumno()2 : else 5 -essage4o .*how(@7o se pudo eliminar el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72

Ing. Javier Alberto Manrique Quionez

Pgina 1RL

Microsoft C# - Enfoque Prctico

controlador(eE&entos4otones34.-()2 : : else 5 -essage4o .*how(@7o se pudo eliminar el registro ...VVV@)2 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 : : else 5 -essage4o .*how(@*e tiene !ue seleccionar un registro ...VVV@)2 : : else 5 -essage4o .*how(@7o e isten registros ...VVV@)2 : : pri&ate &oid button.ancelar6.licT(object sender, E&ent3rgs e) 5 action 8 34.-3ction.7)63."I)72 controlador(eE&entos4otones34.-()2 button7ue&o.1ocus()2 : pri&ate &oid button*alir6.licT(object sender, E&ent3rgs e) 5 (ispose()2 : pri&ate &oid dataHridMiew3lumno6-ouse.licT(object sender, -ouseE&ent3rgs e) 5 if(e..licTs 88 1 UU dataHridMiew3lumno.0ow.ount P8 1) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde 2 if(fila*eleccionada V8 F1) 5 3lumno o3lumno*eleccionado 8 (3lumno)dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2 : : : pri&ate &oid limpiar(ataHridMiew3lumno() 5 dataHridMiew3lumno.0ows..lear()2 : pri&ate &oid controlador(eE&entos4otones34.-() 5 if (action 88 34.-3ction.7)63."I)7) 5 actuali'ar(ataHridMiew3lumno()2 te t4o 3lumno6id."e t 8 @@2 limpiar.ajas(e"e to()2 te t4o 3lumno6id.Enabled 8 false2 habilitar.ajas(e"e to(false)2 habilitar4otones34.-(false, true, false, true, true, true, false, true)2 dataHridMiew3lumno.Enabled 8 true2 button7ue&o.1ocus()2 :

Ing. Javier Alberto Manrique Quionez

Pgina 1RO

Microsoft C# - Enfoque Prctico

else 5 if (action 88 34.-3ction.3."I)764+*.30) 5 habilitar.ajas(e"e to(false)2 limpiar.ajas(e"e to()2 habilitar4otones34.-(true, false, false, false, false, false, true, false)2 : else 5 if (action 88 34.-3ction.3."I)76I7*E0"30) 5 limpiar.ajas(e"e to()2 te t4o 3lumno6id.Enabled 8 true2 habilitar4otones34.-(true, false, true, false, false, false, true, false)2 : else 5 if (action 88 34.-3ction.3."I)76-)(I1I.30) 5 habilitar.ajas(e"e to(true)2 habilitar4otones34.-(false, false, true, false, false, false, true, false)2 te t4o 3lumno6id.Enabled 8 false2 : else 5 if (action 88 34.-3ction.3."I)76ELI-I730) 5 actuali'ar(ataHridMiew3lumno()2 : else 5 if (action 88 34.-3ction.3."I)76.)7*+L"3) 5 habilitar.ajas(e"e to(false)2
habilitar4otones34.-(true, false, false, false, false, false, true, false)2

te t4o 3lumno6id.Enabled 8 true2 : : : : : : : pri&ate &oid button.alcular<romedio1inal.on.ommand6.licT(object sender, E&ent3rgs e) 5 .ontrolador3lumno o.ontrolador3lumno 8 new .ontrolador3lumno()2 o.ontrolador3lumno.calcular<romedio1inal.on.ommand()2 actuali'ar(ataHridMiew3lumno()2 : pri&ate &oid dataHridMiew3lumno6Ce$(own(object sender, Ce$E&ent3rgs e) 5 if(e.Ce$.ode 88 Ce$s.(own) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde B 12 if(fila*eleccionada P8 dataHridMiew3lumno.0ow.ount) 5 fila*eleccionada 8 fila*eleccionada F 12 : else 5 3lumno o3lumno*eleccionado 8 (3lumno)dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2 : : if(e.Ce$.ode 88 Ce$s.+p) 5 int fila*eleccionada 8 dataHridMiew3lumno..urrent0ow.Inde F 12 if(fila*eleccionada S8 F1)

Ing. Javier Alberto Manrique Quionez

Pgina 1RQ

Microsoft C# - Enfoque Prctico

5 fila*eleccionada 8 fila*eleccionada B 12 : else 5 3lumno o3lumno*eleccionado 8 (3lumno)dataHridMiew3lumno.0ows>fila*eleccionada?..ells>1?.Malue2 set)bjeto3lumno(o3lumno*eleccionado)2 : : : pri&ate &oid buttonImprimir6.licT(object sender, E&ent3rgs e) 5 1ormularioImprimir o1ormularioImprimir8new 1ormularioImprimir()2 o1ormularioImprimir.*how()2 : pri&ate &oid button.onsultar6.licT(object sender, E&ent3rgs e) 5 dataHridMiew3lumno..lear*election()2 limpiar.ajas(e"e to()2 te t4o 3lumno6id."e t 8 @@2 te t4o 3lumno6id.Enabled 8 true2 te t4o 3lumno6id.1ocus()2 action 8 34.-3ction.3."I)76.)7*+L"32 controlador(eE&entos4otones34.-()2 : : :

Figura :.1>: C'%ig$ % #a A"#i&a&i'( 1 C#a) F$r!u#ari$I!"ri!ir@3i)+aC using *$stem2 using *$stem..ollections.Heneric2 using *$stem..omponent-odel2 using *$stem.(ata2 using *$stem.(rawing2 using *$stem.Lin!2 using *$stem."e t2 using *$stem.Aindows.1orms2 using *$stem.(ata.*!l.lient2 using 34.-$-M..-odelo.(atos2 using 34.-$-M..Mista2 namespace Mista 5 public partial class 1ormularioImprimir: 1orm 5 public 1ormularioImprimir() 5 Initiali'e.omponent()2 : pri&ate &oid 1ormularioImprimir6Load(object sender, E&ent3rgs e)

Ing. Javier Alberto Manrique Quionez

Pgina 1RR

Microsoft C# - Enfoque Prctico

5 poblar0eporte()2 : pri&ate &oid poblar0eporte() 5 DD(efinimos las sentencias las cuales seleccionan los datos string sentencia 8 @select _ from 3lumno@2 DD *e crea un conjunto de datos del tipo (ata*et3lumno (ata*et3lumno o(ata*et<roducto 8 new (ata*et3lumno()2 tr$ 5 DD *e solicita $ abre una cone i,n a base de datos *!l.onnection o*!l.onnection 8 3dministrador(e.one ion.get.one ion()2 o*!l.onnection.)pen()2 DDcreamos el adaptador de datos *!l(ata3dapter o*!l(ata3dapter 8 new *!l(ata3dapter(sentencia, o*!l.onnection)2 DD *e pobla las tablas del conjunto de datos tipeado o*!l(ata3dapter.1ill(o(ata*et<roducto, @3lumno@)2 DD3hora poblamos el informe $ lo mostramos .r$stal0eport3lumno o.r$stal0eport3lumno 8 new .r$stal0eport3lumno()2 o.r$stal0eport3lumno.*et(ata*ource(o(ata*et<roducto)2 cr$stal0eportMiewer3lumno.0eport*ource 8 o.r$stal0eport3lumno2 o*!l.onnection..lose()2 : catch(E ception e) 5 -essage4o .*how(e.-essage)2 : : : :

Figura :.11: F$r!u#ari$ % #a a"#i&a&i'( @R "$r+ % a#u!($)C

Figura :.1*: C'%ig$ % #a A"#i&a&i'( 1 Pr$gra!a "ri(&i"a# using *$stem2

Ing. Javier Alberto Manrique Quionez

Pgina ;99

Microsoft C# - Enfoque Prctico

using *$stem.Aindows.1orms2 using &ista2 namespace 34.-$-M. 5 static class <rogram 5 static &oid -ain() 5 3pplication.EnableMisual*t$les()2 3pplication.*et.ompatible"e t0endering(efault(false)2 3pplication.0un(new 1ormulario34.-$-M.$4(())2 : :
1

Figura :.1-: C'%ig$ SPL "ara &r a&i'( % ?a) % %a+$) %?A#u!($ 6 +a?#a) A#u!($

Figura :.1.: Ba) % %a+$) ( # A%!i(i)+ra%$r % # Mi&r)$<+ SPL S r5 r *>>7.

Ing. Javier Alberto Manrique Quionez

Pgina ;91

Microsoft C# - Enfoque Prctico

Figura :.10: C'%ig$ SPL "ara #a ?a) % %a+$) %?A#u!($B +a?#a A#u!($ 6 #$) "r$& %i!i (+$) a#!a& (a%$)
USE MASTER IF EOISTS ( SELECT name FROM s$sdatabases 8LERE name 8 fdb3lumnof ) DROP DATABASE db3lumno GO CREATE DATABASE dbalumno GO USE db3lumno GO CREATE TABLE 3lumno ( alumno6id int not null, apellido7ombre char(=1), e&aluacion<arcial1 float, e&aluacion<arcial; float, promedio(e"rabajo float, promedio1inal float ) GO ALTER TABLE 3lumno ADD CONSTRAINT <C63lumno6id PRIMARH YEH CLUSTERED (alumno6id) GO

CREATE PROCEDURE I() r+arA#u!($


galumno6id gapellido7ombre int, char(=1),

Ing. Javier Alberto Manrique Quionez

Pgina ;9;

Microsoft C# - Enfoque Prctico


ge&aluacion<arcial1 float, ge&aluacion<arcial; float, gpromedio"rabajo float, gpromedio1inal float

AS BEGIN INSERT INTO >db3lumno?.>dbo?.>3lumno? (>alumno6id?, >apellido7ombre?, >e&aluacion<arcial1?, >e&aluacion<arcial;?, >promedio(e"rabajo?, >promedio1inal?) 3ALUES ( galumno6id,
gapellido7ombre, ge&aluacion<arcial1, ge&aluacion<arcial;, gpromedio"rabajo, gpromedio1inal)2

END GO CREATE PROCEDURE C$()u#+arA#u!($ galumno6id int AS BEGIN SELECT >alumno6id?, >apellido7ombre?, >e&aluacion<arcial1?, >e&aluacion<arcial;?, >promedio(e"rabajo?, >promedio1inal? FROM 3lumno 8LERE 3lumno.alumno6id8galumno6id2 END GO CREATE PROCEDURE M$%i<i&arA#u!($
galumno6id int, gapellido7ombre char(=1), ge&aluacion<arcial1 float, ge&aluacion<arcial; float, gpromedio"rabajo float, gpromedio1inal float

AS BEGIN UPDATE >db3lumno?.>dbo?.>3lumno? SET


>apellido7ombre? >e&aluacion<arcial1? >e&aluacion<arcial;? >promedio(e"rabajo? >promedio1inal? 8 gapellido7ombre, 8 ge&aluacion<arcial1, 8 ge&aluacion<arcial;, 8 gpromedio"rabajo, 8 gpromedio1inal

8LERE >alumno6id? 8 galumno6id END GO CREATE PROCEDURE Li)+arA#u!($) AS BEGIN SELECT >alumno6id?,
>apellido7ombre?, >e&aluacion<arcial1?, >e&aluacion<arcial;?,

Ing. Javier Alberto Manrique Quionez

Pgina ;9=

Microsoft C# - Enfoque Prctico


>promedio(e"rabajo?, >promedio1inal?

FROM 3lumno2 END GO CREATE PROCEDURE E#i!i(arA#u!($ galumno6id int AS BEGIN DELETE FROM 3lumno 8LERE 3lumno.alumno6id8galumno6id2 END GO CREATE PROCEDURE Ca#&u#$Pr$! %i$Fi(a# AS BEGIN UPDATE >dbo?.>3lumno? SET promedio1inal8(e&aluacion<arcial1Be&aluacion<arcial;Bpromedio(e"rabajo)D=2 END GO

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el nombre de FormularioABCM-MVC $ Procedimientos Almacenados.

Ing. Javier Alberto Manrique Quionez

Pgina ;9G

Microsoft C# - Enfoque Prctico

BIBLIOGRAFA
Enciclopedia de *icrosof# +isual ,-. Fco /avier ,eballos. Alfaome0a. !ercera Edicin. 2112. *e&ico .omo programar en `a&a. (eitel, Nar&e$ -.2 (eitel, <aul `. <earson Education. Jta Edici,n. ;99G. -% ico. (esarrollo de aplicaciones en `a&a. .asta#eda Le,n, `uan `os%. 0itisa Hraff. 1ra Edici,n. ;99O. Lima. J=L pginas. Estructura de datos en `a&a: .ompatible con `a&a ;. 3llen Aeiss, -arT. <earson Education. 1ra Edici,n. ;999. -adrid. `a&a ;: .urso de programaci,n. .eballos *ierra, 1rancisco `a&ier. 3lfaomega Hrupo Editor. ;da Edici,n. ;99=. -% ico. <iensa en `a&a. EcTel, 4ruce. <earson Education. ;da Edici,n. ;99;. -adrid. <roblemas resueltos de programaci,n en `a&a. <%re' -enor, `os% -arEa2 .arretero <%re', `ess2 HarcEa .arballeira, 1%li . "homson Learning. 1ra Edici,n. ;99=. Espa#a. <rogramaci,n en `a&a ;: 3lgoritmos, estructuras de datos $ programaci,n orientada a objetos. `o$anes 3guilar, Luis2 hahonero -artEne', Ignacio. -cHrawFNill Interamericana. 1ra Edici,n. ;99;. Espa#a.

Ing. Javier Alberto Manrique Quionez

Pgina ;9J

Microsoft C# - Enfoque Prctico

ANEXO N01
3 continuaci,n se presentan los comandos bsicos de base de datos del -icrosoft *ZL *er&er 0;. CREATE DATABASES .rea una base de datos. Ejemplo: create database dbalumno USE Indica al -icrosoft *ZL !ue use una base de datos especificada. Ejemplo: u) %?a#u!($ CREATE TABLE .rea una tabla de base de datos. Ejemplo: create table alumno + alumno#id apellido)ombre e"aluacionParcial0 e"aluacionParcial2 promedioDe'raba3o promedioFinal , int not null. c!ar+/0,. 1loat. 1loat. 1loat. 1loat

INSERT Inserta registros en la tabla de base de datos. Ejemplo2 insert into alumno + alumno#id. apellido)ombre. e"aluacionParcial0. e"aluacionParcial2. promedioDe'raba3o. promedioFinal , "alues + 0. 4Arias. Ale(5. 00. 00. 00.00 , insert into alumno + alumno#id. apellido)ombre. e"aluacionParcial0. e"aluacionParcial2. promedioDe'raba3o. promedioFinal , "alues + 2. 4Barreto. B$ron5. 02. 02. 02.02 , SELECT Misuali'a los registros de una tabla. Ejemplo: select 6 1rom alumno ----7 <ara &isuali'ar todos los registros con todos sus campos select alumno#id. apellido)ombre 1rom alumno ----7 <ara &isuali'ar los campos alumno6id $ apellido7ombre de la tabla alumno , select count +6, 1rom alumno ----7 <ara &isuali'ar el nmero de registros almacenados en la tabla alumno. select 1rom alumno order b$ alumno#id ----7 <ara &isuali'ar los datos ordenados por el campo alumno6id UPDATE 3ctuali'a datos de registros en una tabla de base de datos. Ejemplo. update alumno set e"aluacionParcial 8 09 :!ere alumno#id 8 0 La clusula where permite condicionar la actuali'aci,n de un conjunto de registros especEficos. *i no se especifica un registro determinado, se actuali'an todos los registros.

DELETE

Ing. Javier Alberto Manrique Quionez

Pgina ;9L

Microsoft C# - Enfoque Prctico

Elimina registros delete 1rom alumno :!ere alumno#id 8 0 ALTER TABLE . . . DROP COLUMN . . . Elimina una columna de la tabla. Ejemplo: alter table tAlumno drop column promedioDe'raba3o ALTER TABLE . . . ADD COLUMN . . . 3grega una columna de la tabla. Ejemplo: alter table talumno add promedioDe'raba3o int

ALTER TABLE . . . MODIFH COLUMN . . . -odifica el tipo de dato de una columna. Ejemplo: alter table talumno alter column promedioDe'raba3o 1loat ALTER TABLE . . . CLANGE COLUMN . . . -odifica el nombre de una columna. Ejemplo: E;EC sp#rename <tAlumno.apellido)ombre<. <ap< E;EC sp#rename <tAlumno.ap<. <apellido)ombre< ALTER TABLE . . . ALTER COLUMN . . . -odifica una columna de 7+LL a not 7+LL A='E 'AB=E tAlumno A='E C%=>M) alumno#id int not )>==

ALTER TABLE . . . ADD CONSTRAINT . . . .rea un Endice de bs!ueda en la tabla utili'ando un campo cla&e. Ejemplo: alter table talumno add constraint p?#alumno primar$ ?e$ +alumno#id, SELECT TABLEZNAME FROM INFORMATIONZSCLEMA.TABLES <ermite &er las tablas de una base de datos. Ejemplo >&E DbAlumno &elect table#name 1rom in1ormation#sc!ema.tables &elect table#name. column#name 1rom in1ormation#sc!ema.columns DROP TABLE <ermite borrar una tabla de base de datos drop table talumno DROP DATABASE 4orra una base de datos. Ejemplo: drop database dbalumno

Ing. Javier Alberto Manrique Quionez

Pgina ;9O

Potrebbero piacerti anche