none
La cadena de entrada no tiene el formato correcto. Detalles de la excepción: System.FormatException: La cadena de entrada no tiene el formato correcto. RRS feed

  • Pregunta

  • Hola que tal!!

    Tengo un problema al intentar guardar datos de un formulario web creado en visual studio 2013, me manda el siguiente error:

    La cadena de entrada no tiene el formato correcto.

    mi código es el siguiente:

     protected void Page_Load(object sender, EventArgs e)
        {
    
     cargardatos();
    
     SqlConnection con = new SqlConnection("Data Source=DESKTOP-GBLB5KE\\SQL;Initial Catalog=Propuestas;Integrated Security=True;");
    
           }
    
     public void cargardatos()
        {
            //hacemos la consulta a la base de datos
            SqlCommand cmd = new SqlCommand("Select * from Propuestas_Asimilados", con);
            //objeto adapter para hacer el enlace y llenado del dataset
            SqlDataAdapter adapter = new SqlDataAdapter();
            //asignamos la propiedad selectcommand al objeto command para que ejecute consulta
            adapter.SelectCommand = cmd;
            //abrimos la conexion
            con.Open();
            //creamos objeto dataset
            DataSet objdataset = new DataSet();
            //llenamos el datable del dataset
            //el metodo fill obtiene los datos recuperados del dataadapter y los coloca dentro del dataset
            adapter.Fill(objdataset);
            //cerramos conexion
            con.Close();
            //enlazamos los datos al gridview
            GVListaGrupal.DataSource = objdataset;
            GVListaGrupal.DataBind();
        }
    
    
    
    
     protected void BtnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                //utilizamos el procedimiento alamacenado insertarusuarios
                SqlCommand cmd = new SqlCommand("insertarusuarios", con);
                //especificamos que el comando es un procedimiento almacenado
                cmd.CommandType = CommandType.StoredProcedure;
                //creamos los parametros que usaremos
                cmd.Parameters.Add("@FechaAlta", SqlDbType.VarChar);
                cmd.Parameters.Add("@Sueldo", SqlDbType.Float);
                cmd.Parameters.Add("@ISR", SqlDbType.Float);
                cmd.Parameters.Add("@SueldoaPercibir", SqlDbType.Float);
                cmd.Parameters.Add("@CostoOutSourcing", SqlDbType.Float);
                cmd.Parameters.Add("@Subtotal", SqlDbType.Float);
                cmd.Parameters.Add("@Iva", SqlDbType.Float);
                cmd.Parameters.Add("@Acumulado", SqlDbType.Float);
                cmd.Parameters.Add("@Total", SqlDbType.Float);
                cmd.Parameters.Add("@NEmpleados", SqlDbType.Float);
    
                //asignamos el valor de los textbox a los parametros
                cmd.Parameters["@FechaAlta"].Value = TextBox4.Text;
                cmd.Parameters["@Sueldo"].Value = TextBox6.Text;
                cmd.Parameters["@ISR"].Value = TextBox19.Text;
                cmd.Parameters["@SueldoaPercibir"].Value = TextBox1.Text;
                cmd.Parameters["@CostoOutSourcing"].Value = TextBox5.Text;
                cmd.Parameters["@Subtotal"].Value = TextBox24.Text;
                cmd.Parameters["@Iva"].Value = TextBox20.Text;
                cmd.Parameters["@Acumulado"].Value = TextBox41.Text;
                cmd.Parameters["@Total"].Value = TextBox21.Text;
                cmd.Parameters["@NEmpleados"].Value = TextBox23.Text;
                //abrimos conexion
                con.Open();
                //ejecutamos la instruccion con ExcecuteNonQuery indicando que no retorna registros.
                cmd.ExecuteNonQuery();
                Label1.Text = "Usuario ingresado...";
                //cerramos conexion
                con.Close();
                //cargamos los datos nuevamente
                cargardatos();
               
            }
            catch (Exception error)
            {
                throw error;
            }
        }

    disculpa pero no logro encontrar mi error, de antemano muchas gracias.

    miércoles, 3 de mayo de 2017 20:24

