Tutorial: Mantenimiento de visitas con Vb.Net y Enterprise library

Microsoft Data Access Application Block para .NET(Parte 1)


Consiste de un ensamblado denominado "Microsoft.ApplicationBlocks.Data", el cual contiene toda la funcionalidad necesaria para realizar la mayoría de las funciones de acceso a datos sobre la base de datos Microsoft SQL Server #.

Estas funciones le ayudaran a resolver las siguientes tareas:
  • Ejecutar procedimientos almacenados o sentencias SQL, incluyendo parámetros.
  • Devolver objetos SqlDataReader, DataSet, XmlReader, o valores únicos (scalar).

Inicialmente diremos que el espacio de nombres Microsoft.Applicationblocks.Data contiene la clase SQLHelper, la cual provee los siguientes métodos:
  • ExecuteNonQuery. Este método se utiliza para ejecutar Comandos que no devuelven filas o valores. Es generalmente usado para funciones de ABM con procedimientos almacenados. 
  • ExecuteReader. Devuelve un objeto SqlDataReader que contiene el resultado del comando de consulta o procedimiento almacenado. 
  • ExecuteDataset. Devuelve un DataSet que contiene el resultado del comando de consulta o procedimiento almacenado (El dataset es retornado lleno con datos). 
  • ExecuteScalar. Devuelve un valor único. Este valor es el correspondiente a la primera columna de la primera fila retornada por el comando. 
  • ExecuteXmlReader. Devuelve un documento en formato XML desde una consulta del tipo “FOR XML"

Cada uno de estos métodos soporta el uso de comandos, procedimientos almacenados y transacciones SQL y la posibilidad de utilizar parametros (de entrada y salida).

Para descargarlos: 

http://msdn.microsoft.com/en-us/library/ff648951.aspx

Elijan uno para la versión de su visual studio, para el ejercicio usaremos Enterprise Library 5.0 para Visual Studio 2010. Descargar e instalar.

Tutorial Microsoft Applications Blocks N-Tier (Parte 1)

Para este tutorial se creará una aplicación de mantenimiento de visitas, que pueda consultar, grabar, modificar y borrar registros usando los applications blocks de Microsoft (enterprise library y vb.net)

Para completar este tutorial necesitas entender programación en capas, visita mi entrada del blog referente a ese tema: http://programmerbook.blogspot.com/2013/06/tutorial-programacion-en-capas-net.html

A diferencia de la otra entrada del blog, en este caso no usarémos Entity Framework ni Linq para acceso a datos, sino las librerías de Microsoft. (Pronto haré una entrada del blog sobre cual tecnología elegir al momento de desarrollar una nueva aplicación)

1. El ejemplo utiliza el siguiente diagrama de Tablas:
diagrama de tablas


2. Crear una nueva solución en el visual studio con nombre "Visitas_SLN". Y crear los siguientes proyectos:

  • 1. Data: Acceso a datos
  • 2. Entidades: Clases/entidades
  • 3. Negocios: Lógcia del negocio
  • 4. Winform: Interfaz de usuario
Realizar las referencias entre proyectos de la siguiente manera:
  • Data contiene referencias de: Entidades
  • Negocios contiene referencias de: Entidades y Data
  • Winform contiene referencias de: Entidades y Negocios
solucion

Capa Entidades

Definir clases de entidades solo con sus propiedades y constructores. Por ejemplo para el caso de la entidad Vendedor se crea la clase "VendedorInfo.vb", que contiene 2 propiedades y 2 constructores:
Public Class VendedorInfo
    Public Property IdVendedor As Integer
    Public Property Nombres As String

    Sub New(idvendedor As Integer, nombres As String)
        Me.IdVendedor = idvendedor
        Me.Nombres = nombres
    End Sub

    Sub New()
    End Sub
End Class

De igual forma para las demás entidades ClienteInfo.vb, RutaInfo.vb, TipoVisitaInfo.vb, VisitaInfo.vb la fuente la pondré para descargar al final del tutorial. Cuando terminen de definir las entidades continúan con la siguiente sección:

