none
ERROR AL MOMENTO DE ACTUALIZAR RRS feed

  • Pregunta

  • buen dia, tengo un problema que no he solucionado, es el siguiente:

    tengo un Form1, con textbox y un datagridview, al momento de hacer click en una fila del dgv, esos datos me los pasa a los textbox, mi problema es que al momento de modificar un dato, y le doy click en el boton actualizar me manda error, dice que la actualizacion no se realizo, aqui pongo mi el codigo del boton actualizar:

    try
                {
                    Connection.Open();
                    OleDbCommand Command = new OleDbCommand();
                    Command.Connection = Connection;
                    string Query = "UPDATE CFE_PROFEPA SET Año = '" + textBox2.Text + "', Mes = '" + textBox18.Text + "', Nº = '" + textBox3.Text + "', Instalacion = '" + textBox4.Text + "', Estado = '" + textBox5.Text + "', Certificado = '" + textBox6.Text + "', Prorroga = '" + textBox7.Text + "', Industria Limpia = '" + textBox9.Text + "', Veces Certificadas = '" + textBox10.Text + "', Calidad Ambiental = '" + textBox11.Text + "', Enfoque Geografico = '" + textBox17.Text + "', # Instalaciones = '" + textBox12.Text + "', Nuevas = '" + textBox13.Text + "', Anteriores = '" + textBox14.Text + "', NiveldeCertificado = '" + textBox15.Text + "', Area = '" + textBox16.Text + "' WHERE Id = " + textBox1.Text + "";
                    Command.CommandText = Query;
                    
                    Command.ExecuteNonQuery();
                    MessageBox.Show("Registro Actualizado exitosamente");

                    textBox1.Clear();
                    textBox2.Clear();
                    textBox18.Clear();
                    textBox3.Clear();
                    textBox4.Clear();
                    textBox5.Clear();
                    textBox6.Clear();
                    textBox7.Clear();
                    textBox9.Clear();
                    textBox10.Clear();
                    textBox11.Clear();
                    textBox17.Clear();
                    textBox12.Clear();
                    textBox13.Clear();
                    textBox14.Clear();
                    textBox15.Clear();
                    textBox15.Clear();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error al actualizar");
                    //throw;
                }
                finally
                {
                    Connection.Close();
                }

    lunes, 8 de septiembre de 2014 16:15

Respuestas

  • hola

    lo que podria recomendarte es que no unas en el string los valores de la query, deberias usar parametros, la estructura seria

    using (SqlConnection conn = new SqlConnection("<connection string>"))  
    {  
        conn.Open();  
     
        string query = "INSERT INTO NombreTabla (campo1, campo2) VALUES (@param1, @param2)";  
        SqlCommand cmd = new SqlCommand(query, conn);  
        cmd.Parameters.AddWithValue("@param1", Convert.ToString(TextBox1.Text));  
        cmd.Parameters.AddWithValue("@param2", Convert.ToInt32(Textbox2.Text));  
     
        cmd.ExecuteNonQuery();  
     
    }

    como veras los valores se asignan con el Parameters del command, y no uniendo los valores en un string

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta OPTIMUS1130 lunes, 8 de septiembre de 2014 19:38
    lunes, 8 de septiembre de 2014 17:16
  • Hola amigo yo trabajo con SQL y ese update lo realizaría de la siguiente forma:

    Connection.Open();

    SqlCommand comup = new SqlCommand("UPDATE CFE_PROFEPA SET Año = @año, Mes = @mes, No = @no, Instalacion = @intalacion, Estado = @estado, Certificado = @certificado, Prorroga = @prorroga, Industria = @industria, Certificadas = @certificada, Calidad = @calidad, Enfoque = @enfoque, Instalaciones = @instalaciones, Nuevas = @nuevas, Anteriores = @anteriores, NiveldeCertificado = @nivel, Area = @area WHERE Id = " + textBox1.Text, Connection);

     comup.Parameters.Add("@año", SqlDbType.VarChar).Value  = textBox2.Text;

    comup.Parameters.Add("@mes", SqlDbType.VarChar).Value  = textBox18.Text;

    comup.Parameters.Add("@no", SqlDbType.VarChar).Value  = textBox3.Text;

    comup.Parameters.Add("@intalacion", SqlDbType.VarChar).Value  = textBox4.Text;

    comup.ExecuteNonQuery();

    comup.Dispose();

    Connection.Close();

    Tienes campos de más de una palabra ("Industria Limpia", "Veces Certificadas", etc), el nombre de los campos no debería llevar espacios.

    Según tu consulta por las comillas estas mandando todo como Varchar, por eso el SqlDbType es en varchar pero este también podría ser:

    SqlDbType.Int

    SqlDbType.DateTime

    SqlDbType.Float

    Debiendo hacer la conversión necesario para cada uno de ellos, por ejemplo: Convert.ToInt32(textBox3.Text); para el campo N° (si es que este es un entero).

    Espero mi respuesta te sea de ayuda.


    • Editado Hekate91 lunes, 8 de septiembre de 2014 17:23
    • Marcado como respuesta OPTIMUS1130 lunes, 8 de septiembre de 2014 19:38
    lunes, 8 de septiembre de 2014 17:22

