Principales respuestas
Como hacer una condición IIF en el código que adjunto.

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
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
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
-
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
-