none
Datetimepicker solo guarda la fecha 1/01/1900 RRS feed

  • Pregunta

  • Buenas tardes, estoy guardando datos en una tabla SQL Server y tengo problemas con la fecha ya que solo me guarda 1/01/1900

    Les dejo el codigo haber si pueden darme una mano.

    El campo en la base es DATETIME

    y la fecha la tomo de un datatimepicker

      Dim fecha5 As Date = DateTimePicker2.Value.Date


            Dim ORDEN1 As String = numero.Text

            Dim nombre1 As String = ""
            Dim direccion1 As String = ""
            Dim telefono1 As String = ""
            Dim mail1 As String = ""
            Dim modelo1 As String = ""
            Dim patente1 As String = ""
            Dim ano1 As String = ""
            Dim motor1 As String = ""
            Dim chasis1 As String = ""
            Dim PROBLEMA1 As String = ""
            Dim KM1 As String = ""
            Dim ESTADO As String = "1_Abierta"
            Dim CUIT1 As String = ""

     



            modelo1 = modelo.Text
            patente1 = patente.Text
            ano1 = ano.Text
            motor1 = motor.Text
            chasis1 = chasis.Text
            PROBLEMA1 = Problema.Text
            KM1 = kms.Text
            Dim total4 As String = 0

            Dim combustible1 As String = combustible.Text
            Dim aceite1 As String = aceite.Text

            cmdS.CommandType = CommandType.Text 
            cmdS.Connection = conexionsql
           
            sql = "INSERT INTO INGRESO ( ORDEN, FECHAP3, NOMBRE, DIRECCION, TELEFONO, MAIL, MODELO, ANO, PATENTE, MOTOR, CHASIS, PROBLEMA, ESTADO, KM, total, CUIT, combustible, aceite ) "

            sql += "VALUES ( '" & ORDEN1 & "'," & fecha5 & ",'" & nombre1 & "', '" & direccion1 & "', '" & telefono1 & "','" & mail1 & "','" & modelo1 & "','" & ano1 & "', '" & patente1 & "','" & motor1 & "','" & chasis1 & "','" & PROBLEMA1 & "','" & ESTADO & "','" & KM1 & "','" & total4 & "','" & CUIT1 & "', '" & combustible1 & "', '" & aceite1 & "' )"
            

            cmdS.CommandText = sql

            Try
                cmdS.ExecuteNonQuery() 
                MsgBox("REGISTRO GUARDADO", MsgBoxStyle.Information, "Ingreso Correcto")

            Catch ex As Exception
                MsgBox(ex.ToString)

                If ex.ToString.Contains("VALORES DUPLICADOS") Then 
                    MsgBox("EL REGISTRO YA EXISTE")
                Else
                    MsgBox(ex.ToString)

                End If




            End Try

    viernes, 23 de octubre de 2020 21:05

Respuestas

  • Hola prueba a cambiar

    & fecha5 &

    por

    & fecha5.ToString("yyyyMMdd") &

    Creo que deberías considerar cambiar las concatenaciones por un comando con parametros.

    • Marcado como respuesta pablo8799 viernes, 23 de octubre de 2020 22:14
    viernes, 23 de octubre de 2020 21:32

Todas las respuestas

  • Hola prueba a cambiar

    & fecha5 &

    por

    & fecha5.ToString("yyyyMMdd") &

    Creo que deberías considerar cambiar las concatenaciones por un comando con parametros.

    • Marcado como respuesta pablo8799 viernes, 23 de octubre de 2020 22:14
    viernes, 23 de octubre de 2020 21:32
  • Fíjate que estás concatenando la fecha sin encerrarla entre comillas simples. Entonces, si la fecha es algo así como 23/10/2020 el servidor SQL lo va a interpretar como "dividir el número 23 por 10 y el resultado dividirlo por 2020". El resultado de eso será cero (es una división entera por lo que no produce decimales). Y al asignar el valor cero a un campo de tipo fecha corta, se genera el 1/1/1900.

    Para evitar estos errores y muchos otros que son tan graves y numerosos que no merece la pena intentar enumerarlos en este momento, nunca concatenes en una sentencia SQL los datos introducidos por el usuario. En su lugar, se debe parametrizar la sentencia y asignar los valores a los parámetros. Esto es tan común, y se repite con tanta frecuencia en los foros, que no deberías tener la más mínima dificultad en encontrar miles y miles de ejemplos de cómo se parametrizan las sentencias. Y con un poquito de esfuerzo más, también encontrarás las explicaciones de los graves problemas de seguridad que acarrea el hacerlo como lo estás haciendo, además de la pérdida de rendimiento, por no hablar de los múltiples errores que se cometen al construir las sentencias de esta manera, como por ejemplo el que acabas de encontrar con las fechas (pero también con punto decimal contra coma decimal en los datos numéricos, dia/mes/año contra mes/dia/año en las fechas, cadenas de texto que contengan una comilla simple... todos estos problemas se evitan al parametrizar la sentencia).

    viernes, 23 de octubre de 2020 21:34
  • Gracias, voy a probar y aviso
    viernes, 23 de octubre de 2020 21:52
  • Gracias, voy a probar y aviso
    viernes, 23 de octubre de 2020 21:52
  • Gracias , funciono bien
    viernes, 23 de octubre de 2020 22:14
  • Hola,

     

    gracias por confirmar que encontraste una respuesta a tu pregunta.

     

    Saludos cordiales

     

    Gabriel Castro

    lunes, 26 de octubre de 2020 13:10
    Moderador