none
Pasar valor de variable en una funcion a textbox RRS feed

  • Pregunta

  • Cordiales Saludos comunidad .NET

    Estoy desarrollando una aplicaciòn en .net y 3 capas y requiero mostrar el valor de una variable que esta en una funciòn en capa datos a un label que esta en presentacion.

    La funcion es un stored procedure que obtiene el max(Id)+1 de una tabla, el resultado de la misma requiero mostrarla en un label en presentacion. les dejo el codigo implementado en capa datos.

     Public Function ContadorId() As Integer
            Dim valorRetorno As Integer
    
            Try
                cn.ConnectionString = CadenaConexion()
                cn.Open()
                Dim cmd As New SqlCommand("SP_Contador", cn)
                cmd.CommandType = CommandType.StoredProcedure
                valorRetorno = CInt(cmd.ExecuteScalar())
    
               
            Catch ex As Exception
    
                MsgBox("Error" & ex.Message, MsgBoxStyle.Critical, "Informe de Error")
                If cn.State = ConnectionState.Open Then cn.Close()
                cn.Dispose()
            End Try
            Return valorRetorno
    
        End Function

    me gustaria  realizar esto en presentaciòn:

    "LabelNumeroRegistro.text =  valorRetorno"

    Eh intentado esto pero sin resultado:

    Public Function ContadorId(byval prueba) As Integer
            Dim valorRetorno As Integer
    
            Try
                cn.ConnectionString = CadenaConexion()
                cn.Open()
                Dim cmd As New SqlCommand("SP_Contador", cn)
                cmd.CommandType = CommandType.StoredProcedure
                valorRetorno = CInt(cmd.ExecuteScalar())
                prueba = valorRetorno
               
            Catch ex As Exception
    
                MsgBox("Error" & ex.Message, MsgBoxStyle.Critical, "Informe de Error")
                If cn.State = ConnectionState.Open Then cn.Close()
                cn.Dispose()
            End Try
            Return valorRetorno
    
        End Function
    -----------------------------------
    en capa presentacion:
    
    dim df as new DatosFunciones
    df.ContadorId(LabelNumeroRegistro.text )
    Espero sus importantes recomendaciones, gracias.





    • Editado Jose Alrey jueves, 21 de abril de 2016 7:20
    jueves, 21 de abril de 2016 7:03

