Visual Basic.NET - combobox con procedimiento almacenado y en capas

   
Vista:
Imágen de perfil de Elizabeth

combobox con procedimiento almacenado y en capas

Publicado por Elizabeth (7 intervenciones) el 11/06/2015 18:08:24
Hola amigos
tengo una tabla llamada unidad_de_medida con los campos id_unidad y descipcion con un procedimiento almacenado

create procedure llenar_combo
as
SELECT * FROM Unidad_de_medida

nose si esta bien

estoy programando en capas y este es el codigo de mi DAO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Function llenarComboProducto(ByVal codigo As String) As Producto
        Dim lista As New List(Of Producto)
        Dim lector As SqlDataReader
        Dim objProducto As Producto
        objProducto = New Producto
        Dim objProducto1 As New Producto
        cmdProducto = New SqlCommand("llenar_combo", objConexion.obtenerconexion)
        If objConexion.obtenerconexion.State = ConnectionState.Open Then
            objConexion.obtenerconexion.Close()
        Else
            objConexion.obtenerconexion.Open()
 
        End If
        lector = cmdProducto.ExecuteReader
        If lector.Read Then
            objProducto.id_unidad = lector(0)
            objProducto.descripcion = lector(1)
        End If
        Return objProducto
End Function

este codigo es de mi entidad

1
2
3
Public Function llenarComboProducto() As Producto
        Return objProductoDAO.llenarComboProducto
    End Function

y esta en mi form

1
2
3
4
5
6
7
8
9
10
Sub Llenar_Combo()
        Dim producto1 As New Producto
        Dim objProducto = New List(Of Producto)
        Dim objProductoNE = New ProductoNE
        objProducto = objProductoNE.listarProducto
        CboGrupo.DataSource = Nothing
        CboGrupo.DataSource = objProducto
        CboGrupo.DisplayMember = "descripcion"
        CboGrupo.ValueMember = "id_unidad"
end sub

y este código no me funciona no se como hacer para que me traigan los datos de mi unidad de medida en un combobox en ventana producto porfa si alguien puede ayudarme
desde gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

combobox con procedimiento almacenado y en capas

Publicado por Horroroso (46 intervenciones) el 11/06/2015 22:44:36
Hola, vamos analizando tu codigo:

1
Public Function llenarComboProducto(ByVal codigo As String) As Producto
Aqui pides un parametro llamado codigo... pero este nunca se utiliza.

1
Dim lista As New List(Of Producto)

esta lista nunca recibe un dato y no se utiliza. No se para que entonces la defines o que intentaste.

1
2
3
4
5
lector = cmdProducto.ExecuteReader
        If lector.Read Then
            objProducto.id_unidad = lector(0)
            objProducto.descripcion = lector(1)
        End If
Aqui siempre vas a llenar a objProducto con el primer producto, y siempre te va a traer el primer resultado de la tabla.

1
2
3
Public Function llenarComboProducto() As Producto
        Return objProductoDAO.llenarComboProducto
    End Function
Este codigo no se llama mas adelante.
1
2
3
4
5
6
7
8
Dim producto1 As New Producto
        Dim objProducto = New List(Of Producto)
        Dim objProductoNE = New ProductoNE
        objProducto = objProductoNE.listarProducto
        CboGrupo.DataSource = Nothing
        CboGrupo.DataSource = objProducto
        CboGrupo.DisplayMember = "descripcion"
        CboGrupo.ValueMember = "id_unidad"
objProducto es llenado por ProductoNE.listarProducto (no esta el codigo de Listar Producto por lo que no se si trae correctamente los datos)

Creo que tienes mal varios conceptos, para mi deberias hacer que el procedimiento aceptara el parametro, luego regresaras el objeto Producto instanciado (y elminiar el listado, ya que no se usa.)

despues, llamar el procudto y utilizarlo conmo un datasource, tal y como lo tienes.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo

combobox con procedimiento almacenado y en capas

Hola Elizabeth