Respuestas

  • Por el mensaje de error es evidente que no le estás enviando los datos correcto en la caja de texto, qué valores tienes en tu caja de texto? estás enviando los nombres que corresponden? en tu dato que especificas como @FechaAlta lo pusiste como varchar, es varchar?? no será fecha? o le estás mandando la caja equivocada?

    insisto, realiza un debug, las soluciones que te ofrecemos están correctas, solo necesitas plasmarlas pero algo está fallando y lo puedes detectar con un debug (paso a paso)

     Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 3 de mayo de 2017 23:10
  • {...}Mi base de datos todos los campos son tipo Float con excepción del Id que es tipo int.

    No es correcto usar un tipo de dato aproximado para valores que requieren precisión y escala fija, te recomiendo cambiar el tipo de dato a decimal(s, p) y en la aplicación también al tipo decimal.

    Respecto al error, la excepción 'FormatException' se desencadena cuando el formato de una cadena es invalido, por ejemplo cuando intentas convertir una cadena a un tipo numérico y la cadena no presenta el formato adecuado, o -también habitual- cuando intentas convertir una cadena de longitud cero a un número, no es posible.

    Para validar el contenido de la cadena debes ocupar la propuesta de Leandro, sólo así aseguraras que el valor que insertas es un tipo numérico.

     
    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 3 de mayo de 2017 23:15

