none
Ayuda con NULL

    Pregunta

  • Hola, saco la media de unos precios y si no hay registros me devuelve un NULL.

    He probado de varias formas y no hay manera...

     Dim Querymedio As String = "SELECT AVG(COSTO) as CostoMedio FROM FMONTENT where modelo=@modelo and color=@Color and tamano=@tamaño"
                Using cmd4 As New SqlCommand(Querymedio, Cnn)
                    cmd4.Parameters.Add(New SqlParameter("@modelo", modelo))
                    cmd4.Parameters.Add(New SqlParameter("@tamaño", tamaño))
                    cmd4.Parameters.Add(New SqlParameter("@Color", color))
    
                    Using dr4 As SqlDataReader = cmd4.ExecuteReader
                        While dr4.Read()
                            If (Convert.ToString(dr4("CostoMedio")) Is DBNull.Value) Or (Convert.ToString(dr4("CostoMedio")) Is Nothing) Then
                                MsgBox("costo medio es null")
                            Else
                                'Guardamos el total Vendidas.
                                Dim cmedio As Decimal = Convert.ToDecimal(dr4("CostoMedio"))
                                Stock.TxtCostoMedio.Text = Math.Round(cmedio, 2)
                            End If
    
                        End While
                    End Using
                End Using

    He probado de hacerlo con transact también, poniendo AVG(ISNULL(COSTO,0)) pero me sigue dando NULL... y debería ponerme un 0 si es NULL...

    A ver si alguien puede ayudarme.

    Saludos.

    miércoles, 30 de noviembre de 2016 12:14

Respuestas

  • Colócale

    SELECT ISNULL(AVG(COSTO),0) as CostoMedio

    • Propuesto como respuesta Joyce_ACModerator miércoles, 30 de noviembre de 2016 16:44
    • Marcado como respuesta J.Ramon jueves, 1 de diciembre de 2016 16:37
    miércoles, 30 de noviembre de 2016 12:20
  • J.Ramon,

    Si únicamente esperas por un valor no necesitas usar la clase SqlDataReader, basta con usar el método ExecuteScalar():

    Dim Querymedio As String = "SELECT ISNULL(AVG(COSTO), 0) FROM FMONTENT 
    	WHERE modelo=@modelo AND color=@Color AND tamano=@tamaño"
    
    Using cmd4 As New SqlCommand(Querymedio, Cnn)
    	cmd4.Parameters.AddWithValue("@modelo", modelo)
    	cmd4.Parameters.AddWithValue("@tamaño", Tamaño)
    	cmd4.Parameters.AddWithValue("@Color", Color)
    
    	Cnn.Open
    
    	Stock.TxtCostoMedio.Text = Math.Round(Convert.ToDecimal(cmd4.ExecuteScalar()), 2)
    End Using


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator miércoles, 30 de noviembre de 2016 16:43
    • Marcado como respuesta J.Ramon jueves, 1 de diciembre de 2016 16:37
    miércoles, 30 de noviembre de 2016 12:56

Todas las respuestas

  • Colócale

    SELECT ISNULL(AVG(COSTO),0) as CostoMedio

    • Propuesto como respuesta Joyce_ACModerator miércoles, 30 de noviembre de 2016 16:44
    • Marcado como respuesta J.Ramon jueves, 1 de diciembre de 2016 16:37
    miércoles, 30 de noviembre de 2016 12:20
  • J.Ramon,

    Si únicamente esperas por un valor no necesitas usar la clase SqlDataReader, basta con usar el método ExecuteScalar():

    Dim Querymedio As String = "SELECT ISNULL(AVG(COSTO), 0) FROM FMONTENT 
    	WHERE modelo=@modelo AND color=@Color AND tamano=@tamaño"
    
    Using cmd4 As New SqlCommand(Querymedio, Cnn)
    	cmd4.Parameters.AddWithValue("@modelo", modelo)
    	cmd4.Parameters.AddWithValue("@tamaño", Tamaño)
    	cmd4.Parameters.AddWithValue("@Color", Color)
    
    	Cnn.Open
    
    	Stock.TxtCostoMedio.Text = Math.Round(Convert.ToDecimal(cmd4.ExecuteScalar()), 2)
    End Using


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator miércoles, 30 de noviembre de 2016 16:43
    • Marcado como respuesta J.Ramon jueves, 1 de diciembre de 2016 16:37
    miércoles, 30 de noviembre de 2016 12:56