Respuestas

  • No, en ningún caso deberías manipular controles desde tu capa de acceso a datos o la capa de negocio.

    Ese es el trabajo que debe realizar el código de tu capa de presentación: llamar a la capa de negocio para recuperar los datos y mostrarlos en los controles de tu aplicación.

    En tu caso:

    LabelNumeroRegistro.Text = ContadorId().ToString()


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Jose Alrey jueves, 21 de abril de 2016 18:26
    jueves, 21 de abril de 2016 7:35
  • "Jose Alrey" escribió:

    > me gustaria  realizar esto en presentaciòn:
    >
    > "LabelNumeroRegistro.text =  valorRetorno"

    Hola, José:

    La verdad es que ignoro por completo qué es lo que hace la función ContadorId que nos has mostrado implementada en la capa de datos, con un bloque Try ... Catch ... End Try, y con lo que "más me ha gustado": un ¡¡MsgBox!! :-(

    Para ese trabajo, mejor será que dicha función la implementes en la propia capa de presentación, dentro del formulario que contiene el control Label, y mostrarías el valor devuelto ejecutando:

        LabelNumeroRegistro.Text = ContadorId.ToString()

    > Eh intentado esto pero sin resultado:
    > Public Function ContadorId(byval prueba) As Integer
    >
    > en capa presentacion:
    >
    > dim df as new DatosFunciones
    > df.ContadorId(LabelNumeroRegistro.text )

    Para hacer eso, el parámetro de la función lo tienes que declarar por referencia (ByRef):

         Public Function ContadorId(ByRef prueba As Integer) As Integer
    
    
             ' ...
    
             prueba = valorRetorno
    
    
         End Function
    
    
         Dim df As New DatosFunciones()
    
         ' Declarar la variable que se va a pasar al procedimiento por referencia
         Dim prueba As Integer
         df.ContadorId(prueba)
    
         LabelNumeroRegistro.Text = prueba.ToString()

    Pero entiendo que desde la capa de presentación no se debería de llamar a la capa de datos, aunque sea para recuperar valores de parámetros pasados por referencia, y en ésta última capa, mejor será que dejes de interceptar los errores si tu intención es mostrale al usuario el mensaje de error mediante el típico cuadro de diálogo MsgBox, ya que sería en la capa de presentación donde deberías de interceptar el error y mostrar el mensaje del mismo si así lo estimas necesario.

    A mi manera de ver éstas cuestiones, la función ContadorId deberías implementarla como indico a continuación:

        Public Function ContadorId() As Integer
    
            Dim valorRetorno As Integer
    
            Using cn As New SqlConnection(CadenaConexion())
                Dim cmd As SqlCommand = cn.CreateCommand()
                cmd.CommandText = "SP_Contador"
                cmd.CommandType = CommandType.StoredProcedure
                cn.Open()
                valorRetorno = CInt(cmd.ExecuteScalar())
            End Using
    
            Return valorRetorno
    
        End Function

    Y es en el código cliente que llame a la función ContadorId donde tienes que encerrar la llamada entre un bloque Try ... Catch ... End Try, si es que en ella vas a depurar el error, porque si no es así, entonces el bloque Try ... Catch ... End Try lo tendrías que insertar en el procedimiento de la capa de presentación que efectua la llamada a la capa de negocio o de toma de decisiones encargada de ejecutar la función ContadorId existente en la capa de datos.

    En la capa intermedia, de negocio o de toma de decisiones, tendrías la función que llamaría a la función ContadorId existente en la capa de datos:

        Public Shared Function ObtenerIdContador() As Integer
    
            Dim id As Integer
    
            Try
                id = variableReferenciaCapaDatos.ContadorId()
    
            Catch ex As Exception
                ' Escribir el código necesario para depurar el error,
                ' si es que lo deseas depurar para que a la capa de
                ' presentación le llegue un error que el usuario de la
                ' aplicación sea capaz de entender sin necesidad de hacer
                ' un curso avanzado de programación.
    ' Si no deseas que a la capa de presentación le llegue
    ' el posible error que se haya podido producir, entonces
    ' NO ESCRIBAS NADA en el bloque Catch, pero NO ELIMINES
    ' el bloque Try ... Catch ... End Try End Try Return id End Function

    Y en la capa de presentación, mostrarías el valor en el control Label ejecutando:

      
        LabelNumeroRegistro.Text = CapaNegocio.ObtenerIdContador().ToString()

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.








    jueves, 21 de abril de 2016 14:47
    Moderador

Todas las respuestas

  • No, en ningún caso deberías manipular controles desde tu capa de acceso a datos o la capa de negocio.

    Ese es el trabajo que debe realizar el código de tu capa de presentación: llamar a la capa de negocio para recuperar los datos y mostrarlos en los controles de tu aplicación.

    En tu caso:

    LabelNumeroRegistro.Text = ContadorId().ToString()


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Jose Alrey jueves, 21 de abril de 2016 18:26
    jueves, 21 de abril de 2016 7:35
  • "Jose Alrey" escribió:

    > me gustaria  realizar esto en presentaciòn:
    >
    > "LabelNumeroRegistro.text =  valorRetorno"

    Hola, José:

    La verdad es que ignoro por completo qué es lo que hace la función ContadorId que nos has mostrado implementada en la capa de datos, con un bloque Try ... Catch ... End Try, y con lo que "más me ha gustado": un ¡¡MsgBox!! :-(

    Para ese trabajo, mejor será que dicha función la implementes en la propia capa de presentación, dentro del formulario que contiene el control Label, y mostrarías el valor devuelto ejecutando:

        LabelNumeroRegistro.Text = ContadorId.ToString()

    > Eh intentado esto pero sin resultado:
    > Public Function ContadorId(byval prueba) As Integer
    >
    > en capa presentacion:
    >
    > dim df as new DatosFunciones
    > df.ContadorId(LabelNumeroRegistro.text )

    Para hacer eso, el parámetro de la función lo tienes que declarar por referencia (ByRef):

         Public Function ContadorId(ByRef prueba As Integer) As Integer
    
    
             ' ...
    
             prueba = valorRetorno
    
    
         End Function
    
    
         Dim df As New DatosFunciones()
    
         ' Declarar la variable que se va a pasar al procedimiento por referencia
         Dim prueba As Integer
         df.ContadorId(prueba)
    
         LabelNumeroRegistro.Text = prueba.ToString()

    Pero entiendo que desde la capa de presentación no se debería de llamar a la capa de datos, aunque sea para recuperar valores de parámetros pasados por referencia, y en ésta última capa, mejor será que dejes de interceptar los errores si tu intención es mostrale al usuario el mensaje de error mediante el típico cuadro de diálogo MsgBox, ya que sería en la capa de presentación donde deberías de interceptar el error y mostrar el mensaje del mismo si así lo estimas necesario.

    A mi manera de ver éstas cuestiones, la función ContadorId deberías implementarla como indico a continuación:

        Public Function ContadorId() As Integer
    
            Dim valorRetorno As Integer
    
            Using cn As New SqlConnection(CadenaConexion())
                Dim cmd As SqlCommand = cn.CreateCommand()
                cmd.CommandText = "SP_Contador"
                cmd.CommandType = CommandType.StoredProcedure
                cn.Open()
                valorRetorno = CInt(cmd.ExecuteScalar())
            End Using
    
            Return valorRetorno
    
        End Function

    Y es en el código cliente que llame a la función ContadorId donde tienes que encerrar la llamada entre un bloque Try ... Catch ... End Try, si es que en ella vas a depurar el error, porque si no es así, entonces el bloque Try ... Catch ... End Try lo tendrías que insertar en el procedimiento de la capa de presentación que efectua la llamada a la capa de negocio o de toma de decisiones encargada de ejecutar la función ContadorId existente en la capa de datos.

    En la capa intermedia, de negocio o de toma de decisiones, tendrías la función que llamaría a la función ContadorId existente en la capa de datos:

        Public Shared Function ObtenerIdContador() As Integer
    
            Dim id As Integer
    
            Try
                id = variableReferenciaCapaDatos.ContadorId()
    
            Catch ex As Exception
                ' Escribir el código necesario para depurar el error,
                ' si es que lo deseas depurar para que a la capa de
                ' presentación le llegue un error que el usuario de la
                ' aplicación sea capaz de entender sin necesidad de hacer
                ' un curso avanzado de programación.
    ' Si no deseas que a la capa de presentación le llegue
    ' el posible error que se haya podido producir, entonces
    ' NO ESCRIBAS NADA en el bloque Catch, pero NO ELIMINES
    ' el bloque Try ... Catch ... End Try End Try Return id End Function

    Y en la capa de presentación, mostrarías el valor en el control Label ejecutando:

      
        LabelNumeroRegistro.Text = CapaNegocio.ObtenerIdContador().ToString()

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.








    jueves, 21 de abril de 2016 14:47
    Moderador
  • Efectivamente, gracias por tu recomendaciòn maestro Asier Villanueva
    jueves, 21 de abril de 2016 18:27
  • Muchas gracias por tus respuestas maestro  Enrique M. Montejo, lo manejare de la forma que lo has descrito, saludos.
    jueves, 21 de abril de 2016 18:31