none
Traer datos calculados (sum(xxx)) desde la capa de acceso a datos (arquitectura n-capas) en vb.net RRS feed

  • Pregunta

  • Hola Todos,

    he intentado realizar un calcula en la capa de acceso a datos y devolverlo a un formulario y no sé como almacenar el dato calculado. Les agradezco me colaboren... gracias. He aquí el último código que probé sin resultados:

      Public Shared Function GetTotalLIQxTer(ByVal id_cosecha As String, ByVal tipo_tercero As String, ByVal id_tercero As String, ByVal tipo_doc As String) As Decimal
    
            'Dim liq_terceros As Liq_TercerosEN
            Dim conn As New MySqlConnection
            Dim cmd As New MySqlCommand
            '--
            Dim objconn As New Conexion
            conn = objconn.open
    
    
    
            Dim sql As String = "SELECT sum(afectacion* valor) as TotalLiq" & _
                               " FROM   Liq_Terceros " & _
                               " WHERE id_cosecha = ?id_cosecha and tipo_tercero = ?tipo_tercero and " & _
                                        "id_tercero= ?id_Tercero and tipo_doc = ?tipo_Doc and estado <> 'anulado' " & _
                               " ORDER BY fecha,tipo_doc,num_doc"
    
            Try
                cmd = New MySqlCommand(sql, conn)
    
                cmd.Parameters.AddWithValue("?id_cosecha", id_cosecha)
                cmd.Parameters.AddWithValue("?tipo_tercero", tipo_tercero)
                cmd.Parameters.AddWithValue("?id_tercero", id_tercero)
                cmd.Parameters.AddWithValue("?tipo_doc", tipo_doc)
    
                Dim vTotal As Decimal = (cmd.ExecuteScalar())
    
                Return vTotal
    
            Catch ex As Exception
                MsgBox("Error : " & ex.ToString)
                Return Nothing
            Finally
                conn.Close()
            End Try
        End Function

    Gracias


    Saludos, Solph.

    lunes, 2 de abril de 2012 13:22

Respuestas

  • ahh es que la suma devuelve un null

    en ese caso poque no usas

    Dim sql As String = "SELECT IFNULL(sum(afectacion* valor), 0) as TotalLiq" & _

    como veras el IFNULL hara que sino puede sumar registro devuelva un cero como resultado


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP lunes, 2 de abril de 2012 21:10
    • Marcado como respuesta Solp lunes, 2 de abril de 2012 21:49
    lunes, 2 de abril de 2012 18:54

Todas las respuestas

  • pero no veo nada incorrecto en ese codigo

    digo alli recuperas un unico valor, quizas deberias usar

    Dim vTotal As Decimal = Convert.ToDecimal(cmd.ExecuteScalar()).

    pero el resto parece esta correcto

    es que estas obteniendo un error, o cual seria el problema ?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 2 de abril de 2012 15:24
  • Hola Leandro,

    Muchas gracias por tu disposición a colaborar siempre....

    Analizando mejor la excepción, creo que el problema es otro, este es el mensaje de error... agradecería mucho si me explicas como manejarla mejor  o interceptarla para que no se presente. Es esta:

    ex {"No se puede convertir un objeto DBNull en otros tipos."} System.Exception

    Gracias...


    Saludos, Solph.

    lunes, 2 de abril de 2012 18:40
  • ahh es que la suma devuelve un null

    en ese caso poque no usas

    Dim sql As String = "SELECT IFNULL(sum(afectacion* valor), 0) as TotalLiq" & _

    como veras el IFNULL hara que sino puede sumar registro devuelva un cero como resultado


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP lunes, 2 de abril de 2012 21:10
    • Marcado como respuesta Solp lunes, 2 de abril de 2012 21:49
    lunes, 2 de abril de 2012 18:54
  • Leandro...

    Eso es lo que necesito...

    No obstante, parece que esa funcion es exclusiva de SQL Server, ¿cierto? ¿Existirá una función similar para trabajar con MySql?, pues me sale este error:

    "Incorrect parameter count in the call to native function 'ISNULL'



    Saludos, Solph.

    lunes, 2 de abril de 2012 19:05
  • Leandro, ya encontré como hacerlo en MySql:

    Para los que necesiten:

    En Sql, tal como dijo Leandro...

    Dim sql As String = "SELECT ISNULL(sum(afectacion* valor), 0) as TotalLiq" & _

    y en MySql:

    Dim sql As String =  "SELECT IFNULL(sum(afectacion* valor), 0) as TotalLiq" & _

    Gracias, Leandro...


    Saludos, Solph.


    • Editado Solp lunes, 2 de abril de 2012 21:51
    lunes, 2 de abril de 2012 19:17
  • upa cierto era mysql, jeje bueno menos mal que captaste la idea y encontraste el equivalente en mysql

    que bueno, voy a editar el ejemplo asi queda correcto

    aunque podrias haber usado el

    IFNULL

    creo que hubiera sido mas directo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    lunes, 2 de abril de 2012 21:08
  • Gracias Leandro...


    Saludos, Solph.

    lunes, 2 de abril de 2012 21:26