Veo que estás queriendo hacer algo de lo cual no tienes claro el concepto.

Fíjate que para comenzar en tu DAO, la funcion llenarcomboproducto, te devuelve un producto, lo cual es erróneo, ya que lo que tu estás buscando es llenar el combobox con las unidades de medida, entonces esa función te debería devolver una lista de las unidades de media que no tendrían porque estás amarradas diretamente a un determinado producto, ya que si hay unidades de medida por ejemplo: Caja, unidad, sobre o lo que fuere, eso es lo que debes llenar en el combo para que me imagino cuando registres un producto, puedas seleccionar desde ese combo si es una unidad, una caja, un paquete o algo, por lo tanto necesitas la Lista de unidades de medida. Entonces esa lista debe llenar solo con unidades de medida.

Cuando recuperes un determinado producto con una determinada unidad de medida, tu solo traes el producto, el cual deberá traer el idmedida, y que hará?, pues seleccionar según el idmedida que traiga, seleccionar del combobox que unidad de medida le corresponde y te mostrará en el combo su unidad de medida respectiva.

Luego veo que dices que en tu entidad tienes un método llenar comboproducto, que lamento desilucionarte, pero las entidades, no deben tener métodos, eso en todo caso debería estar en tu capa lógica de negocio y no en la capa de entidades, ya que una entidad es solo una representación de una tabla en tu base de datos.

Y en tu formulario das demasiadas vueltas para no llegar a nada cuando, lo que tendrías que hacer es declarar una instancia de tu capa negocio mas o menos así:

Dim oMedidas As new UnidadesmedidaNegocio()

combobox.datasource=oMedidas.ListarMedidas
combobox.didplaymember="Descripcion"
combobox.valuemember="IdMedida"

Eso sería todo.

Hay que tener en claro esos concepto y saber que se está pretendiendo hacer.

Si necesitas ayuda al respecto, tienes mi email y no dudes en contactarme.

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de luis enrique

combobox con procedimiento almacenado y en capas

Publicado por luis enrique luis.enrique71@live.com.mx (11 intervenciones) el 08/07/2015 01:34:16
Hola

Yo, no soy experto, pero si te puede dar una idea de como lo he trabajado en mi proyecto, te anexo el codigo que he utilizado y me ha funcionado perfectamente en 3 capas.

Procedimiento (SP)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ALTER PROCEDURE [dbo].[pestado]
@accion    int=null,
@idestado  int=null,
@nombreestado    nvarchar(50) = null
AS
SET NOCOUNT ON
--insertar registros nuevos
if @accion = 1
begin
select nombreestado from testado order by nombreestado
end
 
--Mostrar Registros
 
if @accion = 2
begin
select * from TEstado
 
end
[/code]

DAO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Public Class DaoEstados
 
    Dim db As New Conexion.Database
 
    Public Function ObtenerListaEstadosforCommbo() As Object
        Try
            'Crear arreglo de parametros
            Dim arrParams As New ArrayList
            arrParams.Add(New System.Data.SqlClient.SqlParameter("@accion", 1))
 
            'ejecutar el storeprocedure y devolver el resultado
            Return db.ExecuteSP("pestado", arrParams)
        Catch ex As Exception
            Throw ex
        End Try
    End Function
 
    Public Function MostrarDatos() As Object
        Try
            'Crear arreglo de parametros
            Dim arrParams As New ArrayList
            arrParams.Add(New System.Data.SqlClient.SqlParameter("@accion", 2))
 
            'ejecutar el storeprocedure y devolver el resultado
            Return db.ExecuteSP("pestado", arrParams)
        Catch ex As Exception
            Throw ex
        End Try
 
 
    End Function
 
End Class

ENTITI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Class Eestados
    Private _idestado As Int32
    Private _nombreestado As String
 
 
    Public Property idestado() As Int32
        Get
            Return _idestado
        End Get
        Set(ByVal value As Int32)
            _idestado = value
        End Set
    End Property
 
    Public Property NombreEstado() As String
        Get
            Return _nombreestado
        End Get
        Set(ByVal value As String)
            _nombreestado = value
        End Set
    End Property
 
