none
¿Como puedo comprobar el valor de una columna (Tabla SQL SERVER) tipo datetime (explico, lean porfa)?

    Pregunta

  • Con la línea de abajo obtengo el valor de la columna FechaHora:

    Valor = CStr(New SqlCommand("SELECT TOP(1) FechaHora FROM Datos", sqlConexion).ExecuteScalar())

    Funciona bien cuando tiene un valor, pero cuando tiene Null se genera un error

    ¿Cómo puedo hacer para que cuando tenga Null devuelva ""?


    • Editado James-2016 domingo, 21 de agosto de 2016 3:20
    domingo, 21 de agosto de 2016 3:15

Respuestas

  • Por otro lado, veo que obtienes un valor de tipo DateTime, ¿por qué lo asignas a una variable de tipo string?

    Para el caso de un tipo DateTime queda claro que alguna acción debes de tomar en caso el valor devuelto sea Nothing, si deseas validar la acción considerando que harás uso de un tipo DateTime, puedes hacer lo siguiente:

    Dim Fecha As Object = cmd.ExecuteScalar()
    
    If Fecha Is Nothing Then
            'La consulta no ha devuelto un valor
    Else
            Dim Valor As DateTime = Convert.ToDateTime(Fecha)
    End If



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Editado Willams Morales domingo, 21 de agosto de 2016 3:41
    • Marcado como respuesta James-2016 domingo, 21 de agosto de 2016 4:25
    domingo, 21 de agosto de 2016 3:39
  • James-2016,

    Siempre que puedas intenta recuperar el valor según su tipo, luego si deseas representar dicho valor en otro tipo puedes hacer la conversión. Para el caso que presentas, si tienes una variable string sobre la que deseas comparar entonces convierte a un tipo string el valor de fecha -incluso- con la ventaja de manipular formato:

    Dim Fecha As DateTime
    
    If Fecha.ToShortTimeString() = "10/12/2016" Then
    
    'O
    If Fecha.ToString("yyyy/MM/dd") = "2016/12/10" Then


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James-2016 lunes, 22 de agosto de 2016 1:37
    domingo, 21 de agosto de 2016 18:58

Todas las respuestas

  • James-2016,

    Déjame recomendarte que cuando obtengas una excepción debes de pegar la descripción del mismo, con sólo decir que te sale un error dejas mucho a nuestra imaginación.

    Sobre el problema que presentas, en un hilo anterior te había comentado que el método ExecuteScalar() podría retornar un valor escalar, Nothing o DBNull, en cualquier caso es bueno validar y operar según el resultado, pero si no consideras necesario puedes convertir el valor Nothing a un cadena vacía haciendo uso del método ToString() (que es algo que también deje recomendado)

    Valor = Convert.ToString(cmd.ExecuteScalar())

    El método ToString(Object) -a diferencia de CStr- gestiona correctamente el valor Nothing en cuyo caso retorna una cadena vacía 'String.Empty'


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 21 de agosto de 2016 3:29
  • Por otro lado, veo que obtienes un valor de tipo DateTime, ¿por qué lo asignas a una variable de tipo string?

    Para el caso de un tipo DateTime queda claro que alguna acción debes de tomar en caso el valor devuelto sea Nothing, si deseas validar la acción considerando que harás uso de un tipo DateTime, puedes hacer lo siguiente:

    Dim Fecha As Object = cmd.ExecuteScalar()
    
    If Fecha Is Nothing Then
            'La consulta no ha devuelto un valor
    Else
            Dim Valor As DateTime = Convert.ToDateTime(Fecha)
    End If



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Editado Willams Morales domingo, 21 de agosto de 2016 3:41
    • Marcado como respuesta James-2016 domingo, 21 de agosto de 2016 4:25
    domingo, 21 de agosto de 2016 3:39
  • mm ok, tomo en cuenta la recomendación.

    Lo asigno a una variable string porque lo comparo con una fecha almacenada en el archivo de configuración.

    Creo que la otra sería convertir ese valor string en datetime como la segunda línea del ejemplo que pusiste para poder hacer la comparación sin asignar el valor a un string.

    domingo, 21 de agosto de 2016 4:25
  • James-2016,

    Siempre que puedas intenta recuperar el valor según su tipo, luego si deseas representar dicho valor en otro tipo puedes hacer la conversión. Para el caso que presentas, si tienes una variable string sobre la que deseas comparar entonces convierte a un tipo string el valor de fecha -incluso- con la ventaja de manipular formato:

    Dim Fecha As DateTime
    
    If Fecha.ToShortTimeString() = "10/12/2016" Then
    
    'O
    If Fecha.ToString("yyyy/MM/dd") = "2016/12/10" Then


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James-2016 lunes, 22 de agosto de 2016 1:37
    domingo, 21 de agosto de 2016 18:58
  • Gracias, me sirvió el último ejemplo.
    lunes, 22 de agosto de 2016 1:37