none
Error en ExecuteNonQuery RRS feed

  • Pregunta

  • hola buenos dias.

    Alguien me podría decir el  motivo el porque me marca el erro al momento de querer agregar la información que estoy insertando.

    Este es el codigo

     public partial class FRMRequisiciones : Form
    
        {
            Conexion ManipularDatos = new Conexion();
            string AutorizacionP = "Proceso";
    
            public FRMRequisiciones()
            {
    
                InitializeComponent();
            }
    //Botones
    
     private void guardar_Click(object sender, EventArgs e)
            {
                    ManipularDatos.Conectar();
                    
                    string query = "select NoRequisicion from Requisicion where NoRequisicion=" + txtrequi.Text + "";
                    SqlCommand cmd1 = new SqlCommand(query, ManipularDatos.MiConexion);
                    SqlDataReader sdr = cmd1.ExecuteReader();
                
                    if (sdr.Read() == true)
                    {
                        MessageBox.Show("ya existe, Ingrese otra requisicion", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        sdr.Close();
    
                    }
                    else
                {
     ManipularDatos.Conectar();
    SqlCommand cmd;
    string agre = "insert into Requisicion(NoRequisicion,Id_NoParte_Nombre,Cantidad_Requi,Fecha_Requi,Autorizacion_Requi)" + "Values ( '" + txtrequi.Text + "' ," + cmbparte.SelectedValue + " ," + nudcantidadR.Value + " ,'" + dateTimePicker1.Value + "' ,'" + AutorizacionP + "' );";
                    cmd = new SqlCommand(agre, ManipularDatos.MiConexion);
                    //ManipularDatos.EjecutarSql(agre);
                    cmd.ExecuteNonQuery();
                        MessageBox.Show("Se agregado con exito la solicitud");
                    ManipularDatos.Desconectar();}
    }
    }
    


    En la parte que me marca error es en cmd.ExecuteNonQuery que dice lo siguiente: An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

    Additional information: Incorrect syntax near ','.

    Porfavor me podrian ayudar.

    • Editado abi-lopez viernes, 9 de noviembre de 2018 17:38
    viernes, 9 de noviembre de 2018 17:28

Respuestas

  • Seguramente el campo cantidad contenga una coma, por lo que al concatenar la cadena para generar una sentencia Sql te dice que tienes una coma de más. Por eso se recomienda el uso de consultas parametrizadas como ya bien te han enseñado en la respuesta anterior. Así evitarás también sql injection. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 9 de noviembre de 2018 18:49
    Moderador

Todas las respuestas

  • Probá adaptando esta función, controlá que los tipos de datos que se pasan por parámetro sean coherentes con los de la base de datos. Los datos de conexión es una cadena que tiene esta forma "Data Source=.\SQL2008;Initial Catalog=Ingreso;User ID=sa;Password=123". Porsupuesto que en tu caso cambiara, seguramente el servidor, base de datos, usuario y contraseña.

     public bool Insertar(int NoRequisicion, String Id_NoParte_Nombre, int Cantidad_Requi, DateTime Fecha_Requi, String Autorizacion_Requi)
        {
          String cnn = "Datos de conexion";
          using (SqlConnection cn = new SqlConnection(cnn))
          {
            cn.Open();
            String agre = "insert into Requisicion(NoRequisicion, Id_NoParte_Nombre, Cantidad_Requi, Fecha_Requi, Autorizacion_Requi) Values ( @NoRequisicion, @Id_NoParte_Nombre, @Cantidad_Requi, @Fecha_Requi, @Autorizacion_Requi);";
            SqlCommand cmd = new SqlCommand(agre, cn);
            cmd.Parameters.AddWithValue("@NoRequisicion", NoRequisicion);
            cmd.Parameters.AddWithValue("@Id_NoParte_Nombre", Id_NoParte_Nombre);
            cmd.Parameters.AddWithValue("@Cantidad_Requi", Cantidad_Requi);
            cmd.Parameters.AddWithValue("@Fecha_Requi", Fecha_Requi);
            cmd.Parameters.AddWithValue("@Autorizacion_Requi", Autorizacion_Requi);
            return (int)cmd.ExecuteNonQuery() > 0;
          }
        }

    viernes, 9 de noviembre de 2018 18:27
  • Seguramente el campo cantidad contenga una coma, por lo que al concatenar la cadena para generar una sentencia Sql te dice que tienes una coma de más. Por eso se recomienda el uso de consultas parametrizadas como ya bien te han enseñado en la respuesta anterior. Así evitarás también sql injection. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 9 de noviembre de 2018 18:49
    Moderador