none
Como hacer una condición IIF en el código que adjunto. RRS feed

  • Pregunta

  • Public Class DAOCaja
        Public Function GetAll() As List(Of Caja)
            Dim Result As List(Of Caja) = Nothing
            Using Conn As New SqlConnection(Conexion.ConnectionString)
                Try
                    Conn.Open()
                    Using Cmd As New SqlCommand
                        Cmd.CommandText = "Select * From Caja"
                        Cmd.CommandType = CommandType.Text
                        Cmd.Connection = Conn
                        Dim reader As SqlDataReader = Cmd.ExecuteReader()
                        If reader.HasRows = True Then
                            Result = New List(Of Caja)
                            Dim vCaja As Caja = Nothing
                            While reader.Read
                                vCaja = New Caja

    'Quiero poner este IF en una sola fila

                                If IsDBNull(reader("IdVenta")) Then
                                    vCaja.IdVenta = 0                        ' si es nulo el valor siempre es cero
                                Else
                                    vCaja.IdVenta = reader("IdVenta")  'si no es nulo tiene siempre un valor asignado distinto de 0
                                End If

    'Este es mi IIF pero después de varia forma de hacerlo sigue estando mal
                                IIf IsDBNull(reader("IdVenta")), vCaja.IdVenta = 0, vCaja.IdVenta = reader("IdVenta")

                                Result.Add(vCaja)
                            End While
                        Else
                            Throw New Exception("La tabla de caja esta vacia, proceda a cargar los datos")
                        End If
                        reader.Close()
                    End Using
                Catch ex As Exception
                    Throw New Exception(ex.Message)
                End Try
            End Using
            Return Result
        End Function


    M.A.N

    sábado, 15 de junio de 2019 12:19

Respuestas

  •   IIf IsDBNull(reader("IdVenta")), vCaja.IdVenta = 0, vCaja.IdVenta = reader("IdVenta")

    Has entendido mal el uso del IIF. Estás intentando ejecutar dos sentencias dependiendo de la condición. Eso se hace con un IF (una sola I). El IIF es para devolver uno de los dos valores, no para ejecutar una de las dos sentencias.

    If IsDBNull(reader("IdVenta")) Then vCaja.IdVenta = 0 Else vCaja.IdVenta = reader("IdVenta")

    o bien:

    vCaja.IdVenta  = IIf(IsDBNull(reader("IdVenta")), 0, reader("IdVenta"))

    Pero ojo, esta segunda modalidad tiene problemas de conversión de tipos y se "peleará" con el Option Strict On (que deberías usar si es que no lo estás usando ya). Mejor usa la primera opción con "If".

    • Marcado como respuesta Miguel A N martes, 18 de junio de 2019 10:26
    sábado, 15 de junio de 2019 14:51

Todas las respuestas

  •   IIf IsDBNull(reader("IdVenta")), vCaja.IdVenta = 0, vCaja.IdVenta = reader("IdVenta")

    Has entendido mal el uso del IIF. Estás intentando ejecutar dos sentencias dependiendo de la condición. Eso se hace con un IF (una sola I). El IIF es para devolver uno de los dos valores, no para ejecutar una de las dos sentencias.

    If IsDBNull(reader("IdVenta")) Then vCaja.IdVenta = 0 Else vCaja.IdVenta = reader("IdVenta")

    o bien:

    vCaja.IdVenta  = IIf(IsDBNull(reader("IdVenta")), 0, reader("IdVenta"))

    Pero ojo, esta segunda modalidad tiene problemas de conversión de tipos y se "peleará" con el Option Strict On (que deberías usar si es que no lo estás usando ya). Mejor usa la primera opción con "If".

    • Marcado como respuesta Miguel A N martes, 18 de junio de 2019 10:26
    sábado, 15 de junio de 2019 14:51
  • Hola Alberto gracias por tu rápida contestación. El caso con If ya lo tengo funcionando, lo que pretendía era hacerlo en una sola linea y la verdad es que nunca había utilizado el IIF. He visto un ejemplo y me he creído que funcionaba de la forma que lo he puesto.

    De todas formas he mirado en un manual como funciona el IIF y lo he puesto como has indicado tú , pero da error.

    Te pongo la linea haber si ves el fallo y si no lo dejare como lo tengo actualmente.

                                vCaja.IdVenta = IIf IsDBNull(reader("IdVenta")), 0, reader("IdVenta") As Integer

    Un saludo y gracias


    M.A.N

    sábado, 15 de junio de 2019 15:20
  • Hola Alberto ya he visto mi error y ya lo tengo funcionando.

    Muchas gracias.


    M.A.N

    sábado, 15 de junio de 2019 15:28