Publicado en ASP .NET, Tutoriales

ASP NET: Como crear una Aplicacion de 3 Capas con Entidades (4ta. parte)

Aqui dejo la tan atrasada 4ta parte de este tutorial. Lo estoy preparando en medio de la dramatica situacion que vivimos en Chile producto del Mega Terremoto que afecto la zona centro-sur del pais. De hecho en mi trabajo (en Santiago) nos devolvieron porque el edificio no tenia agua y tenian grietas que debian ser evaluadas.

Ahora volvemos a lo nuestro. La 3ra Parte quedamos con la comunicacion de capas con entidades haciendo una simulacion de un envio de datos desde la Capa de Datos.

Cabe aclarar que desde este parte en adelante, estoy trabajando con Visual Studio 2008.

Primero que nada, agregaremos registros a nuestra tabla de Clientes segun muestra la siguiente imagen:

El codigo SQL es el que sigue:

insert into clientes values (1, 1,'9','juan','perez')
insert into clientes values (2, 2,'7','maria','cortes')
insert into clientes values (3, 3,'5','jose','gonzalez')

Ademas crearemos un procedimiento almacenado que hara la consulta del cliente. Lo llamaremos usp_ConsultarCliente y tendra la siguiente tendencia:

	CREATE PROCEDURE [dbo].[usp_ConsultarCliente]
	-- Add the parameters for the stored procedure here
	@nro_cta int
	AS
	BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	-- Insert statements for procedure here
	SELECT * from clientes where nro_cta = @nro_cta
	END
	

Para conectar la aplicacion con la base de datos, lo haremos con conexion segura. Asi que le daremos permisos al usuario ASPNET sobre la base demo que teniamos creado, como muestra la figura a continuacion:

Ahora volvemos a nuestra solucion. En la capa de datos, el metodo daConsultaCliente lo reemplazaremos por el codigo necesario para la conexion. Usaremos la sentencia Using que es la forma mas optima de consumir una conexion de base de datos.

Aqui esta el codigo completo de la clase:

    Imports System.Data.SqlClient
    Imports CapaEntidades

    Public Class BaseDatos

    Dim connectionString As String

    Public Sub New()
    connectionString = GetConnectionString()
    End Sub

    Private Function GetConnectionString() As String

    Return “Data Source=.;Database=demo;Integrated Security=SSPI;”

    End Function

    Public Function daConsultaCliente(ByVal NroCta As Integer) As CapaEntidades.cliente
    Dim miCliente As New CapaEntidades.cliente

    Using connection As New SqlConnection(connectionString)
    connection.Open()

    Dim command As New SqlCommand()
    Dim parameter As New SqlParameter()

    'creamos un comando para ejecutar el procedimiento almacenado
    command.Connection = connection
    command.CommandType = CommandType.StoredProcedure
    command.CommandText = “usp_ConsultarCliente”

    'creamos el parametro del procedimiento
    parameter.DbType = DbType.Int16
    parameter.Direction = ParameterDirection.Input
    parameter.ParameterName = “@nro_cta”
    parameter.Value = NroCta

    'agregamos el parametro
    command.Parameters.Add(parameter)

    'ejecutamos el Procedimiento Almacenado con un reader para recuperar la fila
    Dim reader As SqlDataReader = command.ExecuteReader

    While reader.Read()
    'llenamos la Entidad con los datos del registro
    miCliente.nro_cuenta = reader(0).ToString
    miCliente.rut = reader(1).ToString
    miCliente.dv = reader(2).ToString
    miCliente.nombre_cliente = reader(3).ToString
    miCliente.apellido_cliente = reader(4).ToString

    End While
    End Using

    Return miCliente
    End Function

    End Class
	

Una vez que ejecutemos la aplicacion tendremos la misma vision de datos que en la 3ra. parte. Se despliegan los datos del Cliente como se muestran a continuacion:

Ahora dejo aqui disponible el codigo de la solucion .NET acumulado hasta ahora.

Y perdon por el atraso de este tutorial. 🙂

Links:

ASP NET: Como crear una Aplicacion de 3 Capas con Entidades (1ra. parte)

ASP NET: Como crear una Aplicacion de 3 Capas con Entidades (2da. parte)

ASP NET: Como crear una Aplicacion de 3 Capas con Entidades (3ra. parte)

TYDW.-