Todas las respuestas

  • Hola

    No debes de concatenar un String son malas prácticas debes usar parámetros. Para saber que tipo de error estás obteniendo quita el bloque Try Catch, ya que ese error que muestras "Error al actualizar" no dice nada.


    Si se solucionó tu consulta no olvides marcar la respuesta de esta forma mantendremos el orden en el Foro.

    José Carlos Barba Gutierrez
    Lima - Perú
    Saludos

    lunes, 8 de septiembre de 2014 16:24
  • hola

    lo que podria recomendarte es que no unas en el string los valores de la query, deberias usar parametros, la estructura seria

    using (SqlConnection conn = new SqlConnection("<connection string>"))  
    {  
        conn.Open();  
     
        string query = "INSERT INTO NombreTabla (campo1, campo2) VALUES (@param1, @param2)";  
        SqlCommand cmd = new SqlCommand(query, conn);  
        cmd.Parameters.AddWithValue("@param1", Convert.ToString(TextBox1.Text));  
        cmd.Parameters.AddWithValue("@param2", Convert.ToInt32(Textbox2.Text));  
     
        cmd.ExecuteNonQuery();  
     
    }

    como veras los valores se asignan con el Parameters del command, y no uniendo los valores en un string

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta OPTIMUS1130 lunes, 8 de septiembre de 2014 19:38
    lunes, 8 de septiembre de 2014 17:16
  • Hola amigo yo trabajo con SQL y ese update lo realizaría de la siguiente forma:

    Connection.Open();

    SqlCommand comup = new SqlCommand("UPDATE CFE_PROFEPA SET Año = @año, Mes = @mes, No = @no, Instalacion = @intalacion, Estado = @estado, Certificado = @certificado, Prorroga = @prorroga, Industria = @industria, Certificadas = @certificada, Calidad = @calidad, Enfoque = @enfoque, Instalaciones = @instalaciones, Nuevas = @nuevas, Anteriores = @anteriores, NiveldeCertificado = @nivel, Area = @area WHERE Id = " + textBox1.Text, Connection);

     comup.Parameters.Add("@año", SqlDbType.VarChar).Value  = textBox2.Text;

    comup.Parameters.Add("@mes", SqlDbType.VarChar).Value  = textBox18.Text;

    comup.Parameters.Add("@no", SqlDbType.VarChar).Value  = textBox3.Text;

    comup.Parameters.Add("@intalacion", SqlDbType.VarChar).Value  = textBox4.Text;

    comup.ExecuteNonQuery();

    comup.Dispose();

    Connection.Close();

    Tienes campos de más de una palabra ("Industria Limpia", "Veces Certificadas", etc), el nombre de los campos no debería llevar espacios.

    Según tu consulta por las comillas estas mandando todo como Varchar, por eso el SqlDbType es en varchar pero este también podría ser:

    SqlDbType.Int

    SqlDbType.DateTime

    SqlDbType.Float

    Debiendo hacer la conversión necesario para cada uno de ellos, por ejemplo: Convert.ToInt32(textBox3.Text); para el campo N° (si es que este es un entero).

    Espero mi respuesta te sea de ayuda.


    • Editado Hekate91 lunes, 8 de septiembre de 2014 17:23
    • Marcado como respuesta OPTIMUS1130 lunes, 8 de septiembre de 2014 19:38
    lunes, 8 de septiembre de 2014 17:22
  •  En tu Where abres comilla simple ' y no se debe de abrir ahí, es lo que puedo ver en el error, y te recomiendo usar Procedimientos Almacenados. Saludos.

    " WHERE Id = '" + textBox1.Text + "'

    lunes, 8 de septiembre de 2014 17:49
  • muchas gracias, me sirvio de mucho, hacerlo por parametros, lleva mejor orden y se entiende mejor
    lunes, 8 de septiembre de 2014 19:29
  • gracias Hekate91, me sirvio mucho la correccion que me hiciste, tenia la idea, pero no la habia plasmado bien el programa, ahora ya se como hacerlo mejor, y que lleve mas orden
    lunes, 8 de septiembre de 2014 19:30
  • si te sirvio, marca como respuesta :)
    lunes, 8 de septiembre de 2014 19:36