none
La cadena de entrada no tiene el formato correcto. RRS feed

  • Pregunta

  • Hola, al tratar de ejecutar el código me  arroja el siguiente error System.FormatException: 'La cadena de entrada no tiene el formato correcto.'

    Estoy recibiendo datos de un formulario desde un TextBox

    protected void btnguardar(object sender, EventArgs e)
            {
                ONCursoEstudiantes1 guardar = new ONCursoEstudiantes1();
                guardar.Id_curso = int.Parse(txtid_curso.Text);
                guardar.Id_estudiante = int.Parse(txtid_estudiante.Text);
                guardar.Corte1 = int.Parse(txtcorte1.Text);
                guardar.Corte2 = int.Parse(txtcorte2.Text);
                guardar.Corte3 = int.Parse(txtcorte3.Text);
                NCursoEstudiantes GuardarN = new NCursoEstudiantes();
                GuardarN.editar_nota(guardar);
            }

    Cuando ingreso la nota del corte1 me arroja el erro ya antes mencionado. No tengo idea que puede ser lo que me genera ese erro si todas mis variables están definidas como  int


    • Editado DiegoART viernes, 28 de julio de 2017 5:25
    viernes, 28 de julio de 2017 5:24

Respuestas

  • Casi seguro que el error lo da uno de los int.Parse. Esta función es absolutamente estricta, y arroja el error de  'La cadena de entrada no tiene el formato correcto' en el momento que el texto que le pasas para parsear no representa un int. En particular, ojo con dejar en blanco alguna de las casillas. Un texto vacío NO es un int correcto desde el punto de vista del int.Parse. Ni tampoco, por supuesto, cualquier cosa que no sea un número, como por ejemplo un espacio en blanco seguido por un número o un número que tenga al final un espacio en blanco.
    viernes, 28 de julio de 2017 6:53
  • Buenas,

    Como alberto de comenta, int.Parse es muy riguroso, podrías hacer algo así:

    protected void btnguardar(object sender, EventArgs e)
    {
        try
        {
            ONCursoEstudiantes1 guardar = new ONCursoEstudiantes1();
            guardar.Id_curso = int.Parse(txtid_curso.Text);
            guardar.Id_estudiante = int.Parse(txtid_estudiante.Text);
            guardar.Corte1 = int.Parse(txtcorte1.Text);
            guardar.Corte2 = int.Parse(txtcorte2.Text);
            guardar.Corte3 = int.Parse(txtcorte3.Text);
            NCursoEstudiantes GuardarN = new NCursoEstudiantes();
            GuardarN.editar_nota(guardar);
        }
        catch (Exception ex)
        {
            MEssageBox.Show("No se han guardado los datos\nRazon: " + ex.Message);
        }
    }

    En el caso de que falle un dato, la operación entera se cancela y notifica con un mensaje, otra opción es cargar un dato por defecto en caso de error, pero para eso hace falta evaluar una a una las conversiones:

    protected void btnguardar(object sender, EventArgs e)
    {
        ONCursoEstudiantes1 guardar = new ONCursoEstudiantes1();
        try
        {
            guardar.Id_curso = int.Parse(txtid_curso.Text);
        }
        catch
        {
            guardar.Id_curso = -1;
        }
        try
        {
            guardar.Id_estudiante = int.Parse(txtid_estudiante.Text);
        }
        catch
        {
            guardar.Id_estudiante = -1;
        }
        try
        {
            guardar.Corte1 = int.Parse(txtcorte1.Text);
        }
        catch
        {
            guardar.Corte1 = -1;
        }
        try
        {
            guardar.Corte2 = int.Parse(txtcorte2.Text);
        }
        catch
        {
            guardar.Corte2 = -1;
        }
        try
        {
            guardar.Corte3 = int.Parse(txtcorte3.Text);
        }
        catch
        {
            guardar.Corte3 = -1;
        }
    
        NCursoEstudiantes GuardarN = new NCursoEstudiantes();
        GuardarN.editar_nota(guardar);
    }

    En cada uno de los Catch, metes el valor predefinido en caso de error para es dato.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    viernes, 28 de julio de 2017 7:19

Todas las respuestas

  • Casi seguro que el error lo da uno de los int.Parse. Esta función es absolutamente estricta, y arroja el error de  'La cadena de entrada no tiene el formato correcto' en el momento que el texto que le pasas para parsear no representa un int. En particular, ojo con dejar en blanco alguna de las casillas. Un texto vacío NO es un int correcto desde el punto de vista del int.Parse. Ni tampoco, por supuesto, cualquier cosa que no sea un número, como por ejemplo un espacio en blanco seguido por un número o un número que tenga al final un espacio en blanco.
    viernes, 28 de julio de 2017 6:53
  • Buenas,

    Como alberto de comenta, int.Parse es muy riguroso, podrías hacer algo así:

    protected void btnguardar(object sender, EventArgs e)
    {
        try
        {
            ONCursoEstudiantes1 guardar = new ONCursoEstudiantes1();
            guardar.Id_curso = int.Parse(txtid_curso.Text);
            guardar.Id_estudiante = int.Parse(txtid_estudiante.Text);
            guardar.Corte1 = int.Parse(txtcorte1.Text);
            guardar.Corte2 = int.Parse(txtcorte2.Text);
            guardar.Corte3 = int.Parse(txtcorte3.Text);
            NCursoEstudiantes GuardarN = new NCursoEstudiantes();
            GuardarN.editar_nota(guardar);
        }
        catch (Exception ex)
        {
            MEssageBox.Show("No se han guardado los datos\nRazon: " + ex.Message);
        }
    }

    En el caso de que falle un dato, la operación entera se cancela y notifica con un mensaje, otra opción es cargar un dato por defecto en caso de error, pero para eso hace falta evaluar una a una las conversiones:

    protected void btnguardar(object sender, EventArgs e)
    {
        ONCursoEstudiantes1 guardar = new ONCursoEstudiantes1();
        try
        {
            guardar.Id_curso = int.Parse(txtid_curso.Text);
        }
        catch
        {
            guardar.Id_curso = -1;
        }
        try
        {
            guardar.Id_estudiante = int.Parse(txtid_estudiante.Text);
        }
        catch
        {
            guardar.Id_estudiante = -1;
        }
        try
        {
            guardar.Corte1 = int.Parse(txtcorte1.Text);
        }
        catch
        {
            guardar.Corte1 = -1;
        }
        try
        {
            guardar.Corte2 = int.Parse(txtcorte2.Text);
        }
        catch
        {
            guardar.Corte2 = -1;
        }
        try
        {
            guardar.Corte3 = int.Parse(txtcorte3.Text);
        }
        catch
        {
            guardar.Corte3 = -1;
        }
    
        NCursoEstudiantes GuardarN = new NCursoEstudiantes();
        GuardarN.editar_nota(guardar);
    }

    En cada uno de los Catch, metes el valor predefinido en caso de error para es dato.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    viernes, 28 de julio de 2017 7:19