Está en la página 1de 13

Web Services Developer

Visual Basic .Net III Aplicaciones distribuidas (N-Capas) Implementando Generic


Objetivo Crear Componentes (Dlls). Hacer uso de los componentes creados. Crear componentes que puedan ser consumidos por varios Clientes (Windows y Web) Crear Capas de: Entidades del Negocio, Lgica de Negocio, Presentacin del Negocio y WebSite del Negocio.

Ejercicio - Usar La Base de Datos NorthWind (Proporcioando por el profesor) - Antes de Desarrollar este ejercicio deberemos de crear el siguiente Store en el analizador de consultas.

Use NorthWind Go --Procedimiento para listar CREATE PROCEDURE USP_PRODUCTOS_LISTAR AS Select PRODUCTID,PRODUCTNAME,UNITPRICE,UNITSINSTOCK from Products;

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 1 de 13

Web Services Developer


Empecemos: Pasos Crear una carpeta en el escritorio llamada FrameWorkAlmacen 1.- Abrir Visual Studio 2012 2.- Crear una Solucin en Blanco Men Archivo/ Nuevo / Proyecto, en la ventana que despliega clic en Otros proyectos y seleccionar la plantilla Solucion en blanco , poner de nombre: FrameWorkAlmacen y clic en OK.

Ingresar el nombre FrameWorkNorthWind

Guardar en la carpeta creado del escritorio

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 2 de 13

Web Services Developer

Crear Las siguientes capas 1.- Agregar a la solucin un nuevo proyecto de tipo Biblioteca de clases. Men Archivo/ Agregar / Nuevo Carpeta la cual llamaremos Layer_Entity. Men Archivo/ Agregar / Nuevo Carpeta la cual llamaremos Layer_DataAccess. Men Archivo/ Agregar / Nuevo Carpeta la cual llamaremos Layer_Layout.

Click derecho sobre el (Solution "FrameWorkNorthWind") para agregar la carpeta:

Quedara de la siguiente Imagen:

Seleccionar la carpeta Layer_Entity click Derecho / Agregar Nuevo Proyecto Seleccionar en plantillas Biblioteca de Clases, y poner nombre Layer_ Entity

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 3 de 13

Web Services Developer

Ingresado el nombre Presione el botn Aceptar. Eliminar La clase que se crea por defecto Class1 y agregar una nueva con nombre Producto.

Eliminando la Clase

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 4 de 13

Web Services Developer Agregando la Clase


Clic derecho sobre el proyecto Layer_Entity:

La Solucin Quedara de la siguiente Forma:

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 5 de 13

Web Services Developer


3.- Escribir el cdigo en la clase Producto <Serializable()> Public Class Producto Private _Codigo As Integer Private _Descripcion As String Private _Precio As Decimal Private _Stock As Integer Public Property Codigo() As Integer Get Return _Codigo End Get Set(ByVal value As Integer) _Codigo = value End Set End Property Public Property Descripcion() As String Get Return _Descripcion End Get Set(ByVal value As String) _Descripcion = value End Set End Property Public Property Precio() As Decimal Get Return _Precio End Get Set(ByVal value As Decimal) _Precio = value End Set End Property Public Property Stock() As String Get Return _Stock End Get Set(ByVal value As String) _Stock = value End Set End Property Public Sub New()

Agregar el Atributo <Serializable> antes de la declaracin de la Clase

End Sub Public Sub New(pCodigo As String, pDescripcion As String, pPrecio As Decimal, pStock As Integer) _Codigo = pCodigo _Descripcion = pDescripcion _Precio = pPrecio _Stock = pStock End Sub End Class

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 6 de 13

Web Services Developer


4.- Ir Generando el Proyecto (Crear la Dll). Clic derecho en el proyecto Layer_Entity/ Generar:

Al generar se crea la dll de nombre Layer _Entity que contiene la clase Producto.

Crear capa de datos 1.- Seleccionar la carpeta Layer_DataAccess Click Derecho / Agregar Nuevo Proyecto Seleccionar en plantillas Biblioteca de Clases, y poner nombre Layer_DataAccess. Eliminar La clase que se crea por defecto Class1 y agregar una nueva con nombre DistritoDAL. La Solucin quedara de la siguiente Forma:

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 7 de 13

Web Services Developer

2.- Agregar la referencia (la dll Layer_Entity) al proyecto para poder hacer uso de la clase Distrito que se encuentra dentro de esta: Clic derecho sobre el proyecto Layer_DataAccess, Agregar Referencia.

En la ventana que despliega Agregar Referencia seleccionamos la ficha Solucin\ Proyectos: Seleccionamos la dll Layer_Entity Clic en el botn aceptar.

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 8 de 13