32 comentarios sobre “ASP NET: Como crear una Aplicacion de 3 Capas con Entidades (4ta. parte)

  1. Hola, como estas espero que bien, como va la reconstruccion, despues de los sismos, espero que todo bien con tigo y tu famialia, ahora sobre el proyecto de tres capas, me podrias ayudar a ver la parte de loin con tres capas de antemano gracias saludos

  2. Como puedo hacer que la secion no caduque mayormente siempre la sesion por defecto tine una duracion de 20 minutos ,Te agradecere si me puedes dar la respuesta y si no fuera molestias codigo fuente de aplicativo

  3. hola amigo muy bueno tu tutorial, una pregunta el el codigo de la solucion .NET no se puede bajar, sale un mensaje de que ha sido removido..
    Talvez lo puedes sbir de nuevo..

    Gracias

    1. Hola

      Para leer la cadena de conexion en el web.config debes agregarla primero a dicho archivo:

      y luego la lees de esta forma:

      Dim conexion As String = System.Web.Configuration.WebConfigurationManager.ConnectionStrings(“miConexion”)

      atte.

  4. Estupendo todo funciono de maravillas. Gracias por este fantastico manual. Ahora me dispongo a seguir agregandole funcionalidades.
    Salu2 desde Sevilla.

  5. Hola que tal, muy buen tutorial, todo funciono correctamente, corri el proyecto paso a paso con el debug y en ningun lado usas la capa de Entidades, mi pregunta es en que parte la usas?, ahhh y ya abusando de tu tiempo un favor podrias proporcionarme copia del codigo pero en c# Saludos desde México DF

    1. Hola

      la capa de entidades la uso para instanciar la clase CLIENTES. Fijate en el codigo de la capa de datos, hay un:

      Imports CapaEntidades

      y mas abajo en el metodo de consulta, instancio la clase:

      Dim miCliente As New CapaEntidades.cliente

      y luego lleno los datos de dicha entidad mas abajo:

      miCliente.nro_cuenta = reader(0).ToString


      Ahi es donde se usa y luego se envia la entidad a la capa de negocios y luego a la capa cliente.

      atte.

  6. que tal…
    tengo varias veces viendo este blog.. me parece excelente..
    aprovecho para preguntare…. un dilema que he tenido varias veces.

    las entidades, capa de datos, capa negocios. las entiendo como funcionan en este ejemplo, lo que no me cada claro es que pasa cuando en una BD hay una relación “uno a muchos” o “Muchos a muchos” como pones eso como entidad.. o de que forma se representa en el código.

    te agradeceria tu ayuda

    1. Hola

      En ese caso ya se puede usar IList para las entidades que son de una relacion 1->N

      Ejemplo Entidades C#:

      public class Cliente
      {
      string RutCliente
      {
      get;
      set;
      }

      string NombreCliente
      {
      get;
      set;
      }

      //el cliente puede tener mas de 1 direccion
      IList ListaDirecciones
      {
      get;
      set;
      }

      }

      y la de Direccion seria

      public class Direccion
      {
      string NombreCalle
      {
      get;
      set;
      }

      string NroCalle
      {
      get;
      set;
      }

      string CiudadDireccion
      {
      get;
      set;
      }

      }

      es un ejemplo breve pero te puede servir de ayuda.

      atte.

  7. Hola, he hecho todo lo que has indicado. Me ha servido para ir entendiendo algunos conceptos. Ahorita tengo un problema, creo que tiene que ver con permisos pero no se cómo resolverlo.

    Al ejecutar, tengo el siguiente error:

    Could not find stored procedure ‘usp_ConsultarCliente’.

    La conexión a mi báse de datos local la hago usando la cadena:

    “Data Source=VISTA\SQLEXPRESS;Initial Catalog=demo;User Id=sa;Password=chachalaca;”

    de antemano gracias por el tutorial. Saludos

    1. Hola. Primero que nada debes revisar que en tu base de datos “demo” exista el procedimiento ‘usp_ConsultarCliente’. Haz un sp_help en esa base y te mostrara todos los objetos que existen.

      Tambien puedes usar esta consulta para ver los SP

      Select name from sysobjects where type=”P”

      atte.

      1. Hola, gracias por la respuesta
        Resulta que sp_help sobre la bd “demo” me devuelve:

        Msg 15009, Level 16, State 1, Procedure sp_help, Line 66
        The object ‘usp_ConsultarCliente’ does not exist in database ‘demo’ or is invalid for this operation.

        y

        Select name from sysobjects where type=’P’

        Me indica que si está ‘usp_ConsultarCliente’

        je, ¿qué hice mal?, ¿qué debo de hacer?

        Gracias
        Saludos

  8. Hola, ya he resuelto el problema. Con la información que me diste me puse a trabajar y ya funciona. Ahora me queda estudiar enteramente tu manual. Muchas Gracias.
    Saludos

  9. Antes que nada, quería agradecerte el esfuerzo que te has tomado en comapartir tus habilidades y experiencias con otros.

    Yo descargué el código desde el sitio que has propuesto sin problemas. Abrí y convertí el mismo para que se ejecute en VB2010 y Framework 4.0. Tengo instalado el IIS 7.5. Al abrir tu código, la capa “web3Capas” me aparece como que ha sido descargada del proyecto. A mi no me aperece como en el tutorial que en la propiedades de la carpeta puedes ver “Uso compartido de Web”. Yo en Windows 7 x64 no puedo ver esa opción. Supongo que por eso al intentar cargar la capa de presentación nuevamente al proyecto me da el siguiente mensaje: “No se puede obtener acceso a la metabase de IIS. No tiene privilegios suficientes para tener acceso a los sitios web en su equipo”.

    ¿Cómo puedo manualmente darle derechos a esta carpeta en este escenario? Si creo un sitio Web nuevo lo hace sin problemas o sea que no es problema de reparar el Framework o reinstalar todo.

    Te estoy muy agradecido de antemano.

  10. Hola, Yo aquí nuevamente, tengo un problema técnico dada mi inexperiencia en vb net. Mira, tengo un procedimiento almacenado con el que quiero obtener de la BD demo todas las cuentas. Ahora necesito una variable en la que pueda almacenar el resultado de la consulta. Lo más lógico es un arreglo de entidades, la cual quiero regresar como resultado de la consulta.

    Pero al declarar

    Dim aCuentas As capaEntidades.clientes()
    ‘Consulto
    Dim i As Integer = 0
    While reader.Read()
    ‘llenamos la Entidad con los datos del registro ….
    aCuentas(i).nroCuenta = reader(0).ToString // Aquí error
    ‘….
    End While

    obtengo el error : referencia a objeto no establecida como instancia de un objeto

    Cómo hago entonces para consultar todo y dejarlo en una estructura?

    Saludos

    1. Hola … la entidad debe estar “instanciada” con el NEW. El codigo debe ser asi:

      Dim aCuentas As New capaEntidades.clientes()
      ‘Consulto
      Dim i As Integer = 0
      While reader.Read()
      ‘llenamos la Entidad con los datos del registro ….
      aCuentas(i).nroCuenta = reader(0).ToString // Aquí error
      ‘….
      End While

      1. Hola, no me resulta, si le añado el “New” me marca en azul sobre “aCuentas(i)” y me indica que no se puede indizar la clase “capaEntidades.clientes”.
        Y cambio por
        Dim aCuentas() As New capaEntidades.clientes;

        y resulta que las matrices no pueder tener New.

        Y si lo dejo como está originalmente, aCuentas(i) si reconoce los métodos y propiedades. Pero me da una excepción de referencia Nula. ¿cómo se inicializa el objeto?

        Saludos y gracias

  11. Hola rigelnoe, El codigo debe ser asi sin el contador

    Dim aCuentas As New capaEntidades.clientes()
    ‘Consulto

    While reader.Read()
    ‘llenamos la Entidad con los datos del registro ….
    aCuentas.nroCuenta = reader(0).ToString // Aquí error
    ‘….
    End While

    Si quieres “llenar” un arreglo de entidades debes usar Listas Genericas. List o IList

  12. Saludos tydw, muy bueno el tutorial, ahora me gustaria saber si me puedes ayudar con una enorme traba que tengo, estas instanciando utilizando el SQL SERVER 2005, ahora necesito saber si puedo cambiar esto, y utilizar en vez de una base de datos, una base de conocimiento, como por ejemplo el PROLOG, seria genial si me das alguna ayuda ayuda respecto a este tema, de antemano saludos y gracias por este excelente tutorial

  13. Buenas noches, baje el codigo ya tengo la base de datos de ejemplo, me marca el error siguiente al tratar de correrlo:

    \3Capas\Web3Capas\Default.aspx.vb(13,0): error BC30311: Value of type ‘CapaEntidades.cliente’ cannot be converted to ‘cliente’.

    que puede ser?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s