none
No se puede convertir un String a DateTime RRS feed

  • Pregunta

  • Hola amigos, tengo un problema al intentar convertir un String (que es el resultado de una consulta Sql) a DateTime, me aparece una excepción de que No se reconoce la cadena como un valor de DateTime válido.

    Les muestro lo que tengo en mi código.

    Este es mi código que realiza una consulta y los lleva a un datagridview:

    public String Dia(Persona p, DataGridView dgv2)
            {
                String cadena = "";
                try
                {
                    String sql = "SELECT fecha2 As Día FROM registrop WHERE rut='" + p.Rut + "'";
                    
                    SqlDataAdapter da = new SqlDataAdapter(sql, c.con);
    
                    DataTable table = new DataTable();
                    
                    String fecha = da.Fill(table).ToString();
    
                    //DateTime nueva_fecha = Convert.ToDateTime(fecha);
                    
                    /*
                    String dia = fecha.ToString("dddd")
     TextInfo mayus = new CultureInfo("es-ES", false).TextInfo;
    ;
    
    cadena= mayus.ToTitleCase(dia);
                    */
    
                    dgv2.DataSource = table;
    
             
    
                }catch(Exception ex){
                    
                    MessageBox.Show("Error de búsqueda: "+ ex);
                }
    
                return cadena;
              
            }

    Al poner como comentada la línea...

    DateTime nueva_fecha = Convert.ToDateTime(fecha);

    ... me arroja un valor de fechas en un datagridview de forma normal (ejemplo: 04/10/2018).

    Pero al momento de no dejar comentada esa línea, me arroja la excepción ya dicha anteriormente, y no puedo convertir el String fecha a un DateTime. 

    Lo demás es una especie de función para convertir una fecha a día de la semana (ejemplo: que 04/10/2018 diga que es día Jueves), pero eso no me preocupa tanto como lo anterior.

    He buscado en varias partes pero nada me sirve. Por favor, ayuda :(


    • Editado rally 5DR jueves, 4 de octubre de 2018 18:53
    jueves, 4 de octubre de 2018 14:51

Respuestas

  • hola

    El problema que veo es que debes usar parametros

    String sql = "SELECT fecha2 As Día FROM registrop WHERE rut= @rut";
    
    SqlCommand cmd = new SqlCommand(sql, c.con)
    cmd.Parameters.AddWithValue("@rut", p.Rut)
    
    String fecha = Convert.ToString(cmd.ExecuteScalar());
    ademas si solo vas a recuperar la fecha unica usa el ExecuteScalar()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 4 de octubre de 2018 18:05
  • >>Finalmente todos mis problemas fueron resueltos en una sola consulta SQL.

    pero usa parametros, no concatenes el rut en el string


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 5 de octubre de 2018 14:32

Todas las respuestas

  • Hola  rally 5DR

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma,   primero te recomiendo que conviertas de String a Integer y luego a Date time, es por eso que te arroja esa excepción de FormatException al momento de correr tu aplicación.

    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.

    jueves, 4 de octubre de 2018 15:04
    Moderador
  • hola

    El problema que veo es que debes usar parametros

    String sql = "SELECT fecha2 As Día FROM registrop WHERE rut= @rut";
    
    SqlCommand cmd = new SqlCommand(sql, c.con)
    cmd.Parameters.AddWithValue("@rut", p.Rut)
    
    String fecha = Convert.ToString(cmd.ExecuteScalar());
    ademas si solo vas a recuperar la fecha unica usa el ExecuteScalar()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 4 de octubre de 2018 18:05
  • Gracias por sus respuestas, creo que me compliqué demasiado con el código al transformar una fecha a String y después a DateTime xd.

    Finalmente todos mis problemas fueron resueltos en una sola consulta SQL.

    La dejaré por si a alguien le sirve:

    String sql = "SELECT fecha AS Fecha, hora AS Hora, DATENAME(weekday, fecha2) FROM registrop WHERE rut='" + p.Rut + "'";

    viernes, 5 de octubre de 2018 13:56
  • >>Finalmente todos mis problemas fueron resueltos en una sola consulta SQL.

    pero usa parametros, no concatenes el rut en el string


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 5 de octubre de 2018 14:32