Web Services Developer


Notar que se agrega el componente a las referencias: Si no lo puedes ver as lo siguiente: o Seleccionas el proyecto Layer_DataAccess y en la barra de herramientas del mismo le haces clic en "Mostrar todos los archivos".

Dale clic aqui

Ahora si podrs ver la referencia.

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 9 de 13

Web Services Developer


Ahora si podremos hacer uso de la Clase Producto que se encuentra encapsulada dentro de la Dll Layer_Entity. 3.- Codificar en la Clase ProductoDAL - En el general de la clase: Imports Layer_Entity Imports System.Data.SqlClient - Serial izar la Clase (Quedara de la siguiente manera): Public Class ProductoDAL - A nivel de Clase: ( La Cadena de conexin puede variar dependiendo de su configuracion) Private cn As New SqlConnection("Server= . ; database=NorthWind ; uid=sa; password=123")
REM CREAMOS LOS METODOS DENTRO DE LA CLASE ProductoDAL Public Function fListarProducto() As List(Of Producto) 'Declaro la Variable de Lista de Productos Dim lista As New List(Of Producto) 'Declaramos el SqlDataReader y lo inicializamos con el nothing Dim dr As SqlDataReader = Nothing 'Creamos el comando Dim cmd As New SqlCommand("USP_PRODUCTOS_LISTAR", cn) 'Espesificamos el tipo de comando cmd.CommandType = CommandType.StoredProcedure 'Preguntamos si la cadena de conexion es diferente a abierta. If cn.State <> ConnectionState.Open Then 'Si la condicion de cumple abrimos la conexion cn.Open() End If 'Ejecutamos el metodo ExecuteReader de la clase SqlCommand dr = cmd.ExecuteReader(CommandBehavior.SingleResult) 'Obtengo el indice de las columanas con el metodo GetOrdinal Dim pos_Codigo As Integer = dr.GetOrdinal("PRODUCTID") Dim pos_Descripcion As Integer = dr.GetOrdinal("PRODUCTNAME") Dim pos_Precio As Integer = dr.GetOrdinal("UNITPRICE") Dim pos_Stock As Integer = dr.GetOrdinal("UNITSINSTOCK") 'Preguntamos si la variable dr no es vacia If dr IsNot Nothing Then 'Preguntamos si la variable dr a travez de su propiedad HasRows tiene fila If dr.HasRows Then 'Declaramos la variable obj de tipo Producto Dim obj As Producto While dr.Read() 'Instaciamos la variable Obj obj = New Producto() obj.Codigo = dr.GetInt32(pos_Codigo) obj.Descripcion = dr.GetString(pos_Codigo) obj.Precio = dr.GetDecimal(pos_Codigo) obj.Stock = dr.GetInt32(pos_Codigo) lista.Add(obj) End While End If 'Cerramos el objeto dr dr.Close()

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 10 de 13

Web Services Developer


'Cerramos la cadena de Conexion cn.Close() End If Return lista End Function

No olvidar ir generando la Dll del proyecto Layer_DataAccess . Clic derecho en el proyecto Layer_DataAccess / Generar.

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 11 de 13

Web Services Developer


Creando La Capa de Presentacion del Negocio (Layer_Layout) 1.- Agregar un Proyecto a la Solucin de tipo Aplicacin para Windows Men Archivo/ Agregar / Nuevo Proyecto. Seleccionar en plantillas Aplicacin para Windows, y poner nombre Layer_Layout. Agregar las referencias al proyecto, las Dlls Creadas (Layer_Entity, Layer_DataAccess); La Solucin quedara de la siguiente Forma:

Referencias Agregadas al proyecto.

2.- Disear la siguiente interfaz: (Poner nombre a los controles segn el esquema). En el Formulario Form1 agregar un DataGridView con el nombre dgvDatos:

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 12 de 13

Web Services Developer

En el ambito de importaciones importar los siguientes namespaces: Imports Layer_Entity Imports Layer_DataAccess En el mbito a nivel de clase declarar: Private OData As New ProductoDAL En el evento Load del formulario codificar lo siguiente: Me.dgvDatos.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells Me.dgvDatos.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells Me.dgvDatos.SelectionMode = DataGridViewSelectionMode.FullRowSelect Me.dgvDatos.ReadOnly = True dgvDatos.DataSource = OData.fListarProducto

En el evento CellFormating del control dgvDatos: If e.RowIndex Mod 2 = 0 Then e.CellStyle.BackColor = Color.Cyan End If

Terminado Presionar a ejecutar con F5:

Instr. : Alejandro Yauyo Barrientos / .Net Developer Specialist Email: yauyo148@hotmail.com

Pgina 13 de 13