Todas las respuestas

  • Hola Ekc21

    no es necesario que separes de esa forma la asignación de valroes, es suficiente con que lo manejes de la siguiente forma: 

     protected void BtnGuardar_Click(object sender, EventArgs e)
        {
                try
                {
                    //utilizamos el procedimiento alamacenado insertarusuarios
                    SqlCommand cmd = new SqlCommand("insertarusuarios", con);
                    //especificamos que el comando es un procedimiento almacenado
                    cmd.CommandType = CommandType.StoredProcedure;
                    //creamos los parametros que usaremos
                    cmd.Parameters.Add("@FechaAlta", SqlDbType.VarChar).Value = TextBox4.Text;
                    cmd.Parameters.Add("@Sueldo", SqlDbType.Float).Value = (float)TextBox6.Text;
                    cmd.Parameters.Add("@ISR", SqlDbType.Float).Value = (float)TextBox19.Text;
                    cmd.Parameters.Add("@SueldoaPercibir", SqlDbType.Float).Value = (float)TextBox1.Text;
                    cmd.Parameters.Add("@CostoOutSourcing", SqlDbType.Float).Value = (float)TextBox5.Text;
                    cmd.Parameters.Add("@Subtotal", SqlDbType.Float).Value = (float)TextBox24.Text;
                    cmd.Parameters.Add("@Iva", SqlDbType.Float).Value = (float)TextBox20.Text;
                    cmd.Parameters.Add("@Acumulado", SqlDbType.Float).Value = (float)TextBox41.Text;
                    cmd.Parameters.Add("@Total", SqlDbType.Float).Value = (float)TextBox21.Text;
                    cmd.Parameters.Add("@NEmpleados", SqlDbType.Float).Value = (float)TextBox23.Text;
    
                    //abrimos conexion
                    con.Open();
                    //ejecutamos la instruccion con ExcecuteNonQuery indicando que no retorna registros.
                    cmd.ExecuteNonQuery();
                    Label1.Text = "Usuario ingresado...";
                    //cerramos conexion
                    con.Close();
                    //cargamos los datos nuevamente
                    cargardatos();
    
                }
                catch (Exception error)
                {
                    throw error;
                }
            }

    Y el error que te muestra es por el tipo de dato, debes convertir a float el valor de tu caja de texto, por ello especificamos (float)Textbox1.text

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 3 de mayo de 2017 20:34
  • hola

    si defines

    cmd.Parameters.Add("@Sueldo", SqlDbType.Float);

    porque despues asignas un string en la linea

    cmd.Parameters["@Sueldo"].Value = TextBox6.Text;

    debes asegurar que el valor que asignas sea un nro valido

    cmd.Parameters["@Sueldo"].Value = float.Parse(TextBox6.Text);

    sino es un valor numerico valido esta claro que va a fallar por eso podrias usar

    float sueldo = 0;
    float.TryParse(TextBox6.Text, out sueldo);
    
    cmd.Parameters["@Sueldo"].Value = sueldo;


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de mayo de 2017 20:38
  • Muchas Gracias Brayan y Leandro, eh intentado con las acciones recomendadas pero me sigue mandando el mismo error.
    miércoles, 3 de mayo de 2017 21:12
  • Hola Ekc21

    Se nos pasó un dato, intenta con esto en cada conversión de (float):

    cmd.Parameters.Add("@Sueldo", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox6.Text);
    cmd.Parameters.Add("@ISR", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox19.Text);
    cmd.Parameters.Add("@SueldoaPercibir", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox1.Text);
    cmd.Parameters.Add("@CostoOutSourcing", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox5.Text);
    cmd.Parameters.Add("@Subtotal", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox24.Text);
    cmd.Parameters.Add("@Iva", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox20.Text);
    cmd.Parameters.Add("@Acumulado", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox41.Text;
    cmd.Parameters.Add("@Total", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox21.Text);
    cmd.Parameters.Add("@NEmpleados", SqlDbType.Float).Value = (float)Convert.toDouble(TextBox23.Text);
    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 3 de mayo de 2017 21:17
  • Muchas gracias Brayan, pero sigo con el mismo error ya no se que mas modificar.

    Saludos!!

    miércoles, 3 de mayo de 2017 21:51
  • Hola Ekc21

    vamos por partes, qué valor es el que estás mandando en las cajas de texto? en tu base de datos son float? qué precisión?, realiza un debug con un punto de interrupción y fíjate exactamente en qué línea se cae.

    Dale, vayamos por partes para encontrar el resultado

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 3 de mayo de 2017 21:56
  • Al debuggear el error que me manda es en la siguiente linea:

          catch (Exception error)
            {
                throw error;
            }
    y si lo saco del Try Catch marca el error en esta linea:
     cmd.ExecuteNonQuery();
    Mi base de datos todos los campos son tipo Float con excepcion del Id que es tipo int.

    miércoles, 3 de mayo de 2017 22:39
  • ese es el error completo que marca

    Error de servidor en la aplicación '/'.

    La cadena de entrada no tiene el formato correcto.

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código. 

    Detalles de la excepción: System.FormatException: La cadena de entrada no tiene el formato correcto.

    Error de código fuente: 
    Línea 1663:        catch (Exception error)
    Línea 1664:        {
    Línea 1665:            throw error;
    Línea 1666:        }
    Línea 1667:    }

    Archivo de origen: c:\Users\CE.Consulting\Documents\Visual Studio 2013\WebSites\WebSite2\Asimilados.aspx.cs    Línea: 1665 

    Seguimiento de la pila: 
    [FormatException: La cadena de entrada no tiene el formato correcto.]
       About.BtnGuardar_Click(Object sender, EventArgs e) in c:\Users\CE.Consulting\Documents\Visual Studio 2013\WebSites\WebSite2\Asimilados.aspx.cs:1665
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9712582
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
    miércoles, 3 de mayo de 2017 22:49
  • Por el mensaje de error es evidente que no le estás enviando los datos correcto en la caja de texto, qué valores tienes en tu caja de texto? estás enviando los nombres que corresponden? en tu dato que especificas como @FechaAlta lo pusiste como varchar, es varchar?? no será fecha? o le estás mandando la caja equivocada?

    insisto, realiza un debug, las soluciones que te ofrecemos están correctas, solo necesitas plasmarlas pero algo está fallando y lo puedes detectar con un debug (paso a paso)

     Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 3 de mayo de 2017 23:10
  • {...}Mi base de datos todos los campos son tipo Float con excepción del Id que es tipo int.

    No es correcto usar un tipo de dato aproximado para valores que requieren precisión y escala fija, te recomiendo cambiar el tipo de dato a decimal(s, p) y en la aplicación también al tipo decimal.

    Respecto al error, la excepción 'FormatException' se desencadena cuando el formato de una cadena es invalido, por ejemplo cuando intentas convertir una cadena a un tipo numérico y la cadena no presenta el formato adecuado, o -también habitual- cuando intentas convertir una cadena de longitud cero a un número, no es posible.

    Para validar el contenido de la cadena debes ocupar la propuesta de Leandro, sólo así aseguraras que el valor que insertas es un tipo numérico.

     
    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 3 de mayo de 2017 23:15
  • ok lo voy a revisar detalladamente, muchas gracias por tomarse el tiempo para ayudar todos han sido de gran ayuda con sus aportes, seguiré sus  consejos y les comento como me fue.

    muchas gracias.

    Saludos!!

    miércoles, 3 de mayo de 2017 23:55