Académique Documents
Professionnel Documents
Culture Documents
Orientada a
Objetos I
2
ÍNDICE
Presentación 5
Red de contenidos 7
Unidad de aprendizaje 1
INTRODUCCION A LA PROGRAMACION ORIENTADA A OBJETOS 9
1.1 Tema 1 : Conceptos básicos de programación orientada a objetos 11
1.1.1. : Manejo de una clase, definir propiedades, métodos y 14
eventos
1.1.2. : Definir un constructor 15
1.1.3. : Definición de sobrecarga de un método 16
1.1.4. : Manejo de un objeto: instancia de una clase 16
1.2 Tema 2 : Herencia y Polimorfismo 37
1.2.1. : Definición de herencia 37
1.2.2. : Implementando una clase heredada 37
1.2.3. : Definición de polimorfismo 38
Unidad de aprendizaje 2
MANEJO DE COLECCIONES 57
2.1 Tema 3 : Manejo de colecciones y enumeradores 59
2.1.1. : Colecciones en .NET Framework 59
2.1.1.1 : Manejo de la colección ArrayList 60
2.1.1.2 : Manejo de la colección List(Of) 61
2.2 Tema 4 : LINQ y expresiones Lambda 79
2.2.1. : Lenguaje integrado de consultas 81
2.2.1.1 : LINQ, definición y claúsulas 81
2.21.2 : LINQ y consulta de datos 83
2.2.1.3 : Expresiones lambda, manejo de consultas 84
Unidad de aprendizaje 3
PROCESOS ASINCRONOS 99
3.1 Tema 5 : Procesos Asíncronos 103
3.1.1. : Manejo de un Thread: propiedades y métodos 105
3.1.2. : Manejo de una clase Thread 106
3.1.3 : Manejo de BackgroundWorker 108
Unidad de aprendizaje 4
ADMINISTRACIÓN DE DATOS 121
PRESENTACIÓN
RED DE CONTENIDOS
UNIDAD
1
INTRODUCCIÓN A LA
PROGRAMACION ORIENTADA A
OBJETOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
1.1. Tema 1: Conceptos básicos de programación orientada a objetos
1.1.1. Manejo de una clase, definir propiedades, métodos y eventos
1.1.2. Definición de un constructor
1.1.3. Definición de sobrecarga de un método.
1.1.4. Manejo de un objeto: instancia de una clase
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan los laboratorios de esta semana
Los alumnos desarrollan aplicaciones con los controles básicos
Los alumnos desarrollan aplicaciones utilizando la metodología orientada
a objetos: clases y objetos.
Lenguajes de compilación
Biblioteca de clases de .Net
CLR (Common Language Runtime)
adaptados a .Net, desde los más conocidos como C# (C Sharp), Visual Basic o
C++ hasta otros lenguajes menos conocidos como Perl o Cobol.
Ensamblados
Uno de los mayores problemas de las aplicaciones actuales es que en muchos
casos tienen que tratar con diferentes archivos binarios (DLL´s), elementos de
registro, conectividad abierta a bases de datos (ODBC), etc.
Para gestionar el uso que hacen la aplicaciones de los ensamblados .Net utiliza
la llamada caché global de ensamblados (GAC, Global Assembly Cache). Así,
.Net Framework puede albergar en el GAC los ensamblados que puedan ser
usados por varias aplicaciones e incluso distintas versiones de un mismo
ensamblado, algo que no era posible con el anterior modelo COM.
Herencia
Encapsulación
Polimorfismo
Herencia
Esta es la característica más importante de la Programación Orientada a los
Objetos. Según la propia documentación de Visual Studio .NET:
Una relación de herencia es una relación en la que un tipo (el tipo derivado) se
deriva de otro (el tipo base), de tal forma que el espacio de declaración del tipo
derivado contiene implícitamente todos los miembros de tipo no constructor del
tipo base.
Encapsulación
“La encapsulación es la capacidad de contener y controlar el acceso a un grupo
de elementos asociados. Las clases proporcionan una de las formas más
comunes de encapsular elementos."
Cuando usamos las clases, éstas tienen una serie de características (los datos
que manipula) así como una serie de comportamientos (las acciones a realizar
con esos datos). La encapsulación es esa capacidad de la clase de ocultarnos
sus interioridades para que sólo veamos lo que tenemos que ver, sin tener que
preocuparnos de cómo está codificada para que haga lo que hace...
simplemente nos debe importar que lo hace.
Polimorfismo
"El polimorfismo se refiere a la posibilidad de definir múltiples clases con
funcionalidad diferente, pero con métodos o propiedades denominados de
forma idéntica, que pueden utilizarse de manera intercambiable mediante
código cliente en tiempo de ejecución."
Dicho de otra manera, puede tener múltiples clases que se pueden utilizar de
forma intercambiable, si bien cada clase implementa las mismas propiedades o
los mismos métodos de maneras diferentes.
Atributos
Los atributos están asociados a clases y objetos, y describen la clase o
el objeto de alguna manera. Las entidades de la vida real están a
menudo descritas con palabras que indican características estables. La
mayoría de los objetos físicos tienen características tales como forma,
peso, color y tipo de material. Las personas tienen características como
fecha de nacimiento, padres, nombre y color de los ojos.
Propiedades
Las propiedades son métodos que permiten acceder o recuperar los
valores de los atributos y se implementan mediante los procedimientos
Get y Set
Operaciones y Métodos
Un objeto encapsula datos (representados como una colección de
atributos) y algoritmos que procesan estos datos. Estos algoritmos son
llamados operaciones o métodos y pueden ser vistos como módulos en
un sentido convencional. Los métodos se definen como procedimientos
o funciones
Eventos
Los eventos son el medio a través del cual interactúan los objetos. Un
evento estimula la ocurrencia de cierto comportamiento en el objeto
receptor. El comportamiento se realiza cuando se ejecuta un método.
destino.operación (parámetros)
Definiendo un atributo
Tras agregar una nueva clase a nuestro proyecto, podemos agregar
atributos a la clase. Cuando agregamos atributos a una clase,
especificamos el nivel de acceso estableciendo los modificadores de
acceso.
Alcance Descripción
Public Acceso Total
Private Acceso solo a la Clase
Protected Acceso solo a clases heredadas
Definiendo un método
Para agregar un método a la clase:
Definiendo un constructor
Para inicializar los atributos de la clase
public Cuenta()
{
balance = 0;
public Cuenta(double b)
{
balance = b;
}
Creando la instancia
Para ejecutar los métodos y utilizar las propiedades de una clase,
debemos crear una instancia de la clase.
Para crear una instancia de una clase, declaramos una variable del tipo de
la clase y utilizamos la palabra clave New, como se muestra en la siguiente
línea de código:
LABORATORIO 1.1
Manejo de Clases y Objetos
La empresa Tapicería “FAST” nos pide realizar un programa que permita registrar la
Venta de Muebles que la empresa ofrece a los clientes.
IDE de Visual
Studio 2013
Selecciona la opción
Nuevo Proyecto para
crear
2. Creando la Clase
Para agregar una clase al proyecto, desde la opción de menú PROYECTO, selecciona
la opción Agregar clase, tal como se muestra en la gráfica
1. Selecciona la
opción AGREGAR
1. Selecciona la opción
CLASE
2. Asigne el nombre a la
clase: VENTA
Definición de la clase
VENTA
Programación
Instanciar la
clase Venta()
Ejecutar los
métodos
Ingrese los datos: número del documento, fecha, nombre del cliente, descripción del
mueble y precio. Al presionar el botón Procesar se visualiza los resultados.
LABORATORIO 1.2
Manejo de Constructores y sobrecarga de métodos
La empresa de Transportes “FAST DRIVER” solicita un programa que permita registrar
el transporte de carga pesada a provincia.
La empresa cobra por cada TM de carga S/. 150; el costo del transporte es el producto
de la tarifa por TM por la cantidad de TM de la carga. Por concepto de seguro cobrará
el 2% del costo de transporte; el Monto es la suma de costo de transporte y el seguro.
Se aplicará el IGV que representa el 18% del Monto, donde el Monto Total se obtiene
de la suma del IGV y el Monto.
Se pide:
Diseño de la Clase, sus atributos, propiedades, métodos y el constructor
Diseñar el Formulario, agregando sus controles y programación.
1. Selecciona la
opción AGREGAR
2. Selecciona la
opción CLASE
Diseño de la Clase
En la ventana Nuevo Elemento, seleccione el Item Clase
Asigne un nombre a la clase: Transporte
Presione el botón AGREGAR
1. Selecciona la opción
CLASE
2. Asigne el nombre a la
clase: TRANSPORTE
Definición de la clase
TRANSPORTE
Definimos los
atributos y
propiedades de la
clase
public Transporte(){ }
Definimos el constructor para
inicializar los atributos precio y
TM
Programación
A continuación programa el evento del botón Procesar: void btnProcesar_Click():
Instanciar la clase
Transporte()
Presione F5 para ejecutar el proyecto. Ingrese los datos: número del documento,
fecha, nombre del cliente, descripción de la carga y la cantidad de TM. Al presionar el
botón Procesar se visualiza los resultados
LABORATORIO 1.3
Ejercicio Propuesto
La distribuidora “Celima”” EIRL solicita un programa que permita registrar el pago de
Haberes de los empleados.
Dentro del formulario instanciar la clase, ingrese los datos y visualice los resultados.
Resumen
El Framework de .Net es una infraestructura sobre la que se reúne todo un
conjunto de lenguajes y servicios que simplifican enormemente el desarrollo de
aplicaciones. Mediante esta herramienta se ofrece un entorno de ejecución
altamente distribuido, que permite crear aplicaciones robustas y escalables.
Los principales componentes de este entorno son:
o Lenguajes de compilación
o Biblioteca de clases de .Net
o CLR (Common Language Runtime)
La programación orientada a objetos puede describirse como el conjunto de
disciplinas que desarrollan y modelizan software que facilitan la construcción de
sistemas complejos a partir de componentes
Todos los lenguaje basados en objetos, deben cumplir los siguientes requisitos:
o Herencia
o Encapsulación
o Polimorfismo
Una clase es simplemente una representación de un tipo de objeto. Una clase
define las características de un objeto, incluyendo las propiedades que definen los
tipos de datos que ese objeto puede contener y los métodos que describen el
comportamiento del objeto.
Un objeto es una instancia específica de una clase, e incluye las características de
esa clase.
Las abstracciones de datos (atributos) que describen la clase están encerradas
por una “muralla” de abstracciones procedimentales (llamadas operaciones,
métodos y eventos) capaces de manipular los datos de alguna manera.
Los atributos están asociados a clases y objetos, y describen la clase o el objeto
de alguna manera.
Las propiedades son métodos que permiten acceder o recuperar los valores de los
atributos y se implementan mediante los procedimientos Get y Set
Un objeto encapsula datos (representados como una colección de atributos) y
algoritmos que procesan estos datos. Estos algoritmos son llamados operaciones o
métodos y pueden ser vistos como módulos en un sentido convencional.
Los eventos son el medio a través del cual interactúan los objetos. Un evento
estimula la ocurrencia de cierto comportamiento en el objeto receptor.
Para inicializar los atributos los nuevos objetos se controla utilizando constructores.
Un constructor es un método que permite inicializar los atributos de una clase.
Para ejecutar los métodos y utilizar las propiedades de una clase, debemos crear
una instancia de la clase.
Para crear una instancia de una clase, declaramos una variable con el nombre de
la clase.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
htm http://support.microsoft.com/kb/307368/es
http://msdn.microsoft.com/es-pe/library/dd460654.aspx
UNIDAD
1
INTRODUCCIÓN A LA
PROGRAMACION ORIENTADA A
OBJETOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Características
Reuso del código: permite compartir atributos y métodos
El compilador es el que hace la mayor parte del trabajo
Es una parte integral del .NET
Visual C# soporta herencia simple a nivel de clase, es decir, una
clase únicamente puede heredar de una sola clase base y herencia
de múltiples clases.
Por ejemplo, el tipo impositivo de un distrito podría ser distinto del tipo
impositivo de una región. Las clases que hereden de ImpuestoBase tendrán
un método CalcularImpuesto, pero el modo como se calcule realmente el
impuesto podría variar en cada una de las clases derivadas.
Impuesto
CalcularImpuesto( )
ImpuestoDistrito ImpuestoRegion
CalcularImpuesto( ) CalcularImpuesto( )
Una clase se puede heredar de esta interfaz utilizando dos puntos en vez de
utilizar la palabra clave Implements.
LABORATORIO 2.1
Manejo de Clases Heredadas
Las empresas de producción necesitaban trasladar su materia prima a provincia y, es
por ello que se crean las empresas de Transportes las cuales se dedican al traslado
de la materia prima cobrando por ello un flete: costo de la tarifa por la cantidad de
Toneladas Métricas (TM). Estas empresas de transporte registraban el nombre del
Destinatario, la dirección del destino (Departamento del país) y la cantidad de TM que
trasladaban, la tarifa era estándar: S/.150 por TM.
La empresa IVOVIC está constituida bajo el concepto del costo de la tarifa única.
Clase Transporte,
representa la clase
BASE
Selecciona la opción
Agregar Clase
1. Selecciona la opción
CLASE
2. Asigne el nombre a la
clase: TRANSPORTES
Constructor de la clase,
inicializa los atributos
Para concluir defina el método Flete() la cual retorna el producto de la tarifa por las
toneladas métricas de la materia prima
Asigne el nombre a
la clase: IVOVIC
Definición de la clase
IVOVIC como clase
heredada de la clase
Transporte
ComboBox, (Name):
cbodestino
Selecciona la opción
Defina la instancia de
la clase IVOVIC
llamada IV
Ingreso de datos a
través de las
propiedades
Visualiza los
resultados
Asigne el nombre a la
clase: LEONIDAS
Defina la clase LEONIDAS como clase heredada de la clase TRANSPORTE, tal como
se muestra.
Definición de la clase
LEONIDAS que hereda de
la clase Transportes
En la Clase LEONIDAS debe implementar métodos para calcular la tarifa por destino,
el seguro y el Monto
Método Tarifa()
retorna la tarifa
según el destino
TextBox, (Name):
txtcliente
ComboBox, (Name):
cbodestino
TextBox, (Name):
txttarifa
TextBox, (Name):
txtFlete
TextBox, (Name):
txtSeguro
TextBox, (Name):
txtMonto
Defina la instancia de la
clase LEONIDAS
Ingreso de datos a
través de las
propiedades
LABORATORIO 2.2
Herencia y Polimorfismo
Las empresas Fotocopiadoras son empresas de Servicios que se dedican a realizar el
proceso de fotocopiado al por mayor.
Realizar:
Diseñe la Clase Base FOTOCOPIAS definiendo sus atributos, propiedades,
métodos y el constructor.
Defina la Clase Derivada FULL COPY la cual permita sobrescribir el cálculo del
importe
Diseñar el Formulario para FULL COPY y programación sus controles.
Clase FULLCOPY,
representa la clase
DERIVADA de la clase
Base FOTOCOPIAS
Asigne el nombre a
la clase: Fotocopia
Definición de los
atributos y
propiedades de la
clase Transporte
Defina el constructor,
inicializamos el
atributo tarifa y
cantidad
Defina la función Monto, esta función podrá ser sobrescrita por las clases derivadas a
través de la palabra clave virtual.
Asigne el nombre a
la clase: FULLCOPY
Definición de la clase
FULLCOPY que hereda de la
clase Fotocopias
Para trabajar con el tamaño del documento, defina el atributo tipo de tipo String. A
continuación, defina el método Monto() que permite realizar un nuevo cálculo.
TextBox, (Name):
txtcliente
TextBox, (Name):
txtDescripcion
ComboBox, (Name):
cboTipo
TextBox, (Name):
txtCantidad
TextBox, (Name):
txttarifa
TextBox, (Name):
txtMonto
Defina la instancia de la
clase FULLCOPY
Presione F5, ingrese los datos: nombre del cliente, descripción del documento, el tipo
de documento y la cantidad, presione el botón Procesar y se visualizan los resultados.
Resumen
En la programación orientada a objetos, podemos compartir las características de
una clase base en otras clases derivadas de la clase base. Esto se denomina
herencia.
La herencia puede utilizarse para derivar una clase de una clase existente. La
clase derivada puede heredar todas las propiedades, métodos, miembros de datos,
eventos y controladores de eventos de la clase base, facilitando la reutilización de
la clase base por toda la aplicación.
La palabra clave Inherits se utiliza para definir una clase derivada que hereda de
una clase base.
La palabra clave MustInherit se utiliza para definir clases que no están pensados
para ser utilizados directamente como objetos instanciados. La clase resultante
debe ser heredada como una clase base para utilizarla en el objeto de una clase
derivada instanciada.
La palabra clave NotInheritable se utiliza para definir una clase que no puede
utilizarse como clase base para herencia. Si otra clase intenta heredar de esta
clase, se generará un error de compilación.
Utilizamos el acceso Protected para limitar el ámbito de una propiedad, método,
miembro de datos, evento o controlador de eventos a la clase que los define y
cualquier clase derivada basada en esa clase base.
Polimorfismo hace referencia a la capacidad de definir múltiples clases con
diferentes funcionalidades pero con métodos o propiedades de nombres idénticos
que pueden utilizarse de forma intercambiable por el código cliente en tiempo de
ejecución.
Para especificar que se quiere especializar o sobreescribir un método en una
nueva clase se declara este en la clase hija de la misma forma que está declarado
en la clase padre y se le coloca el modificador “Override”.
Los métodos virtuales son declarados en Visual C# con el modificador virtual.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-es/library/ms173149.aspx
http://msdn.microsoft.com/es-pe/library/ms228387(v=vs.90).aspx
http://support.microsoft.com/kb/307205/es
http://msdn.microsoft.com/es-es/library/ms173152.aspx
UNIDAD
2
MANEJO DE COLECCIONES
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
SYSTEM.COLLECTIONS
Las clases del espacio de nombres System.Collections no almacenan los
elementos como objetos de un tipo específico, sino como objetos de tipo
Object.
Clase Descripción
ArrayList Implementa la interfaz IList utilizando una matriz cuyo
tamaño aumenta dinámicamente cuando es necesario.
Stack Representa una colección simple no genérica de objetos
último en entrar, primero en salir (LIFO).
Queue Representa una colección de objetos primero en entrar,
primero en salir (FIFO).
HashTable Representa una colección de pares de clave y valor que
se organizan por código hash de la clave.
BitArray Administra una matriz compacta de valores de bit, que
se representan como valores Boolean, donde True
indica que el bit está activado (1) y False indica que el
bit está desactivado (0).
SYSTEM.COLLECTIONS.GENERIC
Los espacios de nombres System.Collections.Generic proporcionan tipos
genéricos que permiten crear colecciones con establecimiento inflexible de
tipos y especificar el tipo de datos de los elementos cuando se crean.
Clase Descripción
Dictionary Representa una colección de pares de clave y valor que
se organizan por claves.
Stack Representa una colección simple no genérica de objetos
último en entrar, primero en salir (LIFO).
Queue Representa una colección de objetos primero en entrar,
primero en salir (FIFO).
SortedList Representa una colección de pares de clave y valor que
se ordenan por claves según la implementación de la
interfaz IComparer asociada.
List(Of) Representa una lista de objetos fuertemente tipados a la
que se puede obtener acceso por índice. Proporciona
métodos para buscar, ordenar y manipular listas.
SYSTEM.COLLECTIONS.SPECIALIZED
El espacio de nombres System.Collections.Specialized proporciona
clases de colección especializadas y con establecimiento inflexible de tipos,
como colecciones de sólo cadena y diccionarios híbridos y de lista
vinculada.
Clase Descripción
HybridDictionary Implementa la interfaz IDictionary utilizando
ListDictionary mientras la colección es pequeña; a
continuación, cambia a Hashtable cuando la
colección aumenta.
OrderedDictionary Representa una colección de pares de clave y valor
que se ordenan por claves o por índices.
StringDictionary Implementa una tabla hash con la clave y el valor
con establecimiento inflexible de tipos de forma que
sean cadenas en lugar de objetos.
Método Descripción
AddRange Agrega los elementos de ICollection al final de
ArrayList.
Método Descripción
Add Agrega un objeto al final de List(Of T).
Cada clave de una colección Dictionary debe ser única de acuerdo con el
comparador de igualdad predeterminado.
Método Descripción
Add Agrega la clave y el valor especificados al diccionario
Método Descripción
Comparer Se utiliza para determinar la igualdad de claves para el
diccionario
colección Dictionary
Método Descripción
Add Agrega la clave y el valor especificados a la colección
Método Descripción
Count Obtiene el número de pares clave/valor incluidos en la
colección Dictionary
LABORATORIO 3.1
Manejo de datos en un ArrayList
Se desea implementar un programa que permita registrar los libros que se encuentran
en la biblioteca Nacional. En este proceso debemos ingresar: el código del libro, el
titulo, la materia del libro, el año de edición del libro y el nombre del autor.
Se pide:
1. Defina una clase llamada Libros que esté conformada por sus atributos,
propiedades y métodos.
2. Defina un ArrayList que permita almacenar los libros
3. Programe el botón Agregar para Agregar Libros
4. Programe el botón Listado para Listar los Libros.
AGREGANDO UN PROYECTO
Desde el IDE del Visual Studio, selecciona la opción NUEVO PROYECTO.
1. Selecciona la plantilla Visual C#
2. Selecciona aplicación de Windows Forms
3. Asigne un nombre al proyecto appSemana03
4. Presiona el botón ACEPTAR
Definicion de los
atributos y
propiedades de la
clase
ComboBox (Name):
cboMateria
Desde la lista de
tareas, selecciona
la opción
Agregar los
elementos al control
Para visualizar los registros, agrega el control ListView al Formulario, tal como se
muestra
Control ListView
(name) lvLibros
Asigne en la
propiedad View el
valor Details, para
visualizar las líneas
de cuadricula
Permite mostrar
líneas de
cuadricula en el
control ListView
3. Programación en el Formulario
Instanciar el ArrayList Biblioteca, a nivel de Formulario, tal como se muestra
Agregar la
referencia
System.Collections
Declara la instancia
del ArrayList
(Biblioteca) a nivel
Class.
Para agregar libros debemos programar el botón Agregar: instancie la clase Libros,
ingrese los datos a la instancia, agregar el objeto al ArrayList Biblioteca y Listar
Instanciar la clase
Libro, ingreso de
datos al objeto
Agregar el objeto
book al ArrayList
Ejecutar el metodo
Listado()
Recorrer los
registros de la
colección
Si encuentra el
registro, eliminar por
su código
Presione F5, ingrese los datos en los controles, para agregar el registro a la colección
presione el botón AGREGAR.
Para eliminar un registro, ingrese el código del libro y presiona el botón ELIMINAR
LABORATORIO 3.2
Se desea implementar un programa que permita registrar los participantes de un
SEMINARIO. En este proceso debemos ingresar: el DNI del participante, nombre y
apellido, teléfono y el email. Se pide:
1. Defina una clase llamada Postulante.
2. Defina
aA una colección de tipo List(Of Participante)
3. Programe el botón Agregar para Agregar Participante a la coleccion
4. Programe un procedimiento para listar
5. Programe el botón ACTUALIZAR que permite actualizar un participante por su DNI.
1. Diseño de la clase
Primero, diseña la clase llamado Datos el cual contiene los siguientes atributos menos
el atributo DNI, el cual será la llave de la colección
ListView: lvParticipantes
3. Programación.
Defina una instancia de la colección List<Participante>, tal como se muestra
Para listar los elementos, defina el método Listado dentro del Formulario, tal como se
muestra
Instanciar la clase
Participante,
ingreso de datos
Agregar el objeto a
la colección List<>
Ejecutar el metodo
Listado()
Recorrer los
registros de la
colección
Si encuentra el
registro por su DNI,
actualizar los datos
Para comprobar las operaciones, presione F5, ingrese los datos del Postulante y
presione el botón AGREGAR, donde se agrega a la colección y se visualiza el registro
en el ListView1.
LABORATORIO 3.3
Implemente una Colección de tipo ArrayList para registrar los vehículos que la
empresa ha comprado para su posterior venta. Defina una clase que almacene los
datos de un vehículo: placa, descripción, año, fabricante.
Defina una Colección de tipo ArrayList que permita almacenar los vehículos.
Realice los siguientes procesos:
Agregar: se agrega los vehículos a la colección ArrayList, donde se verificará que la
placa no se repita.
Listado: visualice en el ListView los datos de los vehículos almacenados en el
ArrayList.
Quitar: Se deberá ingresar el número de la placa del vehículo, si existe, quitarlo de la
cola, si no existe, enviar un mensaje indicando que no existe
LABORATORIO 3.4
Se desea implementar un programa que permita registrar el personal que trabajan en
TRIVECA SAC. En este proceso ingrese: el DNI, nombre y apellido, dirección y fecha
de nacimiento. Se pide:
1. Defina una clase llamada Personal que esté conformada por los datos del Personal.
2. Defina una colección de tipo List<Of> de Personal
3. Programe el botón Agregar para Agregar Personal
4. Programe el botón Eliminar que permite eliminar un Personal por su DNI.
5. Programe el botón Modificar, seleccione un registro desde el control ListView el cual
se visualiza los datos en el ListView, modifique los datos, menos el DNI, para realizar
la actualización de los datos y volver a listar los datos modificados
Resumen
Una colección es una forma de agrupar y manejar objetos relacionados. Por
ejemplo, cada formulario tiene una colección de controles, así, este objeto
representa a todos los controles que están contenidos en el formulario.
Las clases del espacio de nombres System.Collections no almacenan los
elementos como objetos de un tipo específico, sino como objetos de tipo Object.
Los espacios de nombres System.Collections.Generic proporcionan tipos
genéricos que permiten crear colecciones con establecimiento inflexible de tipos y
especificar el tipo de datos de los elementos cuando se crean.
o Dictionary, representa una colección de pares de clave y valor que se organizan
por claves.
o SortedList, representa una colección de pares de clave y valor que se ordenan
por claves según la implementación de la interfaz IComparer asociada.
El espacio de nombres System.Collections.Specialized proporciona clases de
colección especializadas y con establecimiento inflexible de tipos, como
colecciones de sólo cadena y diccionarios híbridos y de lista vinculada.
o HybridDictionary, implementa la interfaz IDictionary utilizando ListDictionary
mientras la colección es pequeña; a continuación, cambia a Hashtable cuando
la colección aumenta
o OrderedDictionary, representa una colección de pares de clave y valor que se
ordenan por claves o por índices.
ArrayList, implementa la interfaz IList mediante una matriz cuyo tamaño aumenta
dinámicamente según se requiera. La capacidad de un objeto ArrayList es el
número de elementos que puede contener el objeto ArrayList. La capacidad inicial
predeterminada de un objeto ArrayList es 0. Conforme se agregan elementos a un
objeto ArrayList, la capacidad aumenta automáticamente según lo requiera la
reasignación. Se puede disminuir la capacidad llamando al método TrimToSize o
estableciendo explícitamente la propiedad Capacity
La clase List(Of T), representa una lista de objetos fuertemente tipados a la que se
puede obtener acceso por índice. Proporciona métodos para buscar, ordenar y
manipular listas. La clase List(Of T) utiliza un comparador de igualdad y un
comparador de orden. Los métodos como Contains, IndexOf, LastIndexOf y
Remove utilizan un comparador de igualdad para los elementos de lista
La clase Dictionary, inicializa una nueva instancia de la clase Dictionary que está
vacía, tiene la capacidad inicial predeterminada y utiliza el comparador de igualdad
predeterminado para el tipo de clave. Cada clave de una colección Dictionary
debe ser única de acuerdo con el comparador de igualdad predeterminado.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-es/library/system.collections.generic(v=vs.80).aspx
http://msdn.microsoft.com/es-es/library/system.collections.aspx
http://www.elguille.info/NET/library/System.Collections.aspx
UNIDAD
2
MANEJO DE COLECCIONES
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Utilizamos el término LINQ para indicar que las consultas son una característica
integrada del lenguaje de programación (por ejemplo C#, Visual Basic). El lenguaje
de consulta integrada permite que las expresiones de consulta se beneficien de los
metadatos ricos, verificación de sintaxis en tiempo de compilación, tipado estático y
ayuda IntelliSense que antes estaban disponibles solo para el código imperativo.
LINQ también hacen posible aplicar una única facilidad declarativa de propósito
general a toda la información en memoria, y no solo a la información proveniente de
fuentes externas.
Las expresiones lambda junto a las instrucciones que proporciona LINQ (Lenguaje
de Consulta Integrado) resultan en una dupla complementarias en materia de
desarrollo de software. La inclusión y el uso de expresiones lambda en consultas
de base de datos utilizando LINQ son elementales y poderosos.
Cabe señalar que mediante LINQ resulta posible construir suficiente y eficiente
código para, no solamente poder acceder bases de datos, tablas, consultas,
procedimientos almacenados, triggers, etc., sino que también resulta posible
manipular dichos datos en dichos centros de datos de forma directa y eficaz. No se
requiere de mucho esfuerzo y su principal ventaja es que no es necesario aprender
por completo el lenguaje SQL y todos sus artilugios, de manera que de esta forma,
se pueda explotar todas sus virtudes.
Una expresión lambda es una función o un método que utilizamos donde haya un
delegado válido.
Una expresión lambda es una función anónima que se puede usar para crear tipos
delegados o de árbol de expresión. Utilizando expresiones lambda, puede escribir
funciones locales que se pueden pasar como argumentos o devolverse como valor
de llamadas a funciones. Las expresiones lambda son especialmente útiles para
escribir expresiones de consulta LINQ.
Para crear una expresión lambda, especifique parámetros de entrada (si existen) a
la izquierda del operador =>lambda, y coloque la expresión o bloque de
instrucciones en el otro lado. Por ejemplo, la expresión lambda x => x * x especifica
un parámetro denominado x y devuelve el valor x elevado al cuadrado.
La interfaz IQueryable
El mismo modelo de ejecución diferida es generalmente deseado para las fuentes
de datos que implementan la funcionalidad de consultas mediante árboles de
expresiones, como DLinq. Estas fuentes de datos pueden beneficiarse de
implementar la interfaz IQueryable, para la cual todos los operadores de consulta
requeridos por el patrón LINQ se implementan utilizando árboles de expresiones.
Cada IQueryable tiene una representación de “el código necesario para ejecutar la
consulta” en la forma de un árbol de expresión. Todos los operadores de consulta
diferidos devuelven un nuevo IQueryable que aumenta ese árbol de expresión con
una representación de una llamada a ese operador de consulta. Por esta razón,
cuando llega el momento de evaluar la consulta, generalmente porque el
IQueryable es enumerado, la fuente de datos puede procesar el árbol de expresión
que representa a la consulta entera en un solo “lote”.
LABORATORIO 4.1
Se desea implementar un programa que permita calcular el promedio y el mayor de
dos números ingresados. Defina expresiones Lambda en el proceso.
2. PROGRAMACION
Defina las estructuras Lambda dentro de la ventana del código del Form1
Definir la función
Promedio el cual
contiene 2 parámetros
Implementa cada el método de evento de cada uno de los botones para que ejecuten
su respectivo proceso, tal como se muestra
Programa el
evento del botón
Mayor y ejecuta el
método Mayor
Programa el
evento del botón
Promedio y
ejecuta el método
Promedio
Presiona la tecla F5, ingrese los datos, al presionar el botón Promedio, se muestra el
promedio de los números
LABORATORIO 4.2
Se desea implementar un programa que permita calcular el mayor de tres números
ingresados. Defina una expresión Lambda en el proceso
2. PROGRAMACION
Defina la función Lambda llamado mayor dentro de la ventana del código del
Formulario
Implementa cada el método de evento en el botón Mayor Numero para que ejecute su
respectivo proceso, tal como se muestra
3. EJECUTAR
A continuación ejecutamos el formulario (presiona la tecla F5). Ingresa los datos, tal
como se muestra, al presionar el botón Mayor Numero se visualiza el mayor de los tres
números.
LABORATORIO 4.3
Se desea implementar un programa que permita listar los números almacenados en
una colección de tipo List<Of int>. En este proceso realice una consulta de los
números pares y los números impares
Button: btnNumeros
Button: bnPares
Button: bnImpares
2. PROGRAMACION
Defina la colección lista de tipo List<int>, tal como se muestra
Programa el evento del Boton Numeros, donde visualizamos todos los números de la
colección List<int>. En este proceso utilizamos una función ToList(), par listar los
elementos de la colección.
Programa el evento del Boton Pares, donde filtramos y visualizamos todos los
números que sean pares en la colección List<int>. En este proceso utilizamos la
función Where para realizar el filtro de los elementos de la colección.
Programa el evento del Boton Impares, donde filtramos y visualizamos todos los
números que sean impares en la colección List<int>. En este proceso utilizamos la
función Where para realizar el filtro de los elementos de la colección
LABORATORIO 4.4
Se desea implementar un programa que permita registrar y consultas cuentas
bancarias almacenadas en una colección de tipo List. Realice consulta de los registros
almacenados de las cuentas bancarias por diferentes criterios.
Desarrollo Práctico
1. Diseño de la Clase
En este paso vamos a diseñar la clase clsCuenta, donde definimos los atributos de la
clase y el constructor, tal como se muestra
Agregar un control
contenedor TABCONTROL
el cual agrupa Page
Para agregar mas pestañas, desde la lista de tareas del TabControl, selecciona la
opción Agregar pestaña, tal como se muestra.
3. Diseño de la Pestaña 1
4. Programación de la pestaña 1
Defina a nivel Formulario una variable llamada Cuentas de tipo ArrayList; luego defina
un método llamado Listado() que permite listar los registros
Agregar la librería
System.Collections
Instanciar la colección
Cuentas, de tipo
List<Cuenta>
Si no existe, instanciar la
clase, ingresar los datos y
agregarlo a la coleccion
Ejecutar el listado
5. Ejecutar
Para ejecutar presiona la tecla F5, ingrese datos en los controles, al presionar el botón
AGREGAR, se visualiza las cuentas registradas en el control lvCuentas. Si trata de
registrar una cuenta con el mismo número, visualiza un mensaje, tal como se muestra
6. Diseño de la Pestaña 2
En esta pestaña vamos a consulta las cuentas por el nombre del cliente, ingresando
sus iniciales del nombre
TextBox (Name)
txtBuscarCliente
ListView (Name)
lvConsultaNombre
7. Programación de la pestaña 2
Implementa el método del botón Consulta por Nombre, donde se realizara la búsqueda
de las cuentas por las iniciales del nombre del cliente, visualizando los registros en el
control ListView, tal como se muestra.
8. Ejecutar
Para ejecutar presiona la tecla F5, ingrese las iniciales del nombre del cliente; al
presionar el botón CONSULTAR CLIENTE, se visualiza las cuentas registradas por las
iniciales del cliente en el control lvConsultaNombre.
9. Diseño de la Pestaña 3
DateTimePicker (Name)
dtFecha1
DateTimePicker (Name)
dtFecha2
ListView (Name)
lvConsultaFechas
Implementa el método del botón Consulta por Fechas, donde selecciona el rango de
las fechas a través de los controles DateTimePicker, visualizando los registros en el
control ListView, tal como se muestra.
Para ejecutar presiona la tecla F5, registra datos en las cuentas, y realiza las consultas
en las páginas de consulta entre un rango de dos fechas, tal como se muestra.
LABORATORIO 4.5
Se desea implementar un programa que permita registrar Cursos en una colección de
tipo List. Implementa consulta de los registros almacenados de los cursos a través de
la inicial de su nombre
LABORATORIO 4.6
Se desea implementar un
programa que permita
registrar FUTBOLISTAS en
una colección de tipo List.
Implementa una página que
permita los registros de los
futbolistas donde el DNI no
se repita
Resumen
Las expresiones lambda se crean utilizando la palabra clave Function o Sub, del mismo
modo que se crea una subrutina o función estándar. Sin embargo, las expresiones
lambda van incluidas en una instrucción.
Una expresión lambda se construye en una sola línea de código. Su
comportamiento es muy similar a una función ordinaria, pero la construcción del
código resulta ser más simple. Algunos suelen llamar a las expresiones lambda
como “funciones de una sola línea”.
Las expresiones lambda se combinan con los métodos que no retornan valor. Esta
técnica nos permitirá ahorrar código y optimizar nuestros algoritmos. Veamos el
siguiente código.
Las expresiones lambda es una herramienta muy poderosa en el caso de las
funciones, que son los métodos que retornan valor.
Las expresiones lambda junto a las instrucciones que proporciona LINQ (Lenguaje
de Consulta Integrado) resultan en una dupla complementarias en materia de
desarrollo de software. La inclusión y el uso de expresiones lambda en consultas
de base de datos utilizando LINQ son elementales y poderosos.
Las clases del espacio de nombres System.Linq y el resto de los espacios de
nombres que admiten consultas LINQ incluyen métodos a los que puede llamar
para crear y refinar consultas basándose en las necesidades de la aplicación
From (Cláusula): Se necesita una cláusula From o Aggregate para iniciar una
consulta. Una cláusula From especifica una colección de origen y una variable de
iteración de una consulta
Select (Cláusula): Opcional. Declara un conjunto de variables de iteración de una
consulta.
Where (Cláusula): Opcional. Especifica una condición de filtrado de una consulta..
Order By (Cláusula): Opcional. Especifica el criterio de ordenación de las
columnas de una consulta.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-
pe/library/bb763068(v=vs.90).aspx#VisualBasicLINQQueryOperators
http://www.devjoker.com/contenidos/articulos/341/LINQ-con-metodos-
Extensores-y-expresiones-lambda.aspx
http://www.elguille.info/NET/library/System.Collections.aspx
http://ortizol.blogspot.com/2014/06/expresiones-lambda-en-csharp-parte-3-
expresiones-lambda-y-linq.html
UNIDAD
3
PROCESOS ASÍNCRONOS
Al finalizar la unidad, el alumno crea aplicaciones personalizadas para el manejo de
procesos asíncronos e hilos utilizando algoritmos y librerías del Framework .NET 4.5
Temario
ACTIVIDADES PROPUESTAS
Cada hilo se programa como si ejecutara solo; como si la CPU fuera una sola.
Algún mecanismo del sistema operativo está dividiendo el tiempo de la CPU
para la aplicación, esto que hace la programación de múltiples hilos una tarea
mucho más fácil.
Un proceso son instrucciones al CPU que se ejecuta en su propio espacio. Un
sistema operativo multitarea es capaz de ejecutar más de un proceso a la vez,
haciendo que parezca que cada uno está por su cuenta, proporcionando
periódicamente ciclos de CPU para cada proceso. Un hilo es un solo flujo de
control dentro de un proceso. Un solo proceso puede tener múltiples hilos
ejecutándose al mismo tiempo. En resumen un proceso puede contener
múltiples hilos.
Figura 1: Threads
Referencia: http://nelson-venegas.blogspot.com/2012/05/procesos-hilos-threads-subproceso.html
está ejecutando, para ello se puede usar la propiedad IsAlive del objeto
Thread:
if (mThreadFic.IsAlive())
{
}
3.2.2.1 Métodos
Método Descripción
Abort Produce una excepción ThreadAbortException en el
subproceso en el que se invoca, para iniciar el proceso de
finalización del subproceso. Normalmente, una llamada a este
método finaliza el subproceso.
Finalize Permite que un objeto Object intente liberar recursos y realizar
otras operaciones de limpieza antes de que el objeto Object sea
reclamado por el recolector de elementos no utilizados. (Se
hereda de Object).
Interrupt Anula un subproceso que se encuentra en estado de subproceso
WaitSleepJoin.
Join Bloquea el subproceso de la llamada hasta que un subproceso
finaliza, pero continúa realizando suministro de SendMessage y
COM estándar.
Sleep(Int32) Suspende el subproceso actual durante un período de tiempo
especificado.
Sleep(TimeSp Bloquea el subproceso actual durante un período de tiempo
an) especificado.
Start Hace que el sistema operativo cambie el estado de la instancia
actual a ThreadState.Running.
Suspend Suspende el subproceso y, si éste ya se ha suspendido, no tiene
efecto alguno.
3.2.2.2 Propidades
Propiedad Descripción
CurrentCulture Obtiene o establece la referencia cultural del
subproceso actual.
CurrentPrincipal Obtiene o establece el principal del subproceso
actual (de la seguridad basada en funciones).
CurrentThread Obtiene el subproceso actualmente en ejecución.
CurrentUICulture Obtiene o establece la referencia cultural actual
utilizada por el administrador de recursos para
buscar recursos específicos de la referencia
cultural en tiempo de ejecución.
IsAlive Obtiene un valor que indica el estado de ejecución
del subproceso actual.
IsThreadPoolThread Obtiene o establece un valor que indica si un
subproceso es o no un subproceso en segundo
plano.
Priority Obtiene o establece un valor que indica la
prioridad de programación de un subproceso.
ThreadState Obtiene un valor que contiene los estados del
subproceso actual.
MULTITHREAD
Figura 2: MultiThreads
Referencia: http://nelson-venegas.blogspot.com/2012/05/procesos-hilos-threads-subproceso.html
3.1.3. BACKGROUNDWORKER
Evento Descripción
DoWork Se produce cuando se llama a
RunWorkerAsync.
ProgressChanged Se produce cuando se llama a ReportProgress.
RunWorkerCompleted Se produce cuando la operación en segundo
plano se ha completado, se ha cancelado o ha
producido una excepción.
Método Descripción
CancelAsync Solicita la cancelación de una operación en
segundo plano pendiente.
Finalize Permite que un objeto Object intente liberar
recursos y realizar otras operaciones de limpieza
antes de que el objeto Object sea reclamado por
la recolección de elementos no utilizados. (Se
hereda de Object).
OnDoWork Genera el evento DoWork.
OnProgressChanged Genera el evento ProgressChanged.
OnRunWorkerCompleted Genera el evento RunWorkerCompleted.
ReportProgress( Int32) Genera el evento ProgressChanged
LABORATORIO 5.1
Trabajando con Hilo
Se desea implementar un programa que permita listar la serie numérica y se detendrá
cuando el número sea cero.
Seleccionar Aplicación
por Consola.
Importar la librería
System.Threading
3. Trabajando con el void Main(). Instanciar la clase Asincrono, defina un hilo con el
metodo de la clase e iniciar el proceso
Instanciar la clase
Asincrono
LABORATORIO 5.2
Manejo de SubProcesos
Se desea implementar un programa que permita trabajar con dos hilos, visualizando
números al azar, finalizando los hilos cuando el número generado sea cero.
Importar la librería
System.Threading
LABORATORIO 5.3
Manejo de SubProcesos
Se desea implementar un programa que permita listar la serie numérica. Ingrese por
teclado un Número, visualice la serie numérica en el ListBox
Se pide:
1. Diseña un Formulario para listar los servicios.
2. Programe los eventos para listar la serie numérica utilizando Procesos Asíncronos.
BackGroundWorker (name):
bwSerie
Asigne a la propiedad
WorkerReportsProgress el
valor de true
2. Programación.
En la ventana de Programación, hacemos referencia a la librería System.Threading
IMPORTAR LA LIBRERÍA DE
TRABAJO: THREADING
Iniciar el BackGroundWorker
RunWorkerCompleted, se
ejecuta al finalizar el proceso
LABORATORIO 5.4
BackGroundWorker
Se desea implementar un programa que permita iniciar una barra de progreso,
visualizando su avance hasta que finalice. Programe esta aplicación a través de un
proceso asíncrono
ProgressBar, (name):
pbProgreso
BackGroundWorker (name):
bwProgreso, asigne la propiedad
WorkerReportsProgress=true
2. Programación.
En la ventana de Programación, hacemos referencia a la librería System.Threading
IMPORTAR LA LIBRERÍA DE
TRABAJO: THREADING
Iniciamos el control
BackgroundWorker1
Resumen
Un proceso son instrucciones al CPU que se ejecuta en su propio espacio. Un
sistema operativo multitarea es capaz de ejecutar más de un proceso a la vez,
haciendo que parezca que cada uno está por su cuenta, proporcionando
periódicamente ciclos de CPU para cada proceso. Un hilo es un solo flujo de
control dentro de un proceso. Un solo proceso puede tener múltiples hilos
ejecutándose al mismo tiempo. En resumen un proceso puede contener múltiples
hilos
Cuando un Thread se inicia, con Start, se continúa ejecutando el código que sigue
y así podremos seguir usando nuestra aplicación de forma paralela al Thread que
está en ejecución. Por supuesto se pueden crear y ejecutar varios Threads a un
mismo tiempo y cada uno de ellos hará su trabajo de forma independienteLa clase
Process proporciona acceso a procesos locales y remotos, y permite iniciar y
detener procesos del sistema local.
Un proceso puede crear uno o varios subprocesos para ejecutar una parte del
código de programa asociado al proceso. Utilice un delegado ThreadStart o el
delegado ParameterizedThreadStart para especificar el código del programa
ejecutado por un subproceso. El delegado ParameterizedThreadStart permite
pasar datos al procedimiento de subproceso.
La clase BackgroundWorker permite ejecutar una operación en un subproceso
dedicado e independiente. La ejecución de operaciones que exigen mucho tiempo,
como las descargas y las transacciones de las bases de datos, puede hacer que la
interfaz de usuario deje de responder. Si desea una interfaz de usuario con gran
capacidad de respuesta y debe realizar operaciones que exigen mucho tiempo, la
clase BackgroundWorker proporciona una solución práctica.
Para configurar una operación en segundo plano, agregue un controlador de
eventos para el evento DoWork. En este controlador de eventos, llame a la
operación que requiere mucho tiempo. Para iniciar una operación en segundo
plano, llame al método RunWorkerAsync. Para recibir notificaciones sobre las
actualizaciones de progreso, controle el evento ProgressChanged. Para recibir
una notificación cuando se complete la operación, controle el evento
RunWorkerCompleted.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://www.elguille.info/NET/VB/threads.htm#crear_threads
http://msdn.microsoft.com/es-es/library/system.threading.thread_members.aspx
http://msdn.microsoft.com/es-
es/library/system.componentmodel.backgroundworker_members(v=vs.95).aspx
http://eledwin.com/blog/tutorial-de-hilos-en-c-con-ejemplos-parte-2-35
https://elburgues.wordpress.com/2011/02/22/backgroundworker/
UNIDAD
4
ADMINISTRACIÓN DE DATOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al finalizar la unidad, el alumno, utilizando algoritmos y librerías del NET Framework
4.5, construye aplicaciones Windows para optimizar el manejo de los datos y archivos.
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para el manejo de archivos y
carpetas administradas por el Sistema Operativo
Los alumnos desarrollan aplicaciones para el manejo de datos utilizando objetos
Stream.
Los alumnos crear aplicaciones para serializar un tipo de objeto
Los alumnos crean una aplicación para realizar la compresión y encriptamiento
de los datos
Los alumnos desarrollan los laboratorios de la semana.
.NET Framework nos provee de un conjunto de clases que nos permiten acceder al
sistema de archivos del sistema, navegar por las carpetas, crear y eliminas archivos
y leer y escribir en los mismos, implementado mediante un modelo de streaming.
System.IO
El espacio de nombres System.IO contiene tipos que permiten leer y escribir en los
archivos y secuencias de datos, así como tipos que proporcionan compatibilidad
básica con los archivos y directorios.
System.IO está conformado por las siguientes clases:
Clases Descripción
DirectoryInfo Expone métodos de instancia para crear, mover y
enumerar archivos en directorios y subdirectorios. Esta
clase no se puede heredar.
DriveInfo Proporciona acceso a información sobre una unidad.
File Proporciona métodos estáticos para crear, copiar,
eliminar, mover y abrir archivos y contribuye a la
creación de objetos FileStream.
DRIVEINFO
Proporciona acceso a información sobre una unidad.
Esta clase modela una unidad y proporciona métodos y propiedades para consultar
información sobre la unidad. Utilice DriveInfo para determinar qué unidades están
disponibles y de qué tipo son. También puede determinar la capacidad de la unidad
y su espacio libre disponible.
Propiedad Descripción
GetDrives() Retorna la colección de las unidades de disco
administrada por Windows
DriveType Tipo de la unidad de disco
TotalSize Tamaño de la unidad
TotalFreeSpace Espacio disponible del disco
IsReady Retorna un valor boolean indicando si el dispositivo
está disponible.
AvailableFreeSpace Disponibilidad del espacio de disco
RootDirectory Raíz del directorio
DIRECTORYINFO
Expone métodos de instancia para crear, mover y enumerar archivos en directorios
y subdirectorios. Esta clase no se puede heredar.
Utilice la clase DirectoryInfo para operaciones típicas como copiar, mover, cambiar
de nombre, crear y eliminar directorios.
Si va a utilizar un objeto varias veces, considere la posibilidad de usar el método de
instancia de DirectoryInfo en lugar de los correspondientes métodos estáticos de
la clase Directory, ya que no siempre será necesario realizar una comprobación de
seguridad.
Propiedad Descripción
Exists Determina si un directorio existe
GetDirectories() Retorna los subdirectorios del directorio
CreateDirectory Crea un directorio
CreateSubDirectory Crea un subdirectorio
Move Permite mover un directorio a otro directorio o unidad
Delete Elimina un directorio
PATH
Ejecuta operaciones en instancias de String que contienen información de rutas de
archivos o directorios. Estas operaciones se ejecutan de forma adecuada para
múltiples plataformas.
Propiedad Descripción
GetExtension Recupera la extensión de un nombre de archivo.
GetFullPath Recupera la ruta de acceso completa de un archivo.
ChangeExtension Cambia la extensión de un archivo
HasExtension Determina si la ruta tiene extensión valida.
InvalidPathChars Evalúa si la ruta tiene algún carácter valido.
Los métodos Read y Write leen y escriben datos en varios formatos. Para
secuencias que admiten búsquedas, se pueden utilizar los métodos Seek y
SetLength, y las propiedades Position y Length para consultar y modificar
la posición y longitud actuales de una secuencia.
Clase Descripción
StreamReader Implementa un TextReader que lee los caracteres de
una secuencia de bytes en una codificación
determinada.
StreamWriter Implementa un TextWriter que escribe los caracteres
en una secuencia de bytes.
FileStream Expone un objeto Stream de un archivo; se admiten
operaciones de lectura y escritura sincrónica y
asincrónica
MemoryStream Crea una secuencia de bytes cuyo almacén de
respaldo es la memoria.
StringReader Implementa TextReader que lee en una cadena
StringWriter Implementa TextWriter para escribir información en
una cadena. La información se almacena en el
StringBuilder subyacente.
StreamReader
Está diseñado para la entrada de caracteres mediante una codificación
determinada, mientras que la clase Stream está diseñada para la entrada y
salida de bytes. Se utiliza StreamReader para leer líneas de información
desde un archivo de texto estándar.
Clase Descripción
Close Cierra el objeto StreamReader y la secuencia
StreamWriter
Clase Descripción
Close Cierra el objeto StreamWriter y la secuencia
subyacente.
Flush Borra todos los búferes del sistema de escritura
actual y hace que todos los datos almacenados en
el búfer se escriban en la secuencia subyacente.
(Invalida a TextWriter.Flush).
Write Escribe la representación de texto de un valor de
tipo Boolean en la secuencia de texto. (Se hereda
de TextWriter).
WriteLine Escribe un terminador de línea en la secuencia de
texto. (Se hereda de TextWriter).
4.1.1.2 FileStream
Clase Descripción
Close Cierra la secuencia actual y libera todos los recursos
(como sockets e identificadores de archivo) asociados
a ésta. (Se hereda de Stream).
Flush Borra todos los búferes de esta secuencia y hace que
todos los datos almacenados en el búfer se escriban
en el dispositivo subyacente.
Read Lee un bloque de bytes de la secuencia y escribe los
datos en un búfer dado.
ReadByte Lee un byte del archivo y avanza la posición de lectura
un byte.
Write Escribe un bloque de bytes en esta secuencia
mediante el uso de datos de un búfer.
WriteByte Escribe un byte en la posición actual de la secuencia
de archivo
4.1.1.3 MemoryStream
Clase Descripción
Close Cierra la secuencia actual y libera todos los
recursos (como sockets e identificadores de
archivo) asociados a ésta. (Se hereda de Stream).
Flush Borra todos los búferes de esta secuencia y hace
que todos los datos almacenados en el búfer se
escriban en el dispositivo subyacente.
Read Lee un bloque de bytes de la secuencia y escribe
los datos en un búfer dado.
ReadByte Lee un byte del archivo y avanza la posición de
lectura un byte.
Write Escribe un bloque de bytes en esta secuencia
LABORATORIO 6.1
Consulta de Carpetas de la Unidad C:
Se desea implementar un programa que permita listar las carpetas o directorios
almacenados en la Unidad C:\. En este proceso visualice: la raíz de la carpeta y su nombre.
Se pide:
1. Diseña un Formulario para listar los servicios.
2. Programe el evento del Formulario para listar los directorios de la Unidad C:\
ListView (lvDirectorios),
visualiza los directorios
de la unidad C:
2. Programación.
En la ventana de Programación o código, primero hacemos referencia a la librería
System.IO.
Importar la librería
System.IO, para el
manejo de archivos
Instanciar la clase
DirectoryInfo
LABORATORIO 6.2
Consulta de Directorios por una Unidad Seleccionada
Se desea implementar un programa que permita listar los directorios por una Unidad
Seleccionada. Selecciona desde un ComboBox la unidad para listar los directorios de
esa unidad.
Se pide:
1. Diseña un Formulario para listar los directorios por Unidad seleccionada
2. Programación del Combobox donde al seleccionar una Unidad, se listará sus
directorios
ComboBox
(cboUnidad)
ListView
(lvDirectorios)
2. Programación.
En la ventana de Programación, hacemos referencia a la librería System.IO
Importar la librería
System.IO, para el
manejo de archivos
Definir el directorio de la
unidad seleccionada
3. Ejecutar
Al finalizar presione F5 para ejecutar la aplicación, selecciona una Unidad desde el
comboBox, visualizando sus carpetas en el control ListView
LABORATORIO 6.3
Consulta de Archivos de un Directorios seleccionado
Implemente un programa que permita listar los archivos de una unidad seleccionada
desde un control comboBonx
Se pide:
1. Diseña un Formulario para listar los archivos de una unidad seleccionada
2. Programe el ComboBox para el listado de los archivo de la unidad seleccionada.
ComboBox
(cboUnidad)
ListView
(lvArchivos)
2. Programación.
En la ventana de Programación o código, primero hacemos referencia a la librería
System.IO. Defina a nivel Formulario una variable llamada raíz la cual almacena la
unidad de los directorios de la unidad C:
Importar la librería
System.IO, para el
manejo de archivos
Definir el directorio de la
unidad seleccionada
3. Ejecutar el Formulario.
Seleccione un directorio en el ComboBox y listaremos sus archivos, donde se visualiza
su nombre y raíz del archivo
LABORATORIO 6.4
Manejo de Archivos
Se desea implementar un programa que permita manejar un archivo de texto: escribir
el texto dentro de un TextBox guardando su contenido en un archivo de Texto (.txt);
así como leer el contenido de un archivo de Texto y visualizarlo en el control TextBox.
Se pide:
1. Diseña un Formulario para grabar y leer un archivo
2. Programe los eventos para realizar las operaciones.
TextBox: txtBlock
MultiLine: True
ScrollBars: Verticla
2. Programación.
En la ventana de Programación, importar la librería System.IO.
Importar la librería
System.IO, para el
manejo de archivos
Programa el evento Clic del botón Limpiar, se procede a limpiar el control txtBlock
Programa el evento Clic del botón Grabar, se procede a Grabar el contenido del
TextBox a un archivo de Texto utilizando un cuadro de dialogo para Grabar.
Programe el evento Clic del botón Abrir se procede a Abrir un Archivo de Texto
utilizando un cuadro de dialogo.
3. Ejecutar el Formulario.
Al finalizar presione F5 para realizar el proceso de Lectura y grabación de archivos.
LABORATORIO 6.5
Manejo de Archivos
Se desea implementar un programa que permita manejar un archivo de texto:
1. Abrir un archivo y leer su contenido;
2. Guardar el contenido del TextBox y almacenarlo en un archivo de Texto (.txt);
si el archivo ha sido abierto, sobreescribirlo
3. Guardar Como, pide cuadro de dialogo para almacenar el contenido del
textBox en un archivo de texto.
TextBox: txtBlock
MultiLine: True
ScrollBars: Verticla
2. Programación.
En la ventana de Programación, importar la librería System.IO.
Importar la librería
System.IO, para el
manejo de archivos
Programe el evento Clic del botón Abrir se procede a Abrir un Archivo de Texto
utilizando un cuadro de dialogo.
Programa el evento Clic del botón Guardar Como, se procede a Grabar el contenido
del TextBox a un archivo de Texto utilizando un cuadro de dialogo para Grabar
Programa el evento Clic del botón Grabar, se procede a Grabar el contenido del
TextBox a un archivo de Texto utilizando un cuadro de dialogo para Grabar.
Presiona la tecla F5 para ejecutar el Formulario.
Resumen
El espacio de nombres System.IO contiene tipos que permiten leer y escribir en los
archivos y secuencias de datos, así como tipos que proporcionan compatibilidad básica
con los archivos y directorios.
La clase DriveInfo modela una unidad y proporciona métodos y propiedades para
consultar información sobre la unidad. Utilice DriveInfo para determinar qué unidades
están disponibles y de qué tipo son. También puede determinar la capacidad de la
unidad y su espacio libre disponible.
Utilice la clase DirectoryInfo para operaciones típicas como copiar, mover, cambiar de
nombre, crear y eliminar directorios. Si va a utilizar un objeto varias veces, considere la
posibilidad de usar el método de instancia de DirectoryInfo en lugar de los
correspondientes métodos estáticos de la clase Directory, ya que no siempre será
necesario realizar una comprobación de seguridad.
La clase Path ejecuta operaciones en instancias de String que contienen
información de rutas de archivos o directorios. Estas operaciones se ejecutan de
forma adecuada para múltiples plataformas.
Stream es la clase base de todas las secuencias. Una secuencia es una abstracción
de una secuencia de bytes, como un archivo, un dispositivo de entrada/salida, un canal
de comunicación interprocesos o un socket TCP/IP.
StreamReader está diseñado para la entrada de caracteres mediante una codificación
determinada, mientras que la clase Stream está diseñada para la entrada y salida de
bytes. Se utiliza StreamReader para leer líneas de información desde un archivo de
texto estándar.
Utilice la clase FileStream para leer, escribir, abrir y cerrar archivos en un sistema de
archivos, así como para manipular otros identificadores del sistema operativo
relacionados con archivos, incluidos los de canalizaciones, entrada estándar y salida
estándar. Puede especificar que las operaciones de lectura y escritura sean sincrónicas
o asincrónicas. FileStream almacena en el búfer la entrada y la salida para obtener un
mejor rendimiento.
La clase MemoryStream crea secuencias que utilizan como almacén de respaldo la
memoria en lugar de un disco o una conexión de red. MemoryStream encapsula los
datos almacenados como una matriz de bytes sin signo que se inicializa al crear un
objeto MemoryStream; también se puede crear una matriz vacía.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-es/library/system.io.memorystream_members
(v=vs.80).aspx
http://msdn.microsoft.com/es-es/library/system.io.streamwriter_members.aspx
http://www.slideshare.net/antoniopalomaressender/framework-net-35-14-gestin-de-
archivos-y-serializacin
UNIDAD
4
ADMINISTRACIÓN DE DATOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al finalizar la unidad, el alumno, utilizando algoritmos y librerías del NET Framework
4.5, construye aplicaciones Windows para optimizar el manejo de los datos y archivos.
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para el manejo de archivos y
carpetas administradas por el Sistema Operativo
Los alumnos desarrollan aplicaciones para el manejo de datos utilizando objetos
Stream.
Los alumnos crear aplicaciones para serializar un tipo de objeto
Los alumnos crean una aplicación para realizar la compresión y encriptamiento
de los datos
Los alumnos desarrollan los laboratorios de la semana.
System.IO.Compression
Método Descripción
Close Cierra la secuencia actual y libera todos los
recursos (como sockets e identificadores de
archivo) asociados a ésta. (Se hereda de Stream).
Finalize Permite que un objeto Object intente liberar
recursos y realizar otras operaciones de limpieza
antes de que el objeto Object sea reclamado por el
recolector de elementos no utilizados. (Se hereda
de Object).
Flush Vuelca el contenido del búfer interno del objeto de
LABORATORIO 7.1
Comprimir datos utilizando el DeflateStream
Se desea implementar un programa que permita comprimir los datos en un archivo
secuencial comprimido. Ingrese datos desde un TextBox, al presionar el botón Comprimir
se visualiza un cuadro de dialogo para almacenar los datos comprimidos.
Se pide:
1. Diseña un Formulario para listar los servicios.
2. Programe los eventos de los controles Button para realizar las operaciones.
TextBox: txtBlock
MultiLine: True
ScrollBars: Verticla
2. Programación.
En la ventana de Programación referenciar las librerías System.IO y el IO.Compression
En el evento Clic del botón Comprimir, comprima el contenido del TextBox utilizando la
clase DeflateStream, almacenando el contenido en un archivo.
Almaceno el contenido
del textBox en un
MemoryStream
LABORATORIO 7.2
Comprimir datos utilizando el GZipStream
Se desea implementar un programa que permita realizar operaciones sobre un archivo
secuencial: Comprimir y descomprimir datos.
Se pide:
1. Diseña un Formulario.
2. Programación de los botones Comprimir y Descomprimir utilizando la clase GZipStream
TextBox: txtBlock
MultiLine: True
ScrollBars: Verticla
2. Programación.
En la ventana de código, referenciar las librerías: System.IO y System.IO.Compression
Almaceno el contenido
del textBox en un
MemoryStream
Resumen
El intercambiar datos dentro de nuestra organización sería mucho más eficiente si
estos datos no ocuparan mucho espacio ya que de ese modo al ser transferidos sobre
nuestra red no la sobrecargarían y el transporte sería muchísimo más rápido.
El espacio de nombres System.IO.Compression contiene clases que
proporcionan servicios de compresión y descompresión básica para las
secuencias.
Esta clase representa el algoritmo Deflate, un algoritmo estándar en el sector para la
compresión y descompresión de archivos sin pérdidas. Utiliza una combinación del
algoritmo LZ77 y la codificación Huffman. Se pueden generar o se pueden utilizar
datos, incluso para un flujo de datos de entrada presentado secuencialmente y de
longitud arbitraria, usando únicamente una cantidad de almacenamiento intermedio
enlazada previamente
Esta clase representa el formato de datos gzip, que utiliza un algoritmo estándar del
sector para la compresión y descompresión de archivos sin pérdidas. El formato incluye
un valor de prueba cíclica de redundancia para detectar daños en los datos.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://www.idg.es/pcworld/Criptografia-con-.NET_Como-utilizar-las-herramient/art154748.htm
http://msdn.microsoft.com/es-es/library/93bskf9z(v=vs.80).aspx
http://207.46.16.248/es-es/library/system.io.compression(VS.90).aspx
http://geeks.ms/blogs/imostacero/archive/2006/12/22/compresion-y-descompresion-en-el-net-
framework-2-0.aspx
http://www.slideshare.net/antoniopalomaressender/framework-net-35-14-gestin-de-archivos-
y-serializacin
UNIDAD
4
ADMINISTRACIÓN DE DATOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al finalizar la unidad, el alumno, utilizando algoritmos y librerías del NET Framework
4.5, construye aplicaciones Windows para optimizar el manejo de los datos y archivos.
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para el manejo de archivos y
carpetas administradas por el Sistema Operativo
Los alumnos desarrollan aplicaciones para el manejo de datos utilizando objetos
Stream.
Los alumnos crear aplicaciones para serializar un tipo de objeto
Los alumnos crean una aplicación para realizar la compresión y encriptamiento
de los datos
Los alumnos desarrollan los laboratorios de la semana.
4.3 SERIALIZACION
La serialización es el proceso de convertir un objeto en una secuencia de bytes
para conservarlo en memoria, una base de datos o un archivo. Puede guardar y
volver a crear este tipo de objetos mediante la funcionalidad que proporciona .NET
Framework.
Uso de la Serialización
La serialización permite al desarrollador guardar el estado de un objeto y volver a
crearlo cuando es necesario, y proporcionar almacenamiento de objetos e
intercambio de datos.
Método Descripción
Deserialize Deserializa una secuencia en un gráfico
de objetos
Serialize Serializa un objeto o un gráfico de
objetos conectados en la secuencia
indicada
Deserialize Deserializa una respuesta a una llamada
de método remota a partir del Stream
proporcionado.
Método Descripción
CanDeserialize Obtiene un valor que indica si este
XmlSerializer puede deserializar un
documento XML especificado.
DeSerialize Deserializa un documento XML.
Serialize Serializa un objeto en un documento
XML.
Serializar un ArrayList
Los atributos XmlArrayAttribute y XmlArrayItemAttribute están
diseñados para controlar la serialización
Hay dos atributos que pueden aplicarse a una clase (y sólo una clase):
XmlRootAttribute y XmlTypeAttribute. Estos atributos son muy similares.
XmlRootAttribute puede aplicarse únicamente a una clase: aquella que,
cuando se serializa, representa el elemento de apertura y cierre del
documento XML; en otras palabras, el elemento raíz. Por otra parte,
XmlTypeAttribute puede aplicarse a cualquier clase, incluso a la clase raíz.
LABORATORIO 8.1
Serialización Binaria
Se desea implementar un programa que serialice un texto en formato binario. Ingrese
el texto en un control TextBox, al presionar el botón SERIALIZAR, guardar el contenido
del TextBox en un archivo binario.
Se pide:
1. Diseña un Formulario para realizar el cifrado de datos.
2. Programe los eventos Serializar y Deserializar en formato binario
1. Diseño de Formulario.
A continuación diseñe el formulario para realizar la serialización de datos.
TextBox: txtBlock
MultiLine: True
ScrollBars: Verticla
2. Programación.
En la ventana de código, referenciar las librerías System.IO y
System.Runtime.Serialization.Formatters.Binary (serialización binaria)
Programa el evento del botón Serializar, donde almacena los datos en formato binario.
Programa el evento del botón Serializar, donde almacena los datos en formato binario.
LABORATORIO 8.2
Serialización XML
Implemente un programa que permita serializar el registro de un Alumno en un archivo
XML. Se pide:
1. Defina una clase para registrar los datos del Alumno
2. Diseña un Formulario para ingresar los datos del Alumno.
3. Programe el evento para Serializar el registro del Alumno en un archivo XML y el
evento para Deserializar el archivo XML visualizando los datos del Alumno
2. Diseña el Formulario
DateTimePicker:
(name):dtFechaNac
Format: short
2. Programación.
En la ventana de código, referenciar las librerías System.IO y el
System.Xml.Serialization
Programa el evento Click del Boton Limpiar, donde borramos el contenido de los
controles, y enfocando en el control txtDNI.
Programa el evento del botón Serializar, para serializar los datos registrados de un
alumno en una estructura XML.
Cuadro de dialogo
para guardar el
archivo
Instanciar la clase
Alumno e ingresar
los datos
FileStream para
crear el archivo
Para verificar el proceso, ejecutar la aplicación. Ingresa los datos y presiona el botón
Serializar, donde los datos se almacenan en formato xml, tal como se muestra.
Cuadro de dialogo
para abrir el archivo
FileStream que
permite abrir el
archivo
LABORATORIO 8.3
Serialización de una colección
Implemente un programa que permita serializar los registros de los Alumnos que
estarán almacenados en una colección dentro de un archivo XML.
Se pide:
1. Defina una clase para registrar los datos del Alumno
2. Defina una clase para almacenar la colección de Alumno
3. Diseña un Formulario para ingresar los datos del Alumno.
4. Programe los procesos:
a. Agregar un Alumno a la colección
b. Serializar la colección de los registros del Alumno en un archivo XML
Defina la clase
Alumno
Defina la clase Listado. Declare una colección de tipo Alumno definiéndole el atributo
<XmlArrayItem>
Referencia la librería de
la serializacion
2. Diseña el Formulario
ListView: lvAlumnos
3. Programación.
En la ventana de código, referenciar System.IO y el System.Xml.Serialization
Instanciar la clase
Alumnos en el
Formulario
Defina el método Listado, que cual listará los elementos de la colección Lista en el
control ListView: lvAlumnos
Programa el evento Click del botón Agregar, donde un registro de Alumno será
agregado a la colección Lista
Instancia la clase
Registro y
almacenar los
datos en el objeto
Agregar el objeto al
arrayList lista
Cuadro de dialogo
para guardar en
formato xml
FileStream para
crear archivo
Definir el
serializador de tipo
Alumnos
Serializar y cerrar el
FileStream
Ejecute el programa, agregue los registros de los Alumnos, para almacenar los
registros de alumnos en el archivo XML
Resumen
La serialización es el proceso de convertir un objeto en una secuencia de bytes para
conservarlo en memoria, una base de datos o un archivo. Puede guardar y volver a
crear este tipo de objetos mediante la funcionalidad que proporciona .NET Framework.
La serialización permite al desarrollador guardar el estado de un objeto y volver a
crearlo cuando es necesario, y proporcionar almacenamiento de objetos e intercambio
de datos.
Se puede utilizar serialización binaria o XML. En la serialización binaria, se serializan
todos los miembros, incluso aquellos que son de sólo lectura, y se mejora el
rendimiento. La serialización XML proporciona código más legible, así como mayor
flexibilidad para compartir objetos y utilizarlos para fines de interoperabilidad.
La serialización binaria utiliza la codificación binaria a fin de generar una serialización
compacta para usos como almacenamiento o secuencias de red basadas en sockets.
El espacio de nombres System.Runtime.Serialization.Formatters.Binary contiene la
clase BinaryFormatter, que se puede utilizar para serializar y deserializar los objetos
en formato binario.
La serialización XML serializa las propiedades y campos públicos de un objeto o los
parámetros y valores devueltos de los métodos en una secuencia XML que se ajusta a
un documento específico del lenguaje de definición de esquemas XML (XSD).
La serialización XML es el proceso mediante el cual los campos y propiedades
públicos de un campo se convierten a un formato de serie (en este caso, XML) a
efectos de almacenamiento o transporte. La deserialización vuelve a crear el objeto en
su estado original a partir de los resultados XML.
Los atributos XmlArrayAttribute y XmlArrayItemAttribute están diseñados para
controlar la serialización. La clase ArrayList puede contener una colección de varios
objetos. Por tanto, puede utilizar ArrayList igual que una matriz. En lugar de crear un
campo que devuelva una matriz de objetos con tipo, puede crear un campo que
devuelva una sola ArrayList. No obstante, al igual que sucede con las matrices, debe
informar a XmlSerializer de los tipos de objetos que contiene ArrayList. Para ello,
asigne varias instancias de XmlElementAttribute al campo.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-es/library/ms233836(v=vs.80).aspx
http://msdn.microsoft.com/es-es/library/system.runtime.serialization.
formatters.binary(v=VS.80).aspx
http://stackoverflow.com/questions/17739330/xmlserializer-convert-c-sharp-object-to-xml-
string
https://www.udemy.com/blog/csharp-serialize-to-xml/
UNIDAD
5
SEGURIDAD DE DATOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al finalizar la unidad, el alumno, utilizando algoritmos y librerías del NET Framework
4.5, construye aplicaciones para optimizar el manejo, control y seguridad de los datos
y archivos.
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para el manejo de archivos y
carpetas administradas en forma aislada por el Sistema Operativo
Los alumnos crear aplicaciones para encriptar los datos definiendo un tipo de
servicio criptográfico.
Los alumnos desarrollan los laboratorios de la semana.
Para crear el hash de una cadena de datos, basta con crear un objeto
HashAlgorithm correspondiente al algoritmo elegido y llamar al método
ComputeHash() del objeto.
Estos sistemas son mucho más rápidos que los de clave pública, por lo que
resultan apropiados para el cifrado de grandes volúmenes de datos. Ésta
es la opción utilizada para cifrar el cuerpo de los mensajes en el correo
electrónico o los datos intercambiados en las comunicaciones digitales a
través de Internet o el contenido de un archivo del disco duro o los registros
de una base de datos.
Por lo tanto, hay que instanciar una cualquiera de estas cuatro clases,
según el algoritmo deseado. Por ejemplo, para crear un objeto que implante
el algoritmo DES se puede utilizar:
DESCryptoServiceProvider servicio =
new DESCryptoServiceProvider();
cs.Write(arrInput,0,arrInput.Length);
cs.FlushFinalBlock();
cs.Close();
arrResultado = ms.ToArray();
LABORATORIO 9.1
Encriptando una cadena
Se desea implementar un programa que realice el cifrado de una cadena. Ingrese una
cadena en un control TextBox, al presionar el botón CIFRAR, visualice la cadena
cifrada como una secuencia de bytes
Se pide:
1. Diseña un Formulario para realizar el cifrado de datos.
2. Programe el evento del Button Cifrar Datos, para realizar la operación del cifrado
TextBox: txtcadena
Button: btncifrar
TextBox: txtcadenacifrada
2. Programación.
En la ventana de código, referenciar las librerías System.IO y de cifrado de datos
System.Security.Cryptography
En el evento clic del botón Abrir, procedemos a cifrar los datos de una cadena
almacenada en el TextBox: txtcadena, donde se visualiza el cifrado en el TextBox:
txtcadenacifrada.
Definir el MemoryStream
para almacenar la
secuencia de bytes del
textBox
Definir el servicio y
calcular el valor hash
Al finalizar, presione F5, ingrese una cadena en el TextBox txtcifrado, al presionar el botón
CIFRAR DATOS, se visualiza la secuencia de datos cifrados
LABORATORIO 9.2
Encriptar texto
Implemente un programa que permita realizar el cifrado y descifrado de los datos
almacenando en un archivo de Texto. Escriba un texto en el control TextBox, al
presionar el botón CIFRAR DATOS, los datos serán cifrados y almacenados en un
archivo de texto. Para realizar el descifrado de datos, Abrir un archivo el cual se ha
cifrado y visualice su contenido descifrado.
Se pide:
1. Diseña un Formulario para realizar el cifrado y descifrado de datos
2. Programe los botones para realizar con el proceso.
1. Diseño de Formulario
Button: btnCifrado
Button: btnDescrifrado
TextBox: txtTexto
MultiLine:true
ScrollBars: vertical
2. Programación.
En la ventana de Programación o código, primero hacemos referencia a la librería
System.IO y el System.Security.Cryptography
Definir el servicio de
encriptado, defina su llave
y su vector de
inicialización
En el evento Click del botón Cifrar Datos, procedemos a cifrar los datos que se
visualiza en el TextBox, utilizando un CryptoStream y almacenar el cifrado en el
FileStream
MemoryStream que
almacena la secuencia de
bytes del TextBox
En el evento Click del botón Descifrar Datos, abrir un archivo cifrado, visualizar en el
TextBox txtdatos la información descifrada.
Defina el FileStream
para abrir el encriptado
Defina el cryptonStream
para desencriptar y
almacenar en el Array
Almacenar la secuencia
desencriptada en el
MemoryStream para visualizar
los datos
LABORATORIO 9.3
Encriptando texto con TripleDescriptorServiceProvider
Se desea implementar un programa que permita ecnriptar y desencriptar datos desde un
archivo de texto. Abrir un archivo secuencial desde el botón ABRIR, al presionar el botón
CIFRADO para encriptar los datos almacenando en un archivo de texto, al presionar el
botón DESCIFRADO, abrir el archivo y visualizar los datos descifrado. Utilice el servicio
TripleDescriptorServiceProvider
Resumen
El intercambiar datos dentro de nuestra organización sería mucho más eficiente si
estos datos no ocuparan mucho espacio ya que de ese modo al ser transferidos sobre
nuestra red no la sobrecargarían y el transporte sería muchísimo más rápido.
Las clases del espacio de nombres de criptografía de .NET Framework se ocupan de
administrar muchos de los detalles de la criptografía. Algunos son contenedores para
Microsoft CryptoAPI no administrado, mientras que otros son meramente
implementaciones administradas.
Net proporciona implantaciones de numerosos algoritmos criptográficos estándares:
cifrado simétrico y asimétrico, hash, generación de números pseudoaleatorios, firma de
mensajes, derivación de claves a partir de contraseñas, etc. Estos algoritmos son
fáciles de utilizar y disponen de las propiedades predeterminadas más seguras.
.NET representa las funciones criptográficas de hash mediante la clase base abstracta
HashAlgorithm.
El cifrado consiste en transformar mediante un algoritmo matemático un texto en claro
inteligible por todos en un texto cifrado, totalmente ininteligible excepto para el legítimo
destinatario del mismo, que será el poseedor de la clave secreta. Se distinguen dos
métodos generales de cifrado: cifrado simétrico y cifrado asimétrico.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://www.idg.es/pcworld/Criptografia-con-.NET_Como-utilizar-las-herramient/art154748.htm
http://msdn.microsoft.com/es-es/library/93bskf9z(v=vs.80).aspx
http://207.46.16.248/es-es/library/system.io.compression(VS.90).aspx
http://geeks.ms/blogs/imostacero/archive/2006/12/22/compresion-y-descompresion-en-el-net-
framework-2-0.aspx
UNIDAD
5
SEGURIDAD DE DATOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al finalizar la unidad, el alumno, utilizando algoritmos y librerías del NET Framework
4.5, construye aplicaciones para optimizar el manejo, control y seguridad de los datos
y archivos.
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para el manejo de archivos y
carpetas administradas en forma aislada por el Sistema Operativo
Los alumnos crear aplicaciones para encriptar los datos definiendo un tipo de
servicio criptográfico.
Los alumnos desarrollan los laboratorios de la semana.
Windows Vista:
Almacenes con movilidad =
<UNIDAD_DEL_SISTEMA>\Users\<usuario>\AppData\Roaming
Clase Descripción
IsolatedStorage Representa la clase base abstracta de la
que deben derivarse todas las
implementaciones de almacenamiento
aislado.
IsolatedStorageException Excepción que se inicia cuando una
operación del almacenamiento aislado
produce un error
IsolatedStorageFile Representa un área de almacenamiento
aislado que contiene archivos y
directorios
Clase IsolatedStorageFile
Métodos
Nombre Descripción
CopyFile (String, String) Copia un archivo existente en un
archivo nuevo.
CreateDirectory Crea un directorio en el ámbito de
almacenamiento aislado.
CreateFile Crea un archivo en el almacén
aislado.
DeleteDirectory Elimina un directorio en el ámbito
de almacenamiento aislado
DirectoryExists Determina si la ruta especificada se
refiere a un directorio existente en
el almacén aislado.
FileExists Determina si la ruta especificada se
refiere a un archivo existente en el
almacén aislado.
GetDirectoryNames () Enumera los directorios en la raíz
de un almacén aislado.
GetFileNames () Enumera los nombres de los
archivos en la raíz de un almacén
aislado.
GetUserStoreForApplication Obtiene el ámbito del usuario de
almacenamiento aislado que se
corresponde con la identidad de
aplicación del código de llamada
GetUserStoreForAssembly Obtiene ámbito del usuario el
almacenamiento aislado
correspondiente a la identidad de
ensamblado del código de llamada.
GetUserStoreForSite Infraestructura. Obtiene un almacén
de usuarios de ámbito aislado para
el uso de aplicaciones en un
dominio de host virtual.
OpenFile (String, FileMode) Abre un archivo en el modo
especificado.
Constructores
Nombre Descripción
IsolatedStorageFileStream Inicializa una nueva instancia de un
(String, FileMode) objeto IsolatedStorageFileStream
que da acceso al archivo designado
por el camino en el modo
especificado.
IsolatedStorageFileStream Inicializa una nueva instancia de la
(String, FileMode, FileAccess) clase IsolatedStorageFileStream
que da acceso al archivo designado
por el camino, en el modo
especificado, con el tipo de acceso
solicitado.
IsolatedStorageFileStream Inicializa una nueva instancia de la
(String, FileMode, clase IsolatedStorageFileStream
IsolatedStorageFile) que da acceso al archivo designado
por el camino, en el modo
especificado, y en el contexto de la
IsolatedStorageFile especificada
por la FIA.
IsolatedStorageFileStream Inicializa una nueva instancia de la
(String, FileMode, FileAccess, clase IsolatedStorageFileStream
FileShare) que da acceso al archivo designado
por el camino, en el modo
especificado, con el acceso a
archivos especificado, utilizando el
modo de intercambio de archivos
especificado por acción, con el
buffersize especificado.
Métodos
Nombre Descripción
Close Cierra la secuencia actual y libera
todos los recursos (como sockets e
identificadores de archivo)
asociados a la secuencia actual
CopyTo (Stream) Lee los bytes de la secuencia actual
y los escribe en otra secuencia
LABORATORIO 10.1
Manejo de Carpetas Aisladas
Implemente una aplicación que permita crear carpetas o directorios en un área de espacio
aislado a nivel usuario
TextBox: txtNombre
ListBox: lbCarpetas
2. Programación
Defina las librerías de trabajo para el almacenamiento aislado
Importa librería de
almacenamiento
aislado
Defina el
almacenamiento a
nivel usuario
Evalúa si existe su
directorio
Crear un directorio
aislado
Evalúa si NO existe
su directorio
Si existe, eliminar
el directorio
LABORATORIO 10.2
Manejo de Archivos en un Espacio Aislado
Implemente una aplicación que permita almacenar y recuperar archivos en un área de
espacio aislado a nivel usuario
TextBox: (Name)
txtArchivo
2. Programación
Defina las librerías de trabajo
Librería de
almacenamiento
aislado
Definir el
almacenamiento
aislado a nivel User
for Assembly
Defina el
FileStream para
crear el archivo
Resumen
El almacenamiento aislado es un mecanismo de almacenamiento de datos que
proporciona aislamiento y seguridad mediante la definición de modos estándar de
asociar código a los datos guardados. La estandarización ofrece además otras
ventajas.
La utilización de un almacenamiento aislado permite que las aplicaciones que no
son de plena confianza almacenen datos de una forma controlada por la directiva
de seguridad del equipo.
La ubicación cambia dependiendo del sistema operativo. En la siguiente lista se
muestran las ubicaciones raíz en que se crea el almacenamiento aislado en algunos de
los sistemas operativos más frecuentes. Busque el directorio Microsoft\IsolatedStorage
bajo esta ubicación raíz.
Las clases de almacenamiento aislado permiten crear, enumerar y eliminar
almacenamiento aislado. Los métodos para realizar estas tareas están disponibles
mediante el objeto IsolatedStorageFile. Algunas operaciones requieren disponer de
IsolatedStorageFilePermission que representa el derecho a administrar el
almacenamiento aislado.
El espacio de nombres System.IO.IsolatedStorage contiene tipos que permiten la
creación y el uso de almacenes aislados. Con estos almacenes, se pueden leer y
escribir los datos a los que no puede tener acceso el código de menor confianza y se
puede evitar la exposición de información confidencial que puede guardarse en otro
lugar del sistema de archivos.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://www.developerfusion.com/article/84438/isolated-storage/
http://msdn.microsoft.com/es-es/library/93bskf9z(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.aspx
http://www.reflectionit.nl/Blog/2003/c-inputbox
UNIDAD
6
GESTIÓN Y CONFIGURACIÓN DE APLICACIONES
.NET
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno elabora aplicaciones de mejor rendimiento y
acceso asignando recursos, permisos, componentes, cultura y una adecuada
distribución de la misma para su implementación.
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para el manejo de unidades
aisladas
Los alumnos crean clases que puedan interoperar en aplicaciones COM.
Los alumnos crear aplicaciones que usan Reflection
Los alumnos crean aplicaciones con etiquetas según la cultura que utiliza la PC.
Los alumnos desarrollan los laboratorios de la semana.
6.1.3 SYSTEM.REFLECTION
El espacio de nombres System.Reflection contiene clases e interfaces que
proporcionan una vista administrada de los campos, los métodos y los tipos
cargados, con la posibilidad de crear e invocar tipos dinámicamente.
Clase Assembly
Define un objeto Assembly, que es un bloque constructivo reutilizable,
versionable y autodescriptivo de una aplicación de tipo Common Language
Runtime.
Propiedad Descripción
Codebase Obtiene la ubicación del ensamblado tal y
como se especificó originalmente, por
ejemplo en un objeto AssemblyName.
EntryPoint Obtiene el punto de entrada de este
ensamblado.
Evidence Obtiene la evidencia para este ensamblado
FullName Obtiene el nombre de la presentación del
ensamblado
Location Obtiene la ruta de acceso o la ubicación
UNC del archivo cargado que contiene el
manifiesto
ManifestModule Obtiene el modulo que contiene el manifiesto
para el ensamblado actual.
Propiedad Descripción
GetName Obtiene un objeto AssemblyName para este
ensamblado.
GetCustomAttributes Obtiene los atributos personalizados para
este ensamblado.
GetFile Obtiene los archivos en la tabla de archivos
de un manifiesto de ensamblado.
GetFiles Obtiene los archivos en la tabla de archivos
de un manifiesto de ensamblado.
GetModules Obtiene todos los módulos que forman parte
de este ensamblado.
LABORATORIO 11.1
INVOCANDO UNA DLL EN JAVASCRIPT
Implemente una dll en C# para ser invocado en JavaScript
Selecciona biblioteca de
clases en C#
Nombre de la Aplicación
Desde la opción
HERRAMIENTAS,
seleccionar Crear GUID
2. presionar el
botón Copiar
(copia la clave)
1. Seleccionar
la opción 2
3. Programacion
En la clase impotar la librería System.Runtime.InteropServices, tal como se muestra. A
continuación hacemos algunas declaraciones a la clase, la cual será expuesta al
exterior.
Importar la librería
Hacer visible al
componente
Identificador de la
librería o GUID
Defina una función Bienvenida() la cual retorna un mensaje, tal como se muestra.
Seleccionar Propiedades
del proyecto (Librería)
Una vez dentro de las propiedades nos dirigimos a Compilar y chequeamos la opción
Registrar para interoperabilidad COM.
Selecciona la opción
4. HTML y JavaScript
Con la DLL lista ahora diseñamos la “interfaz gráfica”, para visualizar el mensaje
desde una página Web. Diseña la pagina web, tal como se muestra.
Para testear la página, se guardará con extensión hta, tal como se muestra.
LABORATORIO 11.2
CREANDO UN COMPONENTE COM
Implemente un Componente COM para realizar operaciones numéricas.
Selecciona biblioteca de
clases en C#
Nombre de la Aplicación
Desde la opción
HERRAMIENTAS,
seleccionar Crear GUID
2. presionar el
botón Copiar
(copia la clave)
1. Seleccionar
la opción 2
3. Programacion
En la clase impotar la librería System.Runtime.InteropServices, tal como se muestra. A
continuación hacemos algunas declaraciones a la clase, la cual será expuesta al
exterior.
Importar la librería
Hacer visible al
componente
Identificador de la
librería o GUID
Tipo de Interface
Una vez dentro de las propiedades nos dirigimos a Compilar y chequeamos la opción
Registrar para interoperabilidad COM.
Selecciona la plantilla
A continuación agregamos el
componente a la aplicación.
Selecciona desde la opción
PROYECTO, la opción Agregar
referencia, tal como se muestra
Seleccionar
Seleccionar
Seleccionar la DLL
Presionar para
agregar
Referencia a la
DLL
Instanciar la
clase
TextBox: txtn1
TextBox: txtn2
TextBox:
txtResultado
Programa cada uno de los botones del Formulario, tal como se muestra
Programa cada
botón ejecutandoun
metodo del
componente
Presiona la tecla F5, ingresa los números, al presionar cada uno de los botones,
retornara un resultado
Resumen
Un ensamblado de interoperabilidad primario es un ensamblado único, suministrado
por el proveedor, que contiene definiciones de tipo (como metadatos) de tipos
implementados con COM. Sólo puede haber un ensamblado de interoperabilidad
primario, que debe estar firmado con un nombre seguro por el editor de la biblioteca de
tipo COM. Un único ensamblado de interoperabilidad primario puede englobar más de
una versión de la misma biblioteca de tipos
A partir de .NET Framework versión 4, puede usar el hospedaje en paralelo en el
mismo proceso para ejecutar varias versiones de Common Language Runtime
(CLR) en un único proceso. De forma predeterminada, los componentes COM
administrados se ejecutan con la versión de .NET Framework con la que se
compilaron, sin tener en cuenta la versión de .NET Framework que está cargada
para el proceso..
El espacio de nombres System.Reflection contiene clases e interfaces que
proporcionan una vista administrada de los campos, los métodos y los tipos cargados,
con la posibilidad de crear e invocar tipos dinámicamente..
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://support.microsoft.com/kb/817248/es
https://estebanfuentealba.wordpress.com/tag/how-to-call-c-net-dll-in-java-script/
http://www.elguille.info/NET/revistas/dotNetmania/pdf/dotnetmania
https://estebanfuentealba.wordpress.com/tag/registrar-para-interoperabilidad-com/
http://blogs.msdn.com/b/dynamics_latam/archive/2010/09/27/como-crear-un-
ensamble-con-interoperabilidad-com-para-uso-con-microsoft-dexterity.aspx
UNIDAD
6
GESTIÓN Y CONFIGURACIÓN DE APLICACIONES
.NET
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno elabora aplicaciones de mejor rendimiento y
acceso asignando recursos, permisos, componentes, cultura y una adecuada
distribución de la misma para su implementación.
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para el manejo de unidades
aisladas
Los alumnos crean clases que puedan interoperar en aplicaciones COM.
Los alumnos crear aplicaciones que usan Reflection
Los alumnos crean aplicaciones con etiquetas según la cultura que utiliza la PC.
Los alumnos desarrollan los laboratorios de la semana.
6.2 GLOBALIZACION
6.2.1 Manejo de globalización y cultura en una aplicación .NET
Clase Descripción
Calendar Representa divisiones de tiempo, como semanas,
meses y años.
CompareInfo Implementa un conjunto de métodos para la
comparación de cadenas que tienen en cuenta la
referencia cultural.
CultureInfo Representa información acerca de una referencia
cultural específica que incluye los nombres de la
referencia cultural, el sistema de escritura y el
calendario utilizado, así como el acceso a objetos
específicos de la referencia cultural que
proporcionan información para operaciones
comunes, como la aplicación de formato a fechas
y la ordenación de cadenas.
DateTimeFormatInfo Define el modo en que se aplica formato y se
muestran los valores DateTime, dependiendo de
la referencia cultural.
NumberFormatInfo Define el modo en que se aplica formato y se
muestran los valores numéricos, dependiendo de
la referencia cultural.
RegionInfo Contiene información sobre el país o la región.
StringInfo Proporciona funciones para dividir una cadena en
elementos de texto y recorrer en iteración dichos
elementos.
6.2.3 RegionInfo
LABORATORIO 12.1
CONSULTA DE CULTURAS
Implemente una aplicación que permita listar las culturas administradas por Windows
ListBox:
lbCulturas
2. Programación
Defina las librerías de trabajo
Importar la
librería de
Globalización
Nombre de la
cultura actual
Programe el botón Todas las Culturas para listar todas las culturas administradas por
el .NET Framework
Recorrer las
culturas de tipo
AllCultures
Tipo de Cultura
Programe el botón Culturas Especificas donde liste las culturas especificas: país –
región
Recorrer las
culturas de tipo
AllCultures
Tipo de Cultura
LABORATORIO 12.2
FORMATO DE FECHA
Implemente una aplicación que permita dar formato de fecha según el tipo de cultura
seleccionada
ComboBox: cboCultura
DateTimePicker: dtFecha
2. Programación
Defina las librerías de trabajo para trabajar con la globalización.
DEFINA LA LIBRERÍA
DE GLOBALIZACIÓN
Programe en Evento Load del Formulario para listar las culturas en el ComboBox1, tal
como se muestra
Recorrer las
culturas de tipo
Específicas
Agregar el
nombre al
comboBox
Programe el botón Visualizar para dar formato de fecha corta y larga según el tipo de
cultura seleccionada
Definir el formato de
fecha de cultura
seleccionada
Visualizar el formato
de fecha corta y
larga
LABORATORIO 12.3
FORMATO DE CULTURA ESPECÍFICA
Implemente una aplicación que permita dar formato según el tipo de cultura
seleccionada
ComboBox: cboCultura
2. Programación
Defina las librerías de trabajo para trabajar con la globalización.
DEFINA LA LIBRERÍA
DE GLOBALIZACIÓN
Programe en Evento Load del Formulario para listar las culturas en el ComboBox
cboCultura, tal como se muestra
Recorrer las
culturas de tipo
Específicas
Agregar el
nombre al
comboBox
Instanciar la
cultura
seleccionada
Visualizar los
formatos
Resumen
Ahora, los namespaces que envuelven la funcionalidad .NET para la creación de
globalización y localización de aplicaciones son: System.Globalization,
System.Resources, System.Text. Desarrollar aplicaciones para uso global usando
.NET Framework (internalización de aplicaciones) incluye tanto localización como
globalización.
La clase CultureInfo contiene información específica de la referencia cultural, como el
idioma, el país o región, el calendario y las convenciones culturales asociadas a una
referencia cultural específica. Esta clase también proporciona la información necesaria
para realizar operaciones específicas de la referencia cultural, como la distinción de
mayúsculas y minúsculas, el formato de fechas y números, y la comparación de
cadenas.
El objeto RegionInfo de .NET Framework corresponde a un país o región. Para
inicializar un objeto RegionInfo mediante un objeto CultureInfo, su aplicación debe
especificar un objeto CultureInfo que represente una referencia cultural concreta,
como ar-DZ para el árabe de Argelia. Si se intenta inicializar un objeto RegionInfo con
un objeto CultureInfo que representa una referencia cultural neutra (por ejemplo, "ar"
para árabe), se produce una excepción.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-es/library/system.globalization.aspx
http://www.elguille.info/NET/library/System.Globalization.aspx
http://msdn.microsoft.com/es-es/library/aax7sdch.aspx
UNIDAD
7
TRABAJANDO CON WINDOWS PRESENTATION
FOUNDATION
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows
Framework de WPF
i. Document
1. WPF provee muchas características para combinar documentos, IU y
contenidos audiovisuales. Los documentos usualmente contienen un flujo
de controles e imágenes, los cuales son difíciles de proporcionar con los
controles tradicionales de Windows.
ii. UI
1. Los controles UI permiten una alta interacción con el usuario, pero no se
concentran tanto en el soporte para textos.
iii. Media
v. Administrador de ventanas
1. Maneja la mayor parte del trabajo duro de la administración de ventanas,
como maximizar, minimizar y cuadros de dialogo.
a. UIElement
b. FrameworkElement
c. ContentElement
d. FrameworkContentElement
Freezable Objects
Los objetos del tipo Freezable presentan características especiales
que ayudan a desarrollar una aplicación con mejor funcionamiento.
Los objetos del tipo Freezable incluyen brushes, pen,
transformaciones y animaciones.
If mybrush.CanFreeze Then
mybrush.Freeze()
End If
7.1.3 XAML
Todas las clases de WPF tienen constructores sin parámetros y hacer un uso
excesivo de las propiedades. Esto se hace para que sea perfectamente apto
para lenguajes XML como XAML.
Ventajas de XAML
Todo lo que puedes hacer en código de programación se puede
hacer también en XAML. XAML es sólo otra manera de crear e
inicializar objetos.
Ejemplo de XAML
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pre
sentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Hola" HorizontalAlignment="Left"
Margin="87,83,0,0" VerticalAlignment="Top"
Width="176" Height="48"/>
</Grid>
</Window>
XAML vs Código
A continuación vamos a construir un StackPanel con un texBlock y
un control Button en etiquetas XAML y con código en Visual Basic.
<StackPanel>
<TextBlock Margin="80" Width="100" Height="30"
FontSize="20" >Bienvenido</TextBlock>
<Button Margin="60" Content="Hola" Width="60"
Height="30"></Button>
</StackPanel>
Como se puede ver el código XAML es mucho más corto y más fácil
de interpretar.
<Button>
<Button.Content>
<Image Source="imagenes/ok.png" Width="40"
Height="30"></Image>
</Button.Content>
</Button>
Programando en XAML
Para la creación de aplicaciones productivas será necesario trabajar con
eventos, donde proporcionamos la lógica de programación o incluir
operaciones que no tengan nada que ver con la interface de usuario.
La lógica de programación se redacta en el code-behind.
La jerarquía de clases será útil ya que cada hijo puede heredar las
propiedades y estilos del padre. Por ejemplo los hijos del StackPanel tendrán
un estilo de posición distinto de los hijos que tiene el DockPanel.
El árbol visual contiene todos los elementos lógicos, incluyendo los elementos
visuales de la plantilla de cada elemento. El árbol visual es responsable de:
Representar elementos visuales
Propagar el elemento opacidad
Propagar diseño y RenderTransforms
Propagar la propiedad isEnabled
No aplica Hit-Testing
relativeSource, buscar su ancestro
LABORATORIO 13.1
Creando una aplicación básica en WPF
Implementa una aplicación WPF donde calcule y visualice el promedio de dos notas
ingresadas en controles TextBox, visualizando una condición: Aprobado si la nota
promedio es mayor o igual a 12.5 o Desaprobado si la nota promedio es menor a 12.5
Main Window
Controles comunes
para la aplicación WPF
Estructura XAML
Asignar propiedades al
control Label
Para finalizar agrega controles Button y defina sus propiedades, tal como se muestra
en la página XAML
4. Programación
A continuación vamos a programar el evento Click del botón Proceso, para ello
selecciona desde la ventana propiedades el botón Evento (forma de rayo) y se lista los
eventos del control. Hacer doble click al evento Click
Selecciona el evento
Click y hacer doble
click a la caja
5. Ejecutar el Formulario
Presiona la tecla F5, donde se muestra el Formulario en tiempo de ejecución, ingresa
los datos en los controles, al presionar el botón PROCESO, obtenemos el numero en
binario.
LABORATORIO 13.2
Creando una aplicación básica en WPF
Implementa una aplicación WPF donde calcule y visualice la venta de accesorios de
PC; selecciona el tipo de accesorio el cual retorna el precio, ingrese la cantidad, la
venta es el producto del precio por la cantidad.
Selecciona la opción
Agregar Ventana
Selecciona el ítem Ventana (WPF) y asigne un nombre winVenta, tal como se muestra
Selecciona el ítem
Ventana (WPF)
Asigne un nombre al
ítem Ventana
2. Diseño de Formulario
Diseña el control ListBox, el cual va a definir por cada ListBoxItem un StackPanel que
almacene una imagen y un control TextBlock
Defina un ListBoxItem, el
cual representa el Item del
ListBox
Diseña el resto de los controles del desarrollo: defina los controles Label, textBox y el
control Proceso, tal como se muestra.
2. Programación
Programa el método de evento Click del botón Proceso, donde, declaro las variables,
ingresamos la cantidad, evalúo el Indice Seleccionado del control listBox, recuperando
el precio; a continuación calculamos y visualizamos el importe
3. Ejecutar el programa
Desde el App.xaml, cambiar el archivo StartupUri por la ventana que hemos diseñado
y programado
Asigne el nombre de la
ventana de inicio
LABORATORIO 13.3
Creando una aplicación en WPF
Se desea implementar una aplicación WPF que permita registrar los datos de libros,
listando la información de los libros registrados en un control ListView
1. Diseño de Formulario
Primero agrego una ventana (Window) al proyecto, tal como se muestra:
Seleccione el ítem
Ventana (WPF)
Asigne el nombre a
la Ventana
Presentación de los controles Label, TextBox, Button y ListView diseñados por las
etiquetas XAML
2. Programación
Agrega al proyecto la clase clsArticulo, y defina cada uno de los atributos y
propiedades.
Programa el botón Agregar el cual agrega un artículo al control ListView lvLibros, para
ello defina un objeto de la clase Articulo, pasar los datos y agrega el objeto a la
colección del control ListView
Programa el botón Eliminar el cual elimina un artículo al control ListView lvLibros por
su codigo, para ello buscamos el registro porsu código, si existe, quitarlo del control
ListView
3. Ejecutar el programa
Seleccione desde la propiedades del proyecto, la opción URI de inicio y presiona F5.
Ingrese la datos en los controles TextBox, al presionar el botón AGREGAR agregamos
y visualizamos el registro al control ListView
Resumen
Windows Presentation Foundation (WPF) es una de las novedosas tecnologías de
Microsoft. Potencia las capacidades de desarrollo de interfaces de interacción
integrando y ampliando las mejores características de las aplicaciones Windows y de
las aplicaciones web.
Un gran porcentaje de las clases de WPF hereda de 4 clases que son las siguientes:
UIElement, FrameworkElement, ContentElement, FrameworkContentElement.
UIElement y ContentElement heredan de la clase DependencyObjetc, a través de
diferentes caminos. En términos de herencia, UIElement también posee la clase Visual,
que expone el nivel más bajo de gráficos soportado en WPF, definiendo regiones
rectangulares independientes en la plantilla.
Los objetos del tipo Freezable presentan características especiales que ayudan a
desarrollar una aplicación con mejor funcionamiento. Los objetos del tipo Freezable
incluyen brushes, pen, transformaciones y animaciones.
XAML siglas de Extensible Application Markup Language. Es un lenguaje declarativo
basado en XML para describir gráficamente interfaces de usuario visuales. Fue
diseñado para soportar las clases y los métodos de la plataforma de desarrollo .NET.
XAML fue diseñado para soportar las clases y los métodos de la plataforma de
desarrollo .NET que tienen relación con la interacción con el usuario, en especial,
el despliegue en pantalla. XAML significa Extensible Avanlon Markup Language
(Lenguaje de Marcas Extensibles de Avalon), habiendo sido Avalon el nombre
clave original de la base de presentación de Windows, nombre que engloba a este
grupo de clases de .NET.
Existen dos declaraciones:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Las propiedades se escriben normalmente inline como se conoce a partir de XML
<Button Content="OK" />; pero lo que si queremos colocar un objeto más
complejo como el contenido de una imagen o tal vez un panel de cuadrícula
entera, para ello podemos utilizar la sintaxis de elementos de propiedad.
Para la creación de aplicaciones productivas será necesario trabajar con eventos,
donde proporcionamos la lógica de programación o incluir operaciones que no
tengan nada que ver con la interface de usuario.
Los elementos de una interfaz de usuario de WPF se encuentran relacionados en
forma jerárquica. Esta relación se llama la LogicalTree. La plantilla de un elemento se
compone de múltiples elementos visuales. Este árbol se llama VisualTree.
Si desea consultar m[as información acerca de WPF:
http://www.wpftutorial.net/
http://www.onglasses.net/wwwroot/upfiles/user/manual_wpf.pdf
http://www.wpftutorial.net/ListBoxItemsArrange.html
http://www.wpf-tutorial.com/panels/grid-units/
http://holowczak.com/winform_wpf_csharp/4/
http://tech.pro/tutorial/742/wpf-tutorial-using-the-listview-part-1
UNIDAD
8
OPERACIONES CONECTADAS A UN ORIGEN DE
DATOS
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para consultar datos desde un
origen de datos
Los alumnos desarrollan aplicaciones en Windows para realizar actualizaciones
a un origen de datos.
En la actualidad ADO.NET es parte del .NET Framework, esto quiere decir que
es, de alguna manera, parte del sistema operativo y no más un redistribuible de
4 ó 5 MB que se necesita alojar junto al cliente o junto al instalador de una
aplicación. Esto significa que nosotros, como desarrolladores, estaremos
enfocados más al acceco a datos y a la lógica para manipular estos datos, y no
a crear una librería para acceder a los datos.
Componentes de ADO.NET
Los dos componente principales de ADO.NET para el acceso a datos y
su manipulación son los proveedores de datos .NET Framework y
DataSet.
LINQ to SQL
LINQ to SQL admite consultas en un modelo de objetos asignado a las
estructuras de datos de una base de datos relacional sin utilizar un
modelo conceptual intermedio. Cada tabla se representa mediante una
clase distinta, acoplando de manera precisa el modelo de objetos al
esquema de la base de datos relacional. LINQ to SQL traduce
Language-integrated queries del modelo de objetos a Transact-SQL y lo
envía a la base de datos para su ejecución. Cuando la base de datos
devuelve los resultados, LINQ to SQL los vuelve a traducir a objetos.
XML Y ADO.NET
ADO.NET aprovecha la eficacia de XML para proporcionar acceso a
datos sin conexión. ADO.NET fue diseñado teniendo en cuenta las
clases de XML incluidas en .NET Framework; ambos son componentes
de una única arquitectura.
librería System.Data.SqlClient.
Proveedor de datos .NET Para orígenes de datos que se
Framework para OLE DB exponen mediante OLE DB. Utiliza
la librería System.Data.OleDb.
Proveedor de datos .NET Para orígenes de datos que se
Framework para ODBC exponen mediante ODBC. Utiliza la
librería System.Data.Odbc.
Proveedor de datos .NET Para orígenes de datos de Oracle.
Framework para Oracle El proveedor de datos .NET
Framework para Oracle es
compatible con la versión 8.1.7 y
posteriores del software de cliente
de Oracle y utiliza la librería
System.Data.OracleClient.
Proveedor EntityClient Proporciona acceso a datos para las
aplicaciones de Entity Data Model.
Utiliza la librería
System.Data.EntityClient.
Objeto Descripción
Connection Establece una conexión a una fuente de datos. La
clase base para todos los objetos Connection es
DbConnection.
Command Ejecuta un comando en una fuente de datos. Expone
Parameters y puede ejecutarse en el ámbito de un
objeto Transaction desde Connection. La clase base
para todos los objetos Command es DbCommand.
DataReader Lee un flujo de datos de solo avance y solo lectura
desde una fuente de datos. La clase base para todos
los objetos DataReader es DbDataReader.
DataAdapter Llena un DataSet y realiza las actualizaciones
necesarias en una fuente de datos. La clase base
para todos los objetos DataAdapter es
DbDataAdapter.
Objeto Descripción
Transaction Incluye operaciones de actualización en las
transacciones que se realizan en el origen
de datos. ADO.NET es también compatible
con las transacciones que usan clases en el
espacio de nombres System.Transactions.
CommandBuilder Un objeto auxiliar que genera
automáticamente las propiedades de
comando de un DataAdapter o que obtiene
de un procedimiento almacenado
información acerca de parámetros con la
que puede rellenar la colección Parameters
de un objeto Command.
DATASET EN ADO.NET
El objeto DataSet es una representación residente en memoria de datos
que proporciona un modelo de programación relacional coherente
independientemente del origen de datos. Se puede utilizar con muchos
y distintos orígenes de datos, con datos XML o para administrar datos
locales de la aplicación.
Figura 2: DataSet
Referencia: edn.embarcadero.com
cn.Open();
Donde:
Data Source: Origen de datos
Initial Catalog=Nombre de la base de datos
uid = usuario
pwd = clave
ConnectionStringSettings cnset =
ConfigurationManager.ConnectionStrings["cadena"];
cn.Open();
LABORATORIO 14.1
Consulta de datos: trabajando con una conexión a un origen de
datos.
Implementa una aplicación donde ejecute una consulta, a una base de datos en SQL
Server, visualizando los registros de la tabla tb_clientes. Defina la conexión en el
mismo formulario de la aplicación.
Selecciona
aplicación para
Windows Form
Nombre del
proyecto
Control DataGridView:
dgClientes
3. Programación
Importar la librería para trabajar con la base de datos Negocios2015 siendo su motor
SQL Server
Referencia a la librería
SQL Server
A continuación programa el evento Load del Formulario, para listar los registros de
tb_clientes
LABORATORIO 14.2
Consulta de datos: Ejecutando un procedimiento almacenado.
Implementa una aplicación donde liste los registros de tb_clientes ejecutando un
procedimiento almacenado registrado en la base de datos Negocios2015.
Crear un procedimiento
almacenado donde liste los
registros de clientes
Control DataGridView:
dgClientes
3. Programación
Importar la librería para trabajar con la base de datos Negocios2015 siendo su motor
SQL Server
Referencia a la librería
SQL Server
LABORATORIO 14.3
Consulta de datos: Publicando una cadena de conexión.
Implementa una aplicación donde ejecute liste los registros de tb_productos
ejecutando un procedimiento almacenado registrado en la base de datos
Negocios2015.
Crear un procedimiento
almacenado donde liste los
registros de productos
DataGridView: dgProductos
4. Programación
Definida la cadena de conexión en el App.config, agregar la librería
System.Configuration, en la ventana Administración de referencias, tal como se
muestra
Selecciona la opción
Ensamblados
Selecciona el nameSpace
System.Configuration
Referencia a las
librerías
Instanciar la clase
SqlConnection
Instanciar la conexión
DataAdapter donde
ejecuta el procedure
Resumen
Tradicionalmente, el procesamiento de datos ha dependido principalmente de un
modelo de dos niveles basado en una conexión. A medida que aumenta el uso que
hace el procesamiento de datos de arquitecturas de varios niveles, los
programadores están pasando a un enfoque sin conexión con el fin de proporcionar
una mejor escalabilidad a sus aplicaciones.
Los dos componente principales de ADO.NET para el acceso a datos y su
manipulación son los proveedores de datos .NET Fraework y DataSet.
Los proveedores de datos .NET Framework sirven para conectarse a una base de
datos, ejecutar comandos y recuperar resultados. Los proveedores de datos .NET
Framework son ligeros, de manera que crean un nivel mínimo entre el origen de
datos y el código, con lo que aumenta el rendimiento sin sacrificar funcionalidad.
El proveedor de datos .NET Framework para SQL Server utiliza la librería
System.Data.SqlClient
Los principales componentes de un proveedor de datos .NET Framework son:
o Connection
o Command
o DataReader
o DataAdapter
El objeto DataSet es esencial para la compatibilidad con escenarios de datos
distribuidos desconectados con ADO.NET. Representa un conjunto completo de
datos que incluye tablas relacionadas y restricciones; así como relaciones entre las
tablas
En ADO.NET se utiliza un objeto Connection para conectar con un determinado
origen de datos mediante una cadena de conexión en la que se proporciona la
información de autenticación necesaria. El objeto Connection utilizado depende del
tipo de origen de datos.
Para conectarse a Microsoft SQL Server 7.0 o posterior, utilice el objeto
SqlConnection del proveedor de datos .NET Framework para SQL Server. El
proveedor de datos .NET Framework para SQL Server admite un formato de
cadena de conexión que es similar al de OLE DB (ADO).
Debe cerrar siempre el objeto Connection cuando deje de usarlo. Esta operación
se puede realizar mediante los métodos Close o Dispose del objeto Connection.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-es/library/27y4ybxw(v=vs.110).aspx
http://hampprogramandoando.blogspot.com/2013/05/ado-net-45-parte-iv-
consulta-de-datos.html
http://msdn.microsoft.com/es-es/library/ms254494(v=vs.110).aspx
http://msdn.microsoft.com/es-es/library/27y4ybxw%28v=vs.110%29.aspx
UNIDAD
8
OPERACIONES CONECTADAS A UN ORIGEN DE
DATOS
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para consultar datos desde un
origen de datos
Los alumnos desarrollan aplicaciones en Windows para realizar actualizaciones
a un origen de datos.
Los proveedores de .NET Framework para ADO.NET son utilizados por las
aplicaciones para trabajar con un determinado origen de datos, permitiendo
ejecutar instrucciones SQL para recuperar datos mediante el DataAdapter o el
DataReader.
Una de las operaciones claves para cualquier aplicación que accede a una
base de datos es la capacidad de actualizar los datos almacenados en la
misma. En ADO.NET, los datos almacenados desde el origen de datos
recuperan y actualizan mediante los objetos DataAdapter, DataSet y Command
y también mediante transacciones.
Proveedor Descripcion
OledbDataAdapter Proveedor de datos para OLEDB
SqlDataAdapter Proveedor de datos para SQL Server
OdbcDataAdapter Proveedor de datos para ODBC
OracleDataAdapter Proveedor de datos para Oracle
Puede utilizar el método Read del objeto DataReader para obtener una
fila a partir de los resultados de una consulta.Para tener acceso a cada
columna de la fila devuelta, puede pasar a DataReader el nombre o
referencia numérica de la columna en cuestión.Sin embargo, el mejor
rendimiento se logra con los métodos que ofrece DataReader y que
permiten tener acceso a los valores de las columnas en sus tipos de
datos nativos (GetDateTime, GetDouble, GetGuid, GetInt32, etc.).
Proveedor Descripcion
OledbDataReader Proveedor de datos para OLEDB
SqlDataReader Proveedor de datos para SQL Server
OdbcDataReader Proveedor de datos para ODBC
OracleDataReader Proveedor de datos para Oracle
Cerrar el DataReader
Siempre debe llamar al método Close cuando haya terminado de utilizar
el objeto DataReader.
DataTable contiene una fila por cada una de las columnas del conjunto
de resultados. Cada columna de una fila de la tabla de esquema está
asociada a una propiedad de la columna que se devuelve en el conjunto
de resultados. ColumnName es el nombre de la propiedad y el valor de
la columna es el de la propiedad. En el ejemplo de código siguiente se
muestra la información del esquema de DataReader.
LABORATORIO 15.1
Consulta de datos parametrizada
Implementa una aplicación donde liste los registros de la tabla tb_clientes filtrando los
registros por las iniciales de su campo NombreCia, crear un procedimiento
almacenado para este proceso.
Selecciona
aplicación para
Windows Form
Nombre del
proyecto
Agregar Referencia
Definida la cadena de conexión en el App.config, agregar la librería
System.Configuration, en la ventana Administración de referencias, tal como se
muestra.
Selecciona la opción
Ensamblados
Selecciona el nameSpace
System.Configuration
Creacion del
procedimiento
almacenado
Definir el
parámetro de la
consulta
TextBox: txtNombre
DataGridView: dgClientes
Referencia a las
librerías
Instanciar la clase
SqlConnection
DataAdapter donde
ejecuta el procedure
Defina su parámetro
Defina el DataTable,
poblar y visualizar los
datos en el dgClientes
Presione la tecla F5, ingrese las iniciales del nombre en el TextBox, al presionar el
boton Consulta visualice los clientes por las iniciales del nombre ingresado
LABORATORIO 15.2
Consulta de datos parametrizada
Implementa una aplicación donde liste los registros de la tabla tb_pedidoscabe entre
un rango de dos fechas de su campo FechaPedido, crear un procedimiento
almacenado para ejecutar la consulta.
Creacion del
procedimiento
almacenado
Definir el
parámetro de la
consulta
DateTimePicker: dtInicio
DateTimePicker: dtTermino
DataGridView: dgPedidos
Referencia a las
librerías
Instanciar la clase
SqlConnection
DataAdapter donde
ejecuta el procedure
Defina sus
parámetros
Defina el DataTable,
poblar y visualizar los
datos en dgPedidos
Presione la tecla F5, selecciona las fechas desde los controles dateTimePicker, al
presionar el boton Consulta visualice los pedidos entre el rango de las fechas
LABORATORIO 15.3
Consulta de datos parametrizada
Implementa una aplicación donde liste los registros de la tabla tb_pedidoscabe por un
cliente seleccionado, crear un procedimiento almacenado para ejecutar la consulta.
ComboBox: cboCliente
DataGridView: dgPedidos
Referencia a las
librerías
Instanciar la clase
SqlConnection
DataAdapter donde
ejecuta el procedure
Defina el DataTable,
poblar y visualizar los
datos en cboCliente
DataAdapter donde
ejecuta el procedure
Defina sus
parámetros
Defina el DataTable,
poblar y visualizar los
datos en dgPedidos
Presione la tecla F5, selecciona un cliente, al presionar el boton Consulta, listamos los
pedidos del cliente seleccionado
Control Button:
btnConsulta
Control TextBox:
txtaño
Control Button:
btnConsulta
Control ComboBox:
cboMes
Control ComboBox:
cboAño
Resumen
La función principal de cualquier aplicación que trabaje con una fuente de datos es
conectarse a dicha fuente de datos y recuperar los datos que se almacenan.
La clase DataAdapter se encarga de las operaciones entre la capa de datos y la
capa intermedia donde los datos son transferidos. Se puede decir que sirve como
puesnte entre un objeto DataSet y un origen de datos asociados para recuperar y
guardar datos.
Básicamente, permite rellenar (Fill) el objeto DataSet para que sus datos coincidan
con los del origen de datos y permite actualizar (Update) el origen de datos para
que sus datos coincidan con los del DataSet.
La recuperación de datos mediante DataReader implica crear una instancia del
objeto Command y de un DataReader a continuación, para lo cual se llama a
Command.ExecuteReader a fin de recuperar filas de un origen de datos.
Puede utilizar el método Read del objeto DataReader para obtener una fila a partir
de los resultados de una consulta.Para tener acceso a cada columna de la fila
devuelta, puede pasar a DataReader el nombre o referencia numérica de la
columna en cuestión.Sin embargo, el mejor rendimiento se logra con los métodos
que ofrece DataReader y que permiten tener acceso a los valores de las columnas
en sus tipos de datos nativos (GetDateTime, GetDouble, GetGuid, GetInt32, etc.).
Siempre debe llamar al método Close cuando haya terminado de utilizar el objeto
DataReader. Si Command contiene parámetros de salida o valores devueltos,
éstos no estarán disponibles hasta que se cierre el DataReader.
En el caso en que se devuelvan varios resultados, el DataReader proporciona el
método NextResult para recorrer los conjuntos de resultados en orden
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-es/library/bh8kx08z(v=vs.110).aspx
http://msdn.microsoft.com/es-es/library/ms254931(v=vs.110).aspx
http://msdn.microsoft.com/es-es/library/bbw6zyha(v=vs.110).aspx
http://msdn.microsoft.com/es-es/library/ex6y04yf(v=vs.110).aspx
UNIDAD
8
OPERACIONES CONECTADAS A UN ORIGEN DE
DATOS
Temario
ACTIVIDADES PROPUESTAS
Los alumnos desarrollan aplicaciones en Windows para consultar datos desde un
origen de datos
Los alumnos desarrollan aplicaciones en Windows para realizar actualizaciones
a un origen de datos.
Proveedor Descripcion
OledbCommand Proveedor de datos para OLEDB
SqlCommand Proveedor de datos para SQL Server
OdbcCommand Proveedor de datos para ODBC
OracleCommand Proveedor de datos para Oracle
Cada uno de estos objetos expone métodos para ejecutar comandos que
se basan en el tipo de comando y el valor devuelto deseado, tal como se
describe en la tabla siguiente:
Valor Descripción
CommandBehavior.CloseConnection Se utiliza para cerrar la conexión
en forma automática, tan pronto
como el dataReader es cerrado.
CommandBehavior.SingleResult Retorna un único conjunto de
resultados
CommandBehavior.SingleRow Retorna una fila
Las instrucciones SQL que modifican datos (por ejemplo INSERT, UPDATE
o DELETE) no devuelven ninguna fila. De la misma forma, muchos
procedimientos almacenados realizan alguna acción pero no devuelven
filas. Para ejecutar comandos que no devuelvan filas, cree un objeto
Command con el comando SQL adecuado y una Connection, incluidos los
Parameters necesarios. El comando se debe ejecutar con el método
ExecuteNonQuery del objeto Command.
LABORATORIO 16.1
Actualizacion de datos
Implementa una aplicación donde permita insertar y actualizar registros a la tabla
tb_paises, crear procedimientos almacenados para este proceso.
Selecciona
aplicación para
Windows Form
Nombre del
proyecto
Agregar Referencia
Definida la cadena de conexión en el App.config, agregar la librería
System.Configuration, en la ventana Administración de referencias, tal como se
muestra.
Selecciona la opción
Ensamblados
Selecciona el nameSpace
System.Configuration
Procedimiento almacenado
donde liste los paises
Procedimiento almacenado
donde agregue un registro a la
tabla tb_paises
Procedimiento almacenado
donde actualice el registro de
un país por su código
TextBox: txtIdpais
TextBox: txtNombre
DataGridView: dgPaises
3. Programación
A continuación importamos las librerías del proceso
Instanciar SqlConnection
Programa el evento Load del formulario, donde cargar los datos al control
DataGridView, tal como se muestra.
Defina sus
parámetros
Antes de ejecutar,
abrir conexión
Ejecutar con
ExecuteNonQuery
Al finalizar, cerrar la
conexión y listar
Presiona la tecla F5 para ejecutar el Formulario, ingrese los datos en los controles, al
presionar el boton Agregar, ejecuta el proceso donde inserta el registro, visualizando el
resultado en una caja de mensaje, tal como se muestra
Defina sus
parámetros
Antes de ejecutar,
abrir conexión
Ejecutar con
ExecuteNonQuery
Al finalizar, cerrar la
conexión y listar
Presiona la tecla F5 para ejecutar el Formulario, ingrese los datos en los controles, al
presionar el boton Actualizar, ejecuta el proceso donde actualiza el registro por su
idpais, visualizando el resultado en una caja de mensaje, tal como se muestra
LABORATORIO 16.2
Actualizacion de datos - Propuesto
Se desea implementar un Formulario donde realice el mantenimiento a la tabla
tb_clientes: agregar, actualizar y eliminar registros. Utilice procedimientos
almacenados para ejecutar estos procesos
Resumen
Para crear un comando, puede utilizar uno de los constructores de comando del
proveedor de datos .NET Framework con el que esté trabajando. Los constructores
pueden aceptar argumentos opcionales, como una instrucción SQL para ejecutar
en el origen de datos, un objeto DbConnection o un objeto DbTransaction.
El proveedor de datos .NET Framework para OLE DB incluye un objeto
OleDbCommand, el proveedor de datos .NET Framework para SQL Server incluye un
objeto SqlCommand, el proveedor de datos .NET Framework para ODBC incluye un
objeto OdbcCommand y el proveedor de datos .NET Framework para Oracle incluye
un objeto OracleCommand.
El objeto Command de ADO.NET tiene un método ExecuteReader que permite
ejecutar una consulta que retorna uno o más conjunto de resultados. Al ejecutar el
método ExecuteReader, podemos pasar un parámetro al método el cual representa la
enumeración CommandBehavior, que permite controlar al Command como se
ejecutado.
Los procedimientos almacenados ofrecen numerosas ventajas en el caso de
aplicaciones que procesan datos. Mediante el uso de procedimientos almacenados, las
operaciones de bases de datos se pueden encapsular en un solo comando, optimizar
para lograr el mejor rendimiento, y mejorar con seguridad adicional.
El proveedor de datos de .NET Framework para SQL Server no admite el uso del
marcador de posición de signo de interrogación de cierre (?) para pasar parámetros a
una instrucción SQL o a un procedimiento almacenado. Este proveedor trata los
parámetros del procedimiento almacenado como parámetros con nombre y busca
marcadores de parámetros coincidentes.
Para crear un objeto DbParameter, se puede usar su constructor o bien se puede
agregar a DbParameterCollection mediante una llamada al método Add de la
colección DbParameterCollection.
Las instrucciones SQL que modifican datos (por ejemplo INSERT, UPDATE o
DELETE) no devuelven ninguna fila. De la misma forma, muchos procedimientos
almacenados realizan alguna acción pero no devuelven filas. Para ejecutar comandos
que no devuelvan filas, cree un objeto Command con el comando SQL adecuado y una
Connection, incluidos los Parameters necesarios. El comando se debe ejecutar con el
método ExecuteNonQuery del objeto Command.
Si desea saber más acerca de estos temas, puede consultar las siguientes
páginas.
http://msdn.microsoft.com/es-es/library/ms254953(v=vs.110).aspx
http://msdn.microsoft.com/es-es/library/yy6y35y8(v=vs.110).aspx
http://www.ehu.es/mrodriguez/archivos/csharppdf/ADONET/ADONET.pdf
http://msdn.microsoft.com/es-es/library/3btz0xwf(v=vs.110).aspx
http://msdn.microsoft.com/es-es/library/ms254953(v=vs.110).aspx
http://msdn.microsoft.com/es-es/library/0fx37fx7(v=vs.110).aspx
APENDICE
CONTROLES ESTANDAR
Control Descripción
Representa un control de botón de Windows
Propiedades
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Image: obtiene o establece la imagen que se muestra en un
control de botón.
Margin: obtiene o establece el espacio entre controles.
Name: obtiene o establece el nombre del control.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
TextAlign: obtiene o establece la alineación del texto en el
control del botón.
Visible: obtiene o establece un valor que indica si se muestra el
control.
Eventos
Click: Se produce cuando se hace clic en el control.
Propiedades:
AutoCheck: obtiene o establece un valor que indica si los
valores Checked o de CheckState se modifican en forma
automática cuando se hace click en el control
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Checked: obtiene o establece un valor que indica si el control
está en estado activada.
CheckState: obtiene o establece el estado del CheckBox
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Image: obtiene o establece la imagen que se muestra en un
control de botón.
Margin: obtiene o establece el espacio entre controles.
Name: obtiene o establece el nombre del control.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
TextAlign: obtiene o establece la alineación del texto en el
control.
ThreeState: obtiene o establece un valor que indica si
CheckBox permitirá a tres estados comprobados en lugar de
dos.
Visible: obtiene o establece un valor que indica si se muestra el
control
Eventos
CheckedChanged: se produce cuando el valor de la a
propiedad de Checked.
Click: Se produce cuando se hace clic en el control.
Propiedades:
AllowSelection: obtiene un valor que indica si ListBox habilita
actualmente la selección de elementos de lista.
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
CheckedIndices: colección de índices protegidos en este
CheckedListBox.
CheckedItems: colección de elementos activados en este
CheckedListBox.
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Items: obtiene la colección de elementos de este control.
Margin: obtiene o establece el espacio entre controles.
Name: obtiene o establece el nombre del control.
SelectedIndex: obtiene o establece el índice de base cero del
elemento actualmente seleccionado en el control ListBox
SelectedIndices: obtiene una colección que contiene los
índices de base cero de todos los elementos actualmente
seleccionados en el control ListBox.
SelectedItem: obtiene o establece el elemento actualmente
seleccionado en el control ListBox
SelectedIndices: obtiene una colección que contiene los
elementos actualmente seleccionados en el control ListBox.
SelectedValue: obtiene o establece el valor de la propiedad
miembro especificada por la propiedad ValueMember.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
ValueMember: obtiene o establece una cadena que especifica
la propiedad de origen de datos del que dibujar el valor.
Visible: obtiene o establece un valor que indica si se muestra el
control
Eventos
Click: Se produce cuando se hace clic en el control.
ItemCheck: Se produce cuando el estado activada de los
cambios de un elemento.
SelectedIndexChanged: Se produce cuando se hace
modificado la propiedad SelectedIndex o la colección
SelectedIndices.
SelectedValueChanged: Se produce cuando cambia la
propiedad SelectedValue.
Propiedades:
AllowSelection: obtiene un valor que indica si ListBox habilita
actualmente la selección de elementos de lista.
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
DropDownStyle: obtiene o establece un valor que especifica el
estilo del cuadro combinado.
DropDownWidth: obtiene o establece el ancho de la parte
desplegable de un cuadro combinado.
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
FlatStyle: obtiene o establece la apariencia del ComboBox.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Items: obtiene la colección de elementos de este control.
Margin: obtiene o establece el espacio entre controles.
Name: obtiene o establece el nombre del control.
SelectedIndex: obtiene o establece el índice de base cero del
elemento actualmente seleccionado en el control ListBox
SelectedItem: obtiene o establece el elemento actualmente
seleccionado en el control ListBox
SelectedText: obtiene o establece el texto que se selecciona en
la parte de un ComboBox que se puede editar.
SelectedValue: obtiene o establece el valor de la propiedad
miembro especificada por la propiedad ValueMember.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
ValueMember: obtiene o establece una cadena que especifica
la propiedad de origen de datos del que dibujar el valor.
Visible: obtiene o establece un valor que indica si se muestra el
control
Eventos
Click: Se produce cuando se hace clic en el control.
SelectedIndexChanged: Se produce cuando se hace
modificado la propiedad SelectedIndex o la colección
SelectedIndices.
SelectedValueChanged: Se produce cuando cambia la
propiedad SelectedValue.
Propiedades
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control.
CalendarFont: obtiene o establece el estilo de fuente aplicado
al control.
CalendarForeColor: obtiene o establece el color de primer
plano del calendario.
CalendarMonthBackGround: obtiene o establece el color de
fondo del mes del calendario.
CalendarTitleBackColor: obtiene o establece el color de fondo
del título del calendario.
Checked: obtiene o establece un valor que indica si la
propiedad de Value se ha establecido con un valor de fecha u
hora válidas y el valor mostrado se puede actualizar.
CustomFormat: obtiene o establece la cadena personalizada
de fecha y de formato de hora.
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Format: obtiene o establece el formato de fecha y hora
mostrada en el control.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Image: obtiene o establece la imagen que se muestra en un
control de botón.
Margin: obtiene o establece el espacio entre controles.
MaxDate: obtiene o establece la fecha y hora máxima que
puede ser seleccionado en el control.
MaximumDateTime: obtiene el valor de fecha máximo
permitido para el control.
MinDate: obtiene o establece la fecha y hora mínima que puede
seleccionar el control.
MinimumDateTime: obtiene el valor de fecha mínimo permitido
para el control.
Name: obtiene o establece el nombre del control.
ShowCheckBox: obtiene o establece un valor que indica si una
casilla se muestra a la izquierda de la fecha seleccionada.
ShowUpDown: obtiene o establece un valor que indica si un
control de botón de número se utiliza para ajustar la fecha del
valor de hora.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
Value: obtiene o establece la fecha y el valor de hora asignados
al control.
Visible: obtiene o establece un valor que indica si se muestra el
control.
Eventos
Click: Se produce cuando se hace clic en el control.
CloseUp: Se produce cuando se descarta el calendario
desplegable y desaparece.
Propiedades
Autosize: obtiene o establece un valor que indica si el control
cambia automáticamente de tamañp para mostrar todo su
contenido
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
FlatStyle: obtiene o establece la apariencia de estilo plano del
control.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Image: obtiene o establece la imagen que se muestra en un
control de botón.
Margin: obtiene o establece el espacio entre controles.
Name: obtiene o establece el nombre del control.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
TextAlign: obtiene o establece la alineación del texto en el
control del botón.
Visible: obtiene o establece un valor que indica si se muestra el
control.
Propiedades:
AllowSelection: obtiene un valor que indica si ListBox habilita
actualmente la selección de elementos de lista.
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
FlatStyle: obtiene o establece la apariencia del ComboBox.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Items: obtiene la colección de elementos de este control.
Margin: obtiene o establece el espacio entre controles.
MultiColumn: obtiene o establece un valor que indica si el
Eventos
Click: Se produce cuando se hace clic en el control.
SelectedIndexChanged: Se produce cuando se hace
modificado la propiedad SelectedIndex o la colección
SelectedIndices.
SelectedValueChanged: Se produce cuando cambia la
propiedad SelectedValue.
Representa un control de vista Windows el cual muestra una
colección de elementos que se pueden ver mediante una de las
cutro vistas distintas.
Propiedades:
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control.
BorderStyle: obtiene o establece el estilo de borde del control.
CheckedBoxes: obtiene o establece un valor que indica si se
va a mostrar una casilla junto al elemento del control.
CheckedIndices: obtiene los índices de los elementos
actualmente activados en el control.
CheckedItems: obtiene los elementos actualmente activados
en el control.
Columns: obtiene la colección de todos los encabezados de
columna que aparece en el control.
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
FullRowSelect: obtiene o establece un valor que indica si al
hacer click en un elemento se seleccionan todos sus
subelementos.
GridLines: obtiene o establece un valor que indica si aparecen
líneas de cuadricula entre las filas
Items: obtiene la colección de elementos de este control.
Margin: obtiene o establece el espacio entre controles.
Eventos
Click: Se produce cuando se hace clic en el control.
SelectedIndexChanged: Se produce cuando se hace
modificado la colección.
Utiliza una máscara para distinguir entre los datos
proporcionados por el usuario correcto e incorrecto.
Propiedades
AsciiOnly: obtiene o establece un valor que indica si el control
acepta caracteres fuera del juego de caracteres ASCII
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
BeepOnError: obtiene o establece un valor que indica si el
control de cuadro de texto enmascarado provoca el sonido del
sistema para cada trao de la clave de usuario que rechace.
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Image: obtiene o establece la imagen que se muestra en un
control de botón.
Margin: obtiene o establece el espacio entre controles.
Mask: obtiene o establece la máscara de entrada para utilizar
en tiempo de ejecución.
MaxLength: obtiene o establece el número máximo de
caracteres que el usuario puede escribir o pegar en el control de
cuadro de texto.
Multiline: obtiene o establece un valor que indica si se trata de
un control de texto de varia líneas.
Name: obtiene o establece el nombre del control.
PasswordChar: obtiene o establece el carácter que se va a
mostrar en el sustituto de los datos proporcionados por el
usuario.
ReadOnly: obtiene o establece un valor que indica si el texto
del cuadro de texto es de solo lectura.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
TextAlign: obtiene o establece la alineación del texto en el
control del botón.
TextLength: obtiene la longitud del texto mostrado.
Visible: obtiene o establece un valor que indica si se muestra el
control.
Eventos
Click: Se produce cuando se hace clic en el control.
MaskChanged: se produce después de cambiar a la mascara
de entrada.
TextChanged: se produce cuando cambia en valor de la
propiedad Text
Propiedades
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Maximum: obtiene o establece el valor máximo para el cuadro
de número.
Minimum: obtiene o establece el valor mínimo para el cuadro
de número.
Margin: obtiene o establece el espacio entre controles.
Name: obtiene o establece el nombre del control.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
TextAlign: obtiene o establece la alineación del texto en el
control del botón.
Value: obtiene o establece el valor asignado al cuadro de
número.
VerticalScroll: obteiene las características asociado a la barra
de desplazamiento vertical.
Visible: obtiene o establece un valor que indica si se muestra el
control.
VScroll: obtiene o establece un valor que indica si la barra de
desplazamiento vertical está visible.
Eventos
Click: Se produce cuando se hace clic en el control.
ValueChanged: se produce cuando el valor de la propiedad se
ha modificado.
Propiedades
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Image: obtiene o establece la imagen que se muestra en un
control de botón.
Margin: obtiene o establece el espacio entre controles.
Name: obtiene o establece el nombre del control.
SizeMode: indica como se muestra la imagen.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
Visible: obtiene o establece un valor que indica si se muestra el
control.
Eventos
Click: Se produce cuando se hace clic en el control.
Propiedades
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Image: obtiene o establece la imagen que se muestra en un
control de botón.
Margin: obtiene o establece el espacio entre controles.
Maximum: obtiene o establece el valor máximo para el cuadro
de número.
Minimum: obtiene o establece el valor mínimo para el cuadro
de número.
Name: obtiene o establece el nombre del control.
SizeMode: indica como se muestra la imagen.
Step: obtiene o establece la cantidad por el que una llamada al
metodo PerformStep incrementa la posición actual de la barra
de progreso
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
Value: obtiene o establece la posición actial de la barra de
progreso.
Visible: obtiene o establece un valor que indica si se muestra el
control.
Propiedades:
AutoCheck: obtiene o establece un valor que indica si los
valores Checked o de CheckState se modifican en forma
automática cuando se hace click en el control
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Checked: obtiene o establece un valor que indica si el control
está en estado activada.
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Image: obtiene o establece la imagen que se muestra en un
control de botón.
Margin: obtiene o establece el espacio entre controles.
Name: obtiene o establece el nombre del control.
TabIndex: obtiene o establece el orden de tabulación del
control en su contenedor.
Text: obtiene o establece el texto asociado al control.
TextAlign: obtiene o establece la alineación del texto en el
control.
Visible: obtiene o establece un valor que indica si se muestra el
control
Eventos
CheckedChanged: se produce cuando el valor de la a
propiedad de Checked.
Click: Se produce cuando se hace clic en el control.
Propiedades
BackColor: obtiene o establece el color de fondo del control.
BackGroundImage: obtiene o establece la imagen de fondo
que se muestra en el control
Enabled: obtiene o establece un valor que indica si el control
puede responder a la interacción del usuario.
Font: obtiene o establece la fuente del texto que muestra el
control.
ForeColor: obtiene o establece el color de primer plano del
control.
Eventos
Click: Se produce cuando se hace clic en el control.
KeyPress: se produce cuando se presiona una tecla mientras el
control tiene el foco.
TextChanged: se produce cuando cambia en valor de la
propiedad Text
Referencia: http://msdn.microsoft.com/es-es/library/System.Windows.Forms.aspx