Capa Data

1. En la capa Data, agregar referencia a las siguientes librerias que vienen con el instalador del Enterprise Library 5.0:

  • Microsoft.Practices.EnterpriseLibrary.Common.dll
  • Microsoft.Practices.EnterpriseLibrary.Data.dll
  • Microsoft.Practices.Unity.dll

2. Crear una clase "BaseDatos.vb", hacer imports a los siguientes NameSpaces de esas librerias:

  • Imports Microsoft.Practices.EnterpriseLibrary.Common
  • Imports Microsoft.Practices.EnterpriseLibrary.Data.Sql
3. Crear una propiedad privada "_db" de tipo SqlDatabase. y una propiedad compartida de solo lectura "BD" del mismo tipo, en el Get programar la conexion a la base de datos. La clase debe quedar algo así:

Imports Microsoft.Practices.EnterpriseLibrary.Common
Imports Microsoft.Practices.EnterpriseLibrary.Data.Sql
Public Class BaseDatos
    Private Shared _db As SqlDatabase
    Public Shared ReadOnly Property BD() As SqlDatabase
        Get
            If (_db Is Nothing) Then
                _db = New SqlDatabase( _
                    "Server=WILLY8\MSSQLSERVER2012;Database=VisitasDB;Integrated Security=False;User=sa;Password=123456")
            End If
            Return _db
        End Get
    End Property
End Class


4. Crear una clase "VendedorData.vb" y agregar los métodos para consultar listado de vendedores, consultar 1 vendedor específico, grabar, modificar, eliminar:
Imports Entidades
Public Class VendedorData
    'Muestra como se usa el metodo ExecuteReader, 
    'puede recibir una sentencia sql o el nombre de un storedprocedure en String
    Public Function ConsultarVendedores() As List(Of VendedorInfo)
        Dim lista As New List(Of VendedorInfo)
        Using dr As IDataReader = BaseDatos.BD.ExecuteReader(CommandType.Text, "Select * from tbVendedor")
            While dr.Read
                lista.Add(New VendedorInfo(dr.GetInt32(dr.GetOrdinal("IdVendedor")), dr.GetString(dr.GetOrdinal("Nombres"))))
            End While
            dr.Close()
        End Using
        Return lista
    End Function

    'Se pueden usar sentencias Select con where
    Public Function ConsultarVendedor(IdVendedor) As VendedorInfo
        Dim v As New VendedorInfo
        Using dr As IDataReader = BaseDatos.BD.ExecuteReader( _
            CommandType.Text, "Select * from tbVendedor where IdVendedor = " + IdVendedor.ToString())
            While dr.Read
                v.IdVendedor = IdVendedor
                v.Nombres = dr.GetString(dr.GetOrdinal("Nombres"))
            End While
            dr.Close()
        End Using
        Return v
    End Function

    'Muestra como se usa el ExecuteNonQuery,
    'Recibe como parámetro el nombre del procedure, y un arreglo de objetos 
    'de los valores para el procedure
    Public Sub GrabarVendedor(EsNuevo As Boolean, Vendedor As VendedorInfo)
        BaseDatos.BD.ExecuteNonQuery("uspManejaVendedor", _
                     New Object() {EsNuevo, Vendedor.IdVendedor, Vendedor.Nombres})
    End Sub

    Public Sub EliminaVendedor(IdVendedor As Integer)
        BaseDatos.BD.ExecuteNonQuery("uspEliminaVendedor", _
                 New Object() {IdVendedor})
    End Sub
End Class

De igual manera completar las clases RutaData.vb, ClienteData.vb, TipoVisitaData.vb, VisitaData.vb.

Importante!!
Notese que no se necesita abrir y cerrar conexión, ya que las librerias lo hacen automáticamente por cada instrucción "Execute" es una de las ventajas.

Para continuar a la segunda parte click aqui

Comentarios