End Class

CODIGO EN FORM DONDE COLOQUES EL COMBO DEL DATO QUE DESEAS LLAMAR
Imports Negocio ====>Aqui tengo una referencia que estoy importando, y con esta referencia importo los dao y los entitis que los tengo en una clase aparte y a asi vez en la clase de negocio estoy importando la clase donde tengo la conexion a la bd para no estarla teclenado cada vez que se requiera el codigo
1
2
3
4
5
6
7
8
9
Public Class frmClientes
    Dim daoc As New DaoEstados
    Dim dao As New DaoClientes
 
    Private Sub Rentas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboEstado.DataSource = daoc.ObtenerListaEstadosforCommbo
        ComboEstado.DisplayMember = "NombreEstado"
        ComboEstado.SelectedIndex = -1
        DataGridView1.DataSource = dao.MostrarDatos


Espero te sea de ayuda, y en lo que este a nuestro alcance.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo

combobox con procedimiento almacenado y en capas

Luis Enrique

Una consulta, veo que en tu código haces un imports a Negocio, pero no veo que lo uses en ninguna parte, y mas bien estoy viendo que en tu formulario estás haciendo referencia al DAO.

No estás rompiendo la arquitectura en capas?.

Otra observación, si conoces el tipo de dato a devolver en el DAO, porqué devolver un object en vez de devolver una lista del tipo entity?.

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Luis

combobox con procedimiento almacenado y en capas

Publicado por Luis (11 intervenciones) el 21/10/2015 21:22:39
Una disculpa por la tardanza, comento:

Dentro de mi aplicacion tengo 3 proyectos

uno donde tengos los forms
otro de nombre negocio
y otro de nombre conexion

y los tengo referenciados de la siguiente manera

en el proyecto negocio esta referenciado el proyecto conexion (donde le pasa la conexion a la db)
en el proyecto from tengo referenciado el proyecto negocio donde ya tiene la conexion a la bd.

y en este ultimo proyecto (Negocio tengo dos carpetas donde tengo todas mis clases de DAO Y ENTITIS)

y por esa razon hago la refencia del imports negocio para poder utilizar los dao y entitis


probablemente lo estructure mal, pero me ha funcionado hasta ahorita.

saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo

combobox con procedimiento almacenado y en capas

Entendido, comprendo tus argumentos.

Pero si aceptas sugerencias, pues te podría decir que si quieres tener una arquitectura en n-capas podrías tener algo así:

Solución con 4 proyectos:

1- Proyecto de libreria de clases DAL(Capa de acceso a datos)
2.-Proyecto de libreria de clases BLL(Reglas de negocio)
3.-Proyecto de libreria de clases EntL (Entidades)
4.-Proyecto de windows forms (Cliente Desktop)

En tu capa DAL, alli puedes tener una clase conexion.

Tu capa cliente debe tener referencia a la capa BLL y tambien podría ser a la capa entidades(aunque los mas puristas dicen que no)
Tu capa BLL referencia a la capa DAL y entidades
Tu capa DAL referenciar a entidades

Con lo cual, como verás no romperías la arquitectura en pasarte la capa DAL hasta la capa cliente.

Cualquier cosa al respecto si crees que te pueda ayudar, no dudes en consultar.

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Luis

combobox con procedimiento almacenado y en capas

Publicado por Luis (11 intervenciones) el 22/10/2015 16:27:05
Gracias

Gracias por la sugerencia, le verdad lo tomare mucho en cuenta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo

combobox con procedimiento almacenado y en capas

Que bueno que te sirva la sugerencia.

Ahora también debes tener en cuenta que puedes hacer uso de Entity Framework, con una arquitectura en capa, lo cual te va a reducir considerablemente los tiempos de desarrollo, ya que no vas a tener que codificarte todo como si se hace con ADO.Net puro.

Saludos cordiale
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar