Vous êtes sur la page 1sur 78

Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.

com
Blog Personal: http://marcelodata.blogspot.com

Este tutorial expone de manera sencilla paso a paso la administración de


una aplicación usando MVC, el paradigma Model View Controller basándose
en tres capas: Presentación, Aplicación y Datos.

Gestiono lo básico de una interface MDI ya que tutoriales de ventanitas y


controles hay hasta por gusto, quise exponer la arquitectura de una
aplicación basada en los paradigmas mencionados como es implementar la
lógica de programación en la Base de Datos usando Procedimientos
almacenados y administrar esta lógica desde la aplicación.

Se cumple con el principio de independecia si es que se programa en la


Base de Datos y no en la aplicación, la aplicación es una simple interface o
medio de comunicación entre el usuario y la base de datos, evítandonos así
el recompilar la aplicación y permitiéndonos en su lugar focalizarnos en la
programación en la misma Base de Datos sin tener que cambiar la
aplicación.

La idea de este tutorial es la de brindar al programador de software


libre un conocimiento clave para que cuando encuentre este
paradigma basado en plataformas .NET en alguna organización
pueda entenderla y migrarla al software libre.

Como mencioné me he centrado en la arquitectura de la aplicación, la


implementación de controles bonitos es un trabajo que particularmente no
pienso hacer, para eso existen miles de tutoriales en la red.

Programar usando MVC y CAPAS no es algo que se encuentre a diario, yo


mismo sufrí para implementar este tutorial, la parte difícil por decirlo así
está aquí, la arquitectura, lo demás que es una simple cuestión de diseño lo
conoce cualquiera.

Este es mi último tutorial en plataformas privativas y lo hago sólo por dotar


de conocimiento sencillo a aquellos amigos que quieran entender las
arquitecturas .NET en las empresas y puedan luego migrarlas al software
libre.

Ahora mi pasión son la programación competitiva y el Software libre, el


hecho que uno cultive Software Libre no implica que uno no sea experto en
otras plataformas (Soy Desarrollador 5 estrellas Platino DCE 2005),
precisamente la comprensión de esta plataforma me llevó a querer y a amar
el software libre.

El Autor

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

ADMINISTRAR UNA BASE DE DATOS UTILIZANDO MVC (Model View


Controller) y PROGRAMACIÓN POR CAPAS

SOFTWARE NECESARIO:

• SQL SERVER 2008 O 2005 Express que se instala por defecto con el
Visual Studio.

Si este es tu caso el Administrador de SQL 2008 lo puedes descargar


de aquí:

http://www.microsoft.com/download/en/details.aspx?id=22985

Si usas el SQL Express 2005 el administrador lo puedes descargar de


aquí:

http://www.microsoft.com/downloads/es-es/details.aspx?
FamilyID=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796

• Cualquier otra versión de SQL SERVER 2008 O 2005 (Ya viene con la
interface de administración).

• VISUAL STUDIO 2010 O 2008

CONOCIMIENTOS:

• ADO .NET BÁSICO

• SQL SERVER BÁSICO

• T – SQL BÁSICO

• VISUAL BASIC .NET BÁSICO

FUENTES:

El código Fuente de la aplicación desarrollada en este tutorial lo puedes


descargar de aquí:

https://docs.google.com/open?
id=0B_H9bnl3ECg6T3hSSmVmeEJTNGFHZ3RhTkUwUjhCQQ

El BackUp de la Base de Datos lo puedes encontrar aquí:

https://docs.google.com/open?
id=0B_H9bnl3ECg6T1ZlMVpWZTZSWWFPZWRjZzV1LUxjUQ

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

Arquitectura de ADO.NET
Tradicionalmente, el procesamiento de datos ha dependido principalmente de un
modelo de dos niveles basado en una conexión. A medida que el procesamiento de
datos utiliza cada vez más arquitecturas de varios niveles, los programadores están
pasando a un enfoque sin conexión con el fin de proporcionar una escalabilidad
mejor para sus aplicaciones.

Componentes de ADO.NET
Existen dos componentes de ADO.NET que se pueden utilizar para obtener acceso a
datos y manipularlos:
• Proveedores de datos de .NET Framework
• El DataSet
Proveedores de datos de .NET Framework
Los proveedores de datos de .NET Framework son componentes diseñados
explícitamente para la manipulación de datos y el acceso rápido a datos de sólo
lectura y sólo avance. El objeto Connection proporciona conectividad a un origen
de datos. El objeto Command permite tener acceso a comandos de base de datos
para devolver datos, modificar datos, ejecutar procedimientos almacenados y
enviar o recuperar información sobre parámetros. El
objetoDataReader proporciona una secuencia de datos de alto rendimiento desde
el origen de datos. Por último, el objetoDataAdapter proporciona el puente entre el
objeto DataSet y el origen de datos. El DataAdapter utiliza
objetosCommand para ejecutar comandos SQL en el origen de datos tanto para
cargar el DataSet con datos como para reconciliar en el origen de datos los
cambios aplicados a los datos incluidos en el DataSet.
DataSet
El DataSet de ADO.NET está expresamente diseñado para el acceso a datos
independientemente del origen de datos. Como resultado, se puede utilizar con
múltiples y distintos orígenes de datos, con datos XML o para administrar datos
locales de la aplicación. El DataSet contiene una colección de uno o más
objetos DataTable formados por filas y columnas de datos, así como información
sobre claves principales, claves externas, restricciones y relaciones relativa a los
datos incluidos en los objetos DataTable.
En el diagrama siguiente se ilustra la relación entre un proveedor de datos de .NET
Framework y un DataSet.
Arquitectura de ADO.NET

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

Elegir un DataReader o un DataSet


A la hora de decidir si su aplicación debe utilizar un DataReader (vea Recuperar
datos mediante DataReader) o unDataSet (vea Utilizar DataSets en ADO.NET),
debe tener en cuenta el tipo de funcionalidad que su aplicación requiere. Use
un DataSet para hacer lo siguiente:
• Almacene datos en la memoria caché de la aplicación para poder
manipularlos. Si solamente necesita leer los resultados de una consulta,
el DataReader es la mejor elección.
• Utilizar datos de forma remota entre un nivel y otro o desde un servicio Web
XML.
• Interactuar con datos dinámicamente, por ejemplo para enlazar con un
control de formularios Windows Forms o para combinar y relacionar datos
procedentes de varios orígenes.
• Realizar procesamientos exhaustivos de datos sin necesidad de tener una
conexión abierta con el origen de datos, lo que libera la conexión para que la
utilicen otros clientes.
Si no necesita la funcionalidad proporcionada por el DataSet, puede mejorar el
rendimiento de su aplicación si utiliza el DataReader para devolver sus datos de
sólo avance y de sólo lectura. Aunque el DataAdapter utiliza el DataReaderpara
rellenar el contenido de un DataSet (vea Llenar un DataSet desde un
DataAdapter), al utilizar el DataReaderpuede mejorar el rendimiento porque no
usará la memoria que utilizaría el DataSet, además de evitar el procesamiento
necesario para crear y rellenar el contenido de DataSet.

Modelo Vista Controlador

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

Un diagrama sencillo que muestra la relación entre el modelo, la vista y el controlador. Nota: las líneas sólidas
indican una asociación directa, y las punteadas una indirecta (por ejemplo, patrón Observer).

Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de
una aplicación, la interfaz de usuario, y la lógica de negocio en tres componentes distintos. El patrón
de llamada y retorno MVC (según CMU), se ve frecuentemente en aplicaciones web, donde la vista
es la página HTML y el código que provee de datos dinámicos a la página. El modelo es el Sistema
de Gestión de Base de Datos y la Lógica de negocio, y el controlador es el responsable de recibir los
eventos de entrada desde la vista.
Contenido

• 1 Historia

• 2 Descripción

del patrón

• 3 Frameworks

MVC

• 4 Véase también

• 5 Referencias

• 6 Enlaces

externos

Historia

El estilo fue descrito por primera vez en 19791 por Trygve Reenskaug, entonces trabajando
en Smalltalk en laboratorios de investigación deXerox. La implementación original está descrita
en Programación de Aplicaciones en Smalltalk-80(TM): Como utilizar Modelo Vista Controlador.2
Descripción del patrón
 Modelo: Esta es la representación específica de la información con la cual el sistema
