none
Conversion failed when converting date and/or time from character string. RRS feed

  • Pregunta

  • public static SqlDataAdapter ConsultarFEchas(string Desde, string Hasta)
            {
                SqlConnection cn = Conexion.ObtenerConexion();
                SqlDataAdapter da = null;
                try
                {
                    cn.Open();
                    string query = "select Codigo, Producto, Cantidad,  FechaVencimiento,FechaIngreso, Nombre, NIT from tblRegistroArticulos where FechaVencimiento between '" + @Desde + "' and '" + @Hasta + "'";
                    SqlCommand cmd = new SqlCommand(query, cn);
                    da = new SqlDataAdapter(cmd);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    cn.Close();
                }
                return da;
            }
    domingo, 15 de abril de 2018 19:21

Respuestas

  • Yo lo cambiaría el tipo de los parámetros a DateTime en vez de sting. Algo así:

    public static SqlDataAdapter ConsultarFEchas(DateTime Desde, DateTime Hasta)
        {   
          SqlConnection cn = Conexion.ObtenerConexion();
          SqlDataAdapter da = null;
         
          try
          {
            cn.Open();
            string query = "select Codigo, Producto, Cantidad,  FechaVencimiento,FechaIngreso, Nombre, NIT from tblRegistroArticulos where FechaVencimiento between @Desde and @Hasta"; 
            SqlCommand cmd = new SqlCommand(query, cn);
            cmd.Parameters.AddWithValue("@desde", Desde);
            cmd.Parameters.AddWithValue("@hasta", Hasta);
            da = new SqlDataAdapter(cmd);
          }
          catch (Exception ex)
          {
            MessageBox.Show(ex.Message);
          }
          finally
          {
            cn.Close();
          }
          return da;
        }
    En el formulario para ingresar las fechas Desde y Hasta usás los controles dateTimePicker



    • Editado AntiWork domingo, 15 de abril de 2018 22:50
    • Propuesto como respuesta dehoyos domingo, 15 de abril de 2018 23:59
    • Marcado como respuesta webJoseModerator lunes, 16 de abril de 2018 0:33
    domingo, 15 de abril de 2018 22:45

Todas las respuestas

  • Hola amigos, soy nuevo en el mundo de la programacion estoy aprendiendo arealizar informes (con rango de fechas en este caso) la cuestion es que llevo como tres dias realizando un informe con reportviewer en visual basic y no he podido solucionar el siguiente error:

     Conversion failed when converting date and/or time from character string.

    utilizo sql server como gestor base de datos, manejo el tipo de datos DATE, Este es el codigo que utilizo para consultar en base de datos:

    public static SqlDataAdapter ConsultarFEchas(string Desde, string Hasta)
            {
                SqlConnection cn = Conexion.ObtenerConexion();
                SqlDataAdapter da = null;
                try
                {
                    cn.Open();
                    string query = "select Codigo, Producto, Cantidad,  FechaVencimiento,FechaIngreso, Nombre, NIT from tblRegistroArticulos where FechaVencimiento between '" + @Desde + "' and '" + @Hasta + "'";
                    SqlCommand cmd = new SqlCommand(query, cn);
                    da = new SqlDataAdapter(cmd);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    cn.Close();
                }
                return da;
            }

    Les agradezco sus aportes, GRACIAS!!!!!

    domingo, 15 de abril de 2018 19:18
  • Para empezar, te sobra la @ en tus variables (están concatenadas fuera de la sentencia, luego no son parámetros, sino simples variables en C# -- no se requiere escapar el nombre).

    Casi seguro que el error de conversión se debe a que tienes el formato de fecha como dia-mes-año, pero la base de datos requiere mes-dia-año. Desde luego, puedes darles la vuelta utilizando manipulación de cadenas, pero esto es una chapuza. Lo elegante, eficiente y fiable es que parametrices la sentencia y le pases directamente los valores de tipo datetime, sin convertirlos a strings en ningún momento.

    domingo, 15 de abril de 2018 21:26
    Moderador
  • Yo lo cambiaría el tipo de los parámetros a DateTime en vez de sting. Algo así:

    public static SqlDataAdapter ConsultarFEchas(DateTime Desde, DateTime Hasta)
        {   
          SqlConnection cn = Conexion.ObtenerConexion();
          SqlDataAdapter da = null;
         
          try
          {
            cn.Open();
            string query = "select Codigo, Producto, Cantidad,  FechaVencimiento,FechaIngreso, Nombre, NIT from tblRegistroArticulos where FechaVencimiento between @Desde and @Hasta"; 
            SqlCommand cmd = new SqlCommand(query, cn);
            cmd.Parameters.AddWithValue("@desde", Desde);
            cmd.Parameters.AddWithValue("@hasta", Hasta);
            da = new SqlDataAdapter(cmd);
          }
          catch (Exception ex)
          {
            MessageBox.Show(ex.Message);
          }
          finally
          {
            cn.Close();
          }
          return da;
        }
    En el formulario para ingresar las fechas Desde y Hasta usás los controles dateTimePicker



    • Editado AntiWork domingo, 15 de abril de 2018 22:50
    • Propuesto como respuesta dehoyos domingo, 15 de abril de 2018 23:59
    • Marcado como respuesta webJoseModerator lunes, 16 de abril de 2018 0:33
    domingo, 15 de abril de 2018 22:45
  • Hey Compañero MUCUHAS GRACIAS!!!!!fuiste de gran ayuda, me funciono a la perfeccion
    lunes, 16 de abril de 2018 0:00
  • Amigo Gracias Por tu observacion, como mencione antes soy novato en esto de l programacion yla verdad me gustado muchisimo, lo tendre muy encuenta a la proxma, GRACIAS!!!!
    lunes, 16 de abril de 2018 0:01