none
error al cargar datos desde un select RRS feed

  • Pregunta

  • tengo el siguiente metodo que consulta un rango de fechas y devuelve un correo asociado a un cliente

    pero al ejecutarlo de la aplicación no devuelve nada pero si lo ejecuto desde la linea de comando de mysql si funciona

     public void cargar()
            {
    
                try
                {
                    
    
                    StringBuilder sb = new StringBuilder();
                 
                    using (var cmd = new MySqlCommand("SELECT DISTINCT correo_empresa FROM tb_extintores a INNER JOIN tb_empresa b ON a.rut_cliente = b.rut_empresa WHERE a.fecha_vencimiento BETWEEN @inicio AND @fin", conexion.obtenerConexion()))
                    {
                        cmd.Parameters.AddWithValue("@inicio", DateTime.Now.ToString("YY/MM/DD"));
                        cmd.Parameters.AddWithValue("@fin", DateTime.Now.AddMonths(1).ToString("YY/MM/DD"));
    
                        using (MySqlDataReader dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                //Este if hace que en todas las iteraciones salvo en la primera, se añada una coma ',' antes de el siguiente texto
                                if (sb.Length > 0) sb.Append(",");
                                sb.Append(dr["correo_empresa"].ToString());
                            }
                        }
    
                        txtpara.Text = sb.ToString();
    
                        conexion.obtenerConexion().Close();
                    }
                }
                catch (Exception f) {
    MessageBox.Show(f.Message + f.StackTrace,"errror tipo 11");
                }
            }

    si ejecuto esta linea en mysql extrae los datos

    SELECT DISTINCT b.correo_empresa FROM tb_extintores a INNER JOIN tb_empresa b ON a.rut_cliente = b.rut_empresa WHERE a.fecha_vencimiento BETWEEN '2017-11-29' AND '2017-11-30'


    creo que el error esta en el formato de las variables.

    por que al realizar el select lo realiza de esta manera

    SELECT DISTINCT b.correo_empresa FROM tb_extintores a INNER JOIN tb_empresa b ON a.rut_cliente = b.rut_empresa WHERE a.fecha_vencimiento BETWEEN '29-11-2017 18:45:34' AND '29-12-2017 18:47:48'

    carga la variable 

    inicio = 29-11-2017 18:45:34

    fin = 29-12-2017 18:47:48

    y el formato de la base de datos es 

    2017/11/29

    como puedo pasar la variable con ese formato sin la hora.


    • Editado sebastian199519959 miércoles, 29 de noviembre de 2017 21:53 faltaba descripcion.
    miércoles, 29 de noviembre de 2017 21:26

Respuestas

  • ¿Cuál es el objetivo de convertir un valor de fecha a una cadena de caracteres?. Agrega, a la colección de parámetros, el valor de fecha bajo el tipo DateTime.

    cmd.Parameters.AddWithValue("@inicio", DateTime.Now.Date);
    cmd.Parameters.AddWithValue("@fin", DateTime.Now.Date.AddMonths(1));

    miércoles, 29 de noviembre de 2017 21:46
  • publico la solución por si alguien le sucede lo mismo.

    public void cargar()
            {
    
                try
                {
    
    
                    StringBuilder sb = new StringBuilder();
                    {
    
                            using (var cmd = new MySqlCommand("SELECT DISTINCT b.correo_empresa FROM tb_extintores a INNER JOIN tb_empresa b ON a.rut_cliente = b.rut_empresa WHERE a.fecha_vencimiento BETWEEN @inicio AND @fin", conexion.obtenerConexion()))
                            {
                            cmd.Parameters.AddWithValue("@inicio", DateTime.Now.Date);
                            cmd.Parameters.AddWithValue("@fin", DateTime.Now.Date.AddMonths(1));
    
    
                            using (MySqlDataReader dr = cmd.ExecuteReader())
                            {
                                while (dr.Read())
                                {
                                    //Este if hace que en todas las iteraciones salvo en la primera, se añada una coma ',' antes de el siguiente texto
                                    if (sb.Length > 0) sb.Append(",");
                                    sb.Append(dr["correo_empresa"].ToString());
                                }
                            }
    
                            txtpara.Text = sb.ToString();
    
                            conexion.obtenerConexion().Close();
                        }
                    }
                }
                catch (Exception f) {
    
                }
            }
    las variables hay que agregarle el date para que solo pase la fecha sin la hora.

    miércoles, 29 de noviembre de 2017 22:27

Todas las respuestas

  • No les apliques formato a los parámetros. Pasa directamente el DateTime y deja que el driver de la base de datos los formatee internamente como sea necesario:

    cmd.Parameters.AddWithValue("@inicio", DateTime.Now);
    cmd.Parameters.AddWithValue("@fin", DateTime.Now.AddMonths(1));
    

    miércoles, 29 de noviembre de 2017 21:44
    Moderador
  • ¿Cuál es el objetivo de convertir un valor de fecha a una cadena de caracteres?. Agrega, a la colección de parámetros, el valor de fecha bajo el tipo DateTime.

    cmd.Parameters.AddWithValue("@inicio", DateTime.Now.Date);
    cmd.Parameters.AddWithValue("@fin", DateTime.Now.Date.AddMonths(1));

    miércoles, 29 de noviembre de 2017 21:46
  • de igual manera no trae el dato

    creo que igual le pasa la hora y no debería.

    miércoles, 29 de noviembre de 2017 21:56
  • de igual manera no trae el dato

    creo que igual le pasa la hora y no debería.

    miércoles, 29 de noviembre de 2017 21:57
  • Buenas,

    En la imagen que pones para indicar que la consulta en phpmyadmin funciona, realmente no funciona, si te fijas, retorna 0 filas, exactamente igual que en tu programa en C#.

    Revisa la consulta y nos cuentas. 

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    miércoles, 29 de noviembre de 2017 22:16
  • publico la solución por si alguien le sucede lo mismo.

    public void cargar()
            {
    
                try
                {
    
    
                    StringBuilder sb = new StringBuilder();
                    {
    
                            using (var cmd = new MySqlCommand("SELECT DISTINCT b.correo_empresa FROM tb_extintores a INNER JOIN tb_empresa b ON a.rut_cliente = b.rut_empresa WHERE a.fecha_vencimiento BETWEEN @inicio AND @fin", conexion.obtenerConexion()))
                            {
                            cmd.Parameters.AddWithValue("@inicio", DateTime.Now.Date);
                            cmd.Parameters.AddWithValue("@fin", DateTime.Now.Date.AddMonths(1));
    
    
                            using (MySqlDataReader dr = cmd.ExecuteReader())
                            {
                                while (dr.Read())
                                {
                                    //Este if hace que en todas las iteraciones salvo en la primera, se añada una coma ',' antes de el siguiente texto
                                    if (sb.Length > 0) sb.Append(",");
                                    sb.Append(dr["correo_empresa"].ToString());
                                }
                            }
    
                            txtpara.Text = sb.ToString();
    
                            conexion.obtenerConexion().Close();
                        }
                    }
                }
                catch (Exception f) {
    
                }
            }
    las variables hay que agregarle el date para que solo pase la fecha sin la hora.

    miércoles, 29 de noviembre de 2017 22:27
  • Hola sebastian199519959

    Para que las respuestas brindadas por los colaboradores sean útiles para el resto de la comunidad, favor de marcarlas.

    Saludos Cordiales.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 29 de noviembre de 2017 22:38
    Moderador