opera. En resumen, el modelo se limita a lo relativo de la vista y su controlador facilitando las
presentaciones visuales complejas. El sistema también puede operar con más datos no relativos
a la presentación, haciendo uso integrado de otras lógicas de negocio y de datos afines con el
sistema modelado.

 Vista: Este presenta el modelo en un formato adecuado para interactuar, usualmente


la interfaz de usuario.

 Controlador: Este responde a eventos, usualmente acciones del usuario, e invoca


peticiones al modelo y, probablemente, a la vista.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

Muchos de los sistemas informáticos utilizan un Sistema de Gestión de Base de Datos para
gestionar los datos: en líneas generales delMVC corresponde al modelo. La unión entre capa de
presentación y capa de negocio conocido en el paradigma de la Programación por
capas representaría la integración entre Vista y su correspondiente Controlador de eventos y
acceso a datos, MVC no pretende discriminar entre capa de negocio y capa de presentación pero si
pretende separar la capa visual gráfica de su correspondiente programación y acceso a datos, algo
que mejora el desarrollo y mantenimiento de la Vista y el Controlador en paralelo, ya que ambos
cumplen ciclos de vida muy distintos entre sí.

Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo que sigue el control
generalmente es el siguiente:
1. El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el
usuario pulsa un botón, enlace, etc.)
2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de
la acción solicitada por el usuario. El controlador gestiona el evento que llega,
frecuentemente a través de un gestor de eventos (handler) o callback.
3. El controlador accede al modelo, actualizándolo, posiblemente modificándolo de
forma adecuada a la acción solicitada por el usuario (por ejemplo, el controlador actualiza
el carro de la compra del usuario). Los controladores complejos están a menudo
estructurados usando un patrón de comando que encapsula las acciones y simplifica su
extensión.
4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de
usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el
usuario donde se reflejan los cambios en el modelo (por ejemplo, produce un listado del
contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la
vista. Sin embargo, se podría utilizar el patrón Observador para proveer cierta indirección
entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier
cambio. Un objeto vista puede registrarse con el modelo y esperar a los cambios, pero aun
así el modelo en sí mismo sigue sin saber nada de la vista. Este uso del
patrón Observador no es posible en las aplicaciones Web puesto que las clases de la vista
están desconectadas del modelo y del controlador. En general el controlador no pasa
objetos de dominio (el modelo) a la vista aunque puede dar la orden a la vista para que se
actualice. Nota: En algunas implementaciones la vista no tiene acceso directo al modelo,
dejando que el controlador envíe los datos del modelo a la vista. Por ejemplo en el MVC
usado por Apple en su framework Cocoa. Suele citarse como Modelo-Interface-Control,
una variación del MVC más puro
5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el
ciclo nuevamente.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

A. HABILITANDO EL USUARIO “SA” E INICIO DE SESION CON


AUTENTICACIÓN DE SQL SERVER

1. Inicio + Todos los Programas + SQLMicrosoft SQL Server 2008 + SQL


Server Management Studio.

2. Anticlick + Ejecutar como administrador

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

3. Loguearnos con la instancia por defecto. Si usas una versión diferente


del SQL Express reemplaza el “.\sqlexpress” por el usuario que
definiste a la hora de instalar tu MS SQL.

4. Conocemos la interfaz de Administración del SQL.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

5. Buscamos al Administrador (SA).

6. Anticlic + Propiedades

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

7. Nos ubicamos en la página General.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

8. Escribimos la contraseña que vamos a utilizar.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

9. Nos ubicamos en la página Estado.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

10.Habilitamos el Inicio de Sesión + Aceptar.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

11.Actualizamos.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

12.Vemos que el usuario administrador sa está habilitado.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

13.Anticlic + Propiedades.

14.Nos ubicamos en la página Seguridad.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

15.Habilitamos “Modo de autenticación de Windows y SQL Server” para


poder loguearnos con los usuarios que administramos en nuestro
servidor como el usuario “sa”.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

16.Clic en Aceptar.

17.Anticlic en la raíz + Reiniciar.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

18.Clic en “Sí”.

19.Archivo + Desconectar Explorador de objetos.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

20.Estamos Desconectados.

21.Archivo + Conectar Explorador de Objetos.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

22.Nos logueamos, pero esta vez Escogemos “Autenticación de SQL


Server”.

23.Probamos nuestro usuario “sa” que hemos habilitado. Clic en


Conectar.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

24.Estamos logueados con nuestro usuario “sa”.

B. CREANDO OTRO USUARIO SI DESEAMOS

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

25.Si quisiéramos crear un nuevo usuario diferente al “sa” basta con


hacer anticlic en “Inicios de Sesión”.

26.Elegimos Nuevo Inicio de Sesión.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

27.Elegimos el nombre de nuestro usuario por ejemplo “pepito” y


repetimos los pasos 7 al 24, sólo que en lugar del usuario “sa”
usamos el que hemos creado con su respectiva contraseña.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

28.Clic en Nueva Consulta.

C. CREANDO NUESTRA BASE DE DATOS “INSTITUTO”, TABLAS Y DATOS

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

29.Pegamos el Siguiente Script para ahorrarnos el trabajo de crear la


Base de Datos, Tablas e ingresar los datos:

--Juan Marcelo Chamorro Avendaño

--E-Mail: jmarcelo_data@hotmail.com

--Creando la BAse de Datos Alumnos

CREATE DATABASE Instituto

GO

--Creando la Tabla Alumnos

USE Instituto

GO

CREATE TABLE Alumnos

(CodAlumno char(4) PRIMARY KEY NOT NULL,

Nombre VarChar(50) NOT NULL,

Apellidos VarChar(50) NOT NULL,

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

Especialidad VarChar(50) NOT NULL,

Curso VarChar(50) NOT NULL,

Turno VarChar(50) NOT NULL,

Nota Int NOT NULL)

GO

--Crear Tabla Password

CREATE TABLE Password

(IdCod int PRIMARY KEY NOT NULL,

Nombre VarChar(50) NOT NULL,

Apellidos VarChar(50) NOT NULL,

Usuario VarChar(50) NOT NULL,

Password VarChar(50) NOT NULL,

Cargo VarChar(50) NOT NULL)

GO

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

--Insertando Registros tabla Alumnos

INSERT Alumnos

VALUES('A001','Patricia','Lozano Llalico','Computación','Ofimática','Diurno',15)

INSERT Alumnos

VALUES('A002','Tatiana','Torre
Alanya','Secretariado','Ofimática','Vespertino',18)

INSERT Alumnos

VALUES('A003','Romina','Llacza Chamorro','Administración','Diseño','Diurno',5)

INSERT Alumnos

VALUES('A004','Dayana','Quintanilla
Villafuerte','Secretariado','Inglés','Noche',13)

INSERT Alumnos

VALUES('A005','Kerly','Mosquera Delgado','Computación','Visual Basic


.NET','Diurno',9)

INSERT Alumnos

VALUES('A006','Alondra','León Pariona','Computación','Visual Basic


.NET','Diurno',8)

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

INSERT Alumnos

VALUES('A007','Gino','Gilvonio Rivera','Electrónica','Circuitos','Vespertino',16)

INSERT Alumnos

VALUES('A008','Franx','Velito Labra','Electrónica','Circuitos','Noche',12)

INSERT Alumnos

VALUES('A009','Sandro','Gutarra
Raimondi','Computación','Ensamblaje','Vespertino',12)

INSERT Alumnos

VALUES('A010','Juan','Sánchez Prado','Computación','Ensamblaje','Diurno',15)

GO

--Insertando Registros tabla Password

INSERT Password

VALUES(1,'Alberth','Pisao Venancio','saquito','simiamor','amo de casa')

INSERT Password

VALUES(2,'Marcelo','Chamorro Avendaño','admin','1234','Administrador')

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

GO

--Crear Procedimientos Almacenados

CREATE PROCEDURE mostrar_todo

as

SELECT * FROM ALUMNOS

GO

CREATE PROCEDURE mostrar_12

as

SELECT CodAlumno,Nombre,Apellidos,Nota FROM ALUMNOS WHERE Nota=12

GO

CREATE PROCEDURE mostrar_secretariado

as

SELECT CodAlumno,Nombre,Apellidos,Curso FROM ALUMNOS WHERE


Curso='Secretariado'

GO

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

CREATE PROCEDURE mostrar_g

as

SELECT Nombre,Apellidos FROM ALUMNOS WHERE Apellidos LIKE 'g%'

GO

CREATE PROCEDURE mostrar_6

as

SELECT Nombre,Apellidos FROM ALUMNOS WHERE Apellidos LIKE '______'

GO

CREATE PROCEDURE mostrar_a

as

SELECT Nombre,Apellidos FROM ALUMNOS WHERE Apellidos LIKE '_____a'

GO

CREATE PROCEDURE mostrar_operadores

as

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

SELECT Nombre, Apellidos, Nota FROM ALUMNOS WHERE (Nombre LIKE 'l%')
AND (Nota < 11)

GO

CREATE PROCEDURE mostrar_entre

as

SELECT * FROM ALUMNOS WHERE Nota BETWEEN 11 AND 15

GO

CREATE PROCEDURE mostrar_lista

as

SELECT * FROM ALUMNOS WHERE Turno IN ('Noche','Diurno')

GO

--Crear Vistas

CREATE VIEW MOSTRAR_NOTAS

AS

SELECT Nombre, Apellidos, Nota FROM Alumnos

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

GO

--Fin de Script

--Juan Marcelo Chamorro Avendaño

--E-Mail: jmarcelo_data@hotmail.com

30.Ejecutar el Script.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

31.Nuestro Script está ejecutado y la Base de Datos con la que vamos a


trabajar ha sido creada.

32.Actualizar.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

33.Al expandir vemos Nuestra Base de Datos “Instituto” creada.

34.Vemos que hay dos tablas que han sido creadas por el script.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

35.Anticlic en la tabla Alumnos + Editar las 200 primeras filas.

36.Vemos que el Script ya ha creado todos los datos.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

37.Anticlic en la Tabla “Password” + Editar las primeras 200 filas.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

38.Vemos que el script ya ha creado contenido.

D. CREANDO LAS CAPAS DE PRESENTACIÓN, NEGOCIOS Y DATOS:


CREANDO LA CAPA DE PRESENTACIÓN “INSTITUTO”

39.Iniciamos el Visual Studio 2010 en Modo Administrador.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

40.Archivo + Nuevo Proyecto.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

41.Creamos una Aplicación de Windows Form llamada “Instituto” +


Aceptar.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

E. CREANDO EL FORMULARIO MDI CONTENEDOR (PADRE)

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

42.Le damos las siguientes propiedades al Form1.

Propiedad Valor

Text frmMain

WindowState Maximized

IsMdiContain True

43.Le agregamos un Control MenuStrip (Arrastrar o hacer doble clic).

44.La propiedad IsMdiContain con su valor “true” la ha convertido en una


ventana contenedora.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

45.Vamos a agregar la ventana de logueo ahora. Anticlic en la raíz


Instituto + Agregar + Windows Forms.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

46.Le ponemos de nombre frmLogin.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

47.Configuramos el form frmLogin como ventana de inicio. Proyecto +


Propiedades de Instituto.

48.Seleccionamos “frmLogin”. Con esto cuando ejecutemos el proyecto


la ventana frmLogin será la primera en aparecer.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

F. CREANDO LAS CAPAS DE PRESENTACIÓN, NEGOCIOS Y DATOS:


CREANDO LA CAPA DE NEGOCIOS “NEGOCIO”

49.Agregar Nuevo Proyecto. Archivo + Agregar + Nuevo Proyecto.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

50.Seleccionamos “Biblioteca de Clases”. La llamamos “NEGOCIO” +


ACEPTAR.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

El Explorador de Soluciones se vería así:

Cambiar el Nombre de la Clase por defecto a “N_Login.vb”, para eso


seleccionamos la clase y en Propiedades modificar:

Nombre de Archivo: N_Login.vb

CREANDO LAS CAPAS DE PRESENTACIÓN, NEGOCIOS Y DATOS: CREANDO LA

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

CAPA DE DATOS “DATOS”

51.Se crea una Solución automáticamente. Anticlic en la Solución +


Agregar + Nuevo proyecto.

Igual que en el paso 50 pero esta vez llamarlo “DATOS”.

Cambiar el Nombre de la Clase por defecto a “D_Login.vb”, para eso


seleccionamos la clase y en Propiedades modificar:

Nombre de Archivo: D_Login.vb

52.Finalmente nuestra solución se ve así.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

G. CREAMOS EL PROCEDIMIENTO ALMACENADO “login” Que Será


Gestionado Desde La Aplicación.

53.Creamos un Procedimiento Almacenado al que vamos a llamar


“login”. En el Administrador de SQL elegir “Nueva Consulta”, ahí
crearemos el siguiente Procedimiento Almacenado.

CREATE PROCEDURE login

@Usuario VARCHAR(50),

@Password VARCHAR(50),

@Res VARCHAR(40) OUTPUT

AS

BEGIN

DECLARE @NUM AS int

SELECT @NUM = COUNT(*) FROM Password

WHERE

Usuario=@Usuario

IF @NUM=1

BEGIN

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

SELECT @NUM = COUNT(*) FROM Password

WHERE

Password=@Password

IF @NUM=1

BEGIN

SET @Res='Acceso Permitido.'

END

ELSE

BEGIN

SET @Res='Clave Incorrecta.'

END

END

ELSE

BEGIN

SET @Res='Usuario No Existe.'

END

END

GO

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

54.Ejecutar la Consulta para crear el Procedimiento Almacenado.

55.Si todo ha sido correcto el administrador de SQL nos devuelve el


mensaje “Comandos Completados Correctamente”.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

H. CREAMOS UN ARCHIVO DE CONFIGURACIÓN “APP.CONFIG” QUE


ALMACENARÁ LOS PARÁMETROS DE NUESTRA CADENA DE CONEXIÓN

56.En el Visual Studio Agregaremos un Archivo de configuración


conteniendo la Cadena de Conexión a la Base de Datos instituto.
Anticlic en “Instituto” + Agregar + Nuevo Elemento.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

57.En Elementos Comunes Seleccionamos “General” y escogemos


“Archivo de Configración”. Dejamos el nombre por defecto
“app.config” + Agregar.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

58.Dentro de <Configuration> </Configuration> colocamos la


configuración de nuestra cadena de conexión usando la propiedad
<appSettings>.

<appSettings>

<add key="cn"

value="Server=.\sqlexpress;

DataBase=Instituto;

User=sa;

Password=123456;"

/>

</appSettings>

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

59.Finalmente Tenemos nuestra solución así:

I. REFERENCIAMOS LAS CAPAS

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

60.Referenciamos la CAPA NEGOCIO A LA CAPA DATOS. Anticlic en


NEGOCIO + Agregar Referencia.

61.Seleccionamos la CAPA DATOS + ACEPTAR.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

62.Seleccionamos la Capa de Aplicación “Instituto” + Anticlic + Agregar


Referencia. Para referenciarla a la Capa NEGOCIO.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

63.SELECCIONAMOS LA CAPA NEGOCIO + ACEPTAR.

J. CREAMOS LAS CLASES NECESARIAS EN LAS CAPA DE DATOS Y


NEGOCIOS CON SUS MÉTODOS RESPECTIVOS, LAS INTERFACES QUE LAS
VAN A GESTIONAR Y LOS PROCEDIMIENTOS ALMACENADOS A SER
GESTIONADOS POR LA CAPA DE DATOS

64.Codificar la clase D_Login como se indica:

Imports System.Data

Imports System.Data.SqlClient

Imports System.Configuration

Public Class D_Login

Private Function Conexion() As SqlConnection

Dim strConn As String

Dim ConfAppSet As New AppSettingsReader

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

strConn = CStr(ConfAppSet.GetValue("cn", GetType(String)))

Dim ConexionDB As New SqlConnection(strConn)

ConexionDB.Open()

Return ConexionDB

End Function

Public Function BuscarUsuarioD(ByVal usu As String, ByVal clav As String) As String

Dim cmd As New SqlCommand

cmd.CommandText = "login"

cmd.CommandType = CommandType.StoredProcedure

cmd.Connection = Conexion()

cmd.Parameters.Add("@Usuario", SqlDbType.VarChar, 50).Value = usu

cmd.Parameters.Add("@Password", SqlDbType.VarChar, 50).Value = clav

cmd.Parameters.Add("@Res", SqlDbType.VarChar, 40).Direction =


ParameterDirection.Output

cmd.ExecuteNonQuery()

Return cmd.Parameters("@Res").Value

End Function

End Class

65.Codificar la Clase N_Login como se indica:

Imports DATOS

Public Class N_Login

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

Public Function BuscaUsuarioN(ByVal usuN As String, ByVal clavN As String) As String

Dim clsLogin As New D_login

Return clsLogin.BuscarUsuarioD(usuN, clavN)

End Function

End Class

66.Diseñar el frmLogin como se indica:

67.Agregar el Menú “Mantenimiento” y dentro el SubMenú “Alumnos”.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

68.Agregamos nuestro formulario de Mantenimiento “frmAlumnos”


dentro de la capa de presentación Instituto.

69.Diseñar como se indica.

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

70.Dentro del código del formulario frmAlumnos agrego el método


constructor Sub New(), una instancia frmInstance y una función
Instance() como se ve en el cuadro y la imagen:

Public Class frmAlumnos

Private Sub New()

' Llamada necesaria para el diseñador.

InitializeComponent()

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

' Agregue cualquier inicialización después de la llamada a InitializeComponent().

End Sub

Private Shared frmInstance As frmAlumnos = Nothing

Public Shared Function Instance() As frmAlumnos

If frmInstance Is Nothing OrElse frmInstance.IsDisposed = True Then

frmInstance = New frmAlumnos

End If

frmInstance.BringToFront()

Return frmInstance

End Function

End Class

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

Con esto logramos que se inicie una sola instancia de nuestro formulario
hijo.

71.Doble clic en el submenu Alumnos para generar su código:

72.Agregarle el siguiente código:

Dim Alumnos As frmAlumnos = frmAlumnos.Instance

Alumnos.MdiParent = Me

Alumnos.Show()

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

73.En el SQL Server Management abrimos una Nueva Consulta y


creamos otro procedimiento Almacenado similar al paso 53:

CREATE PROCEDURE listarAlumnos

AS

BEGIN

SELECT * FROM Alumnos

END

GO

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

74.Ejecutamos la consulta para crear el procedimiento almacenado


“listarAlumnos”.

75.Agregamos una nueva clase dentro de la Capa DATOS llamada


D_Listar. La codificamos como se indica:

Imports System.Data

Imports System.Data.SqlClient

Imports System.Configuration

Public Class D_Listar

Private Function Conexion() As SqlConnection

Dim strConn As String

Dim ConfAppSet As New AppSettingsReader

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

strConn = CStr(ConfAppSet.GetValue("cn", GetType(String)))

Dim ConexionDB As New SqlConnection(strConn)

ConexionDB.Open()

Return ConexionDB

End Function

Public Function ListarD() As DataSet

Dim cmd As New SqlCommand

cmd.CommandText = "listarAlumnos"

cmd.CommandType = CommandType.StoredProcedure

cmd.Connection = Conexion()

Dim DA As New SqlDataAdapter

Dim DS As New DataSet

DA.SelectCommand = cmd

DA.Fill(DS)

Return DS

End Function

End Class

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

76.Agregamos una nueva clase dentro de la capa NEGOCIO llamada


N_Listar y la codificamos como se indica:

Imports DATOS

Public Class N_Listar

Public Function ListarN() As DataSet

Dim clsLogin As New D_Listar

Return clsLogin.ListarD

End Function

End Class

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

77.Creamos el procedimiento almacenado InsertarAlumno:

CREATE PROCEDURE InsertarAlumno

@CodAlumno CHAR(4),

@Nombre VARCHAR(50),

@Apellidos VARCHAR(50),

@Especialidad VARCHAR(50),

@Curso VARCHAR(50),

@Turno VARCHAR(50),

@Nota VARCHAR(50)

AS

BEGIN

INSERT INTO Alumnos

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

VALUES

@CodAlumno,

@Nombre,

@Apellidos,

@Especialidad,

@Curso,

@Turno,

@Nota

END

GO

78.Renombramos las cajas de texto como se indica en la figura:

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

79.Agregamos una nueva clase dentro de la capa DATOS llamada


D_Insertary la codificamos como se indica:

Imports System.Data

Imports System.Data.SqlClient

Imports System.Configuration

Public Class D_Insertar

Private Function Conexion() As SqlConnection

Dim strConn As String

Dim ConfAppSet As New AppSettingsReader

strConn = CStr(ConfAppSet.GetValue("cn", GetType(String)))

Dim ConexionDB As New SqlConnection(strConn)

ConexionDB.Open()

Return ConexionDB

End Function

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

Public Function InsertarD(ByVal CodAlumno As String, ByVal Nombre As String, ByVal


Apellidos As String, ByVal Especialidad As String, ByVal Curso As String, ByVal Turno As
String, ByVal Nota As Integer) As Integer

Dim cmd As New SqlCommand

cmd.CommandText = "InsertarAlumno"

cmd.CommandType = CommandType.StoredProcedure

cmd.Connection = Conexion()

cmd.Parameters.Add("@CodAlumno", SqlDbType.Char, 4).Value = CodAlumno

cmd.Parameters.Add("@Nombre", SqlDbType.VarChar, 50).Value = Nombre

cmd.Parameters.Add("@Apellidos", SqlDbType.VarChar, 50).Value = Apellidos

cmd.Parameters.Add("@Especialidad", SqlDbType.VarChar, 50).Value = Apellidos

cmd.Parameters.Add("@Curso", SqlDbType.VarChar, 50).Value = Curso

cmd.Parameters.Add("@Turno", SqlDbType.VarChar, 50).Value = Turno

cmd.Parameters.Add("@Nota", SqlDbType.Int).Value = Nota

Return cmd.ExecuteNonQuery

End Function

End Class

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

80.Agregamos una nueva clase dentro de la capa NEGOCIO llamada


N_Insertar y la codificamos como se indica:

Imports DATOS

Public Class N_Insertar

Public Function InsertarN(ByVal CodAlumno As String, ByVal Nombre As String, ByVal


Apellidos As String, ByVal Especialidad As String, ByVal Curso As String, ByVal Turno As
String, ByVal Nota As Integer) As Integer

Dim clsLogin As New D_Insertar

Return clsLogin.InsertarD(CodAlumno, Nombre, Apellidos, Especialidad, Curso, Turno,


Nota)

End Function

End Class

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

81.Codificamos el evento Load del formulario frmAlumnos para que


cargue los datos al iniciarse en el DataGridView1:

Private Sub frmAlumnos_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load

Dim clsNegocio As New NEGOCIO.N_Listar

DataGridView1.DataSource = clsNegocio.ListarN.Tables(0)

End Sub

Y codificamos el botón “btnInsertar” del formulario frmAlumnos:

Private Sub btnInsertar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnInsertar.Click

Dim clsNegocio As New NEGOCIO.N_Insertar

Dim clsNegocio01 As New NEGOCIO.N_Listar

clsNegocio.InsertarN(txtCodAlumno.Text, txtNombre.Text, txtApellidos.Text,


txtEspecialidad.Text, txtCurso.Text, txtTurno.Text, CInt(txtNota.Text))

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

DataGridView1.DataSource = clsNegocio01.ListarN.Tables(0)

End Sub

82.Al ejecutar e insertar un Nuevo item se vería así:

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

"Porque el secreto del desarrollo de una nación está en su educación"


Autor: Juan Marcelo Chamorro Avendaño E-mail: jmarcelo_data@hotmail.com
Blog Personal: http://marcelodata.blogspot.com

• Se deja como trabajo utilizando todo lo aprendido implementar las


interfaces y clases necesarias para que funcionen los botones
Modificar y Eliminar.

• Además filtrar la aplicación para mostrar a los alumnos por Código,


Nombre, Apellidos, Especialidad, Curso, Turno o Nota.

• Implementar un ejemplo de búsqueda por Código, Nombre, Apellidos,


Especialidad, Curso, Turno o Nota.

• Encriptar la Cadena de Conexión (Opcional).

• Investigar y generar un reporte para imprimir (Opcional).

"Porque el secreto del desarrollo de una nación está en su educación"