none
: 'La consulta con parámetros '(@Precio int,@PizzaPeperoni nvarchar(4000),@PizzaBuffalo nvarcha' espera el parámetro '@PizzaPeperoni', que no se ha proporcionado.' RRS feed

  • Pregunta

  • Alguien sabe porque me sale este error :c

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.SqlClient;

    namespace Poyecto_de_Organizacion
    {
        public partial class Menu : UserControl
        {
            public Menu()
            {
                InitializeComponent();
            }
            string PP;
            string PB;
            string PPU;
            string PC;
            int Precio = 151;
            SqlConnection conexion = new SqlConnection(@"server=DESKTOP-M97JEVN\SQLEXPRESS; Initial Catalog=BDPV; integrated security=true");

            private void Label1_Click(object sender, EventArgs e)
            {

            }

            private void CheckBox1_CheckedChanged(object sender, EventArgs e)
            {

            }

            private void OrdenarBtn_Click(object sender, EventArgs e)
            {
                conexion.Open();

                if (Pizzapeperoni.Checked == true)
                {
                    PP = "Pizza Peperoni";
                }
                if(PizzaBuffalo.Checked==true)
                {
                    PB = "Pizza Buffalo";
                }
               


                SqlCommand altas = new SqlCommand

                    ("insert into Compras1 (Precio,PP,PB) values(@Precio,@PizzaPeperoni,@PizzaBuffalo)", conexion);

                // se pasan los valores de los text box a las variables temporales 
                altas.Parameters.AddWithValue("@Precio", Precio);
                altas.Parameters.AddWithValue("@PizzaPeperoni", PP);
                altas.Parameters.AddWithValue("@PizzaBuffalo", PB);




                altas.ExecuteNonQuery();
                conexion.Close();// se cierra la conexion
                MessageBox.Show(" Compra Almacenada");
                // limpiar los textbox
               
            }
        }
    }

    sábado, 16 de noviembre de 2019 4:15

Respuestas

  • Hola MEJ21:

    if (Pizzapeperoni.Checked == true)
        PP = "Pizza Peperoni";
    else 
        PP=String.Empty;
                
    if(PizzaBuffalo.Checked==true)
        PB = "Pizza Buffalo";
    else 
        PB=String.Empty;

    pp y pb son null.

    Adicionalmente le puedes dar una vuelta a ese método con algo de este estilo.

      try
      {
          if (Pizzapeperoni.Checked == true)
              PP = "Pizza Peperoni";
          else
              PP = String.Empty;
    
          if (PizzaBuffalo.Checked == true)
              PB = "Pizza Buffalo";
          else
              PB = String.Empty;
          using (var altas = new SqlCommand("insert into Compras1 (Precio,PP,PB) values(@Precio,@PizzaPeperoni,@PizzaBuffalo)", conexion))
          {
              // se pasan los valores de los text box a las variables temporales 
              altas.Parameters.AddWithValue("@Precio", Precio);
              altas.Parameters.AddWithValue("@PizzaPeperoni", PP);
              altas.Parameters.AddWithValue("@PizzaBuffalo", PB);
              conexion.Open();
              altas.ExecuteNonQuery();
          }
          MessageBox.Show(" Compra Almacenada");
          // limpiar los textbox
      }
      catch (Exception ex)
      {
          MessageBox.Show(ex.Message);
       
      }
      finally {
             if (conexion!=null)
              conexion.Close();
      }

    El using se encarga de liberar sql command, ocurra lo que ocurra, y la conexión la liberamos a la salida del try catch ocurra lo que ocurra. En el catch si ocurre algo le damos salida a la excepción.

    Espero te ayude

    • Marcado como respuesta MEJ21 martes, 19 de noviembre de 2019 5:15
    sábado, 16 de noviembre de 2019 7:23

Todas las respuestas

  • Hola MEJ21:

    if (Pizzapeperoni.Checked == true)
        PP = "Pizza Peperoni";
    else 
        PP=String.Empty;
                
    if(PizzaBuffalo.Checked==true)
        PB = "Pizza Buffalo";
    else 
        PB=String.Empty;

    pp y pb son null.

    Adicionalmente le puedes dar una vuelta a ese método con algo de este estilo.

      try
      {
          if (Pizzapeperoni.Checked == true)
              PP = "Pizza Peperoni";
          else
              PP = String.Empty;
    
          if (PizzaBuffalo.Checked == true)
              PB = "Pizza Buffalo";
          else
              PB = String.Empty;
          using (var altas = new SqlCommand("insert into Compras1 (Precio,PP,PB) values(@Precio,@PizzaPeperoni,@PizzaBuffalo)", conexion))
          {
              // se pasan los valores de los text box a las variables temporales 
              altas.Parameters.AddWithValue("@Precio", Precio);
              altas.Parameters.AddWithValue("@PizzaPeperoni", PP);
              altas.Parameters.AddWithValue("@PizzaBuffalo", PB);
              conexion.Open();
              altas.ExecuteNonQuery();
          }
          MessageBox.Show(" Compra Almacenada");
          // limpiar los textbox
      }
      catch (Exception ex)
      {
          MessageBox.Show(ex.Message);
       
      }
      finally {
             if (conexion!=null)
              conexion.Close();
      }

    El using se encarga de liberar sql command, ocurra lo que ocurra, y la conexión la liberamos a la salida del try catch ocurra lo que ocurra. En el catch si ocurre algo le damos salida a la excepción.

    Espero te ayude

    • Marcado como respuesta MEJ21 martes, 19 de noviembre de 2019 5:15
    sábado, 16 de noviembre de 2019 7:23
  • Explicación de por qué ocurre el mensaje de error que te sale:

    Fíjate en esta instrucción:

    altas.Parameters.AddWithValue("@PizzaPeperoni", PP);

    En principio uno pensaría que si PP es null, el AddWithValue añadiría el parámetro con valor NULL. Bueno, pues no, lo que hace si es null es que no lo agrega. Entonces como la sentencia Insert contiene ese parámetro, pero no le llega ese parámetro, da el error diciendo que el parámetro falta.

    En una respuesta anterior ya te han sugerido una manera de solucionarlo, metiendo en PP un string vacío (que no es lo mismo que el valor null que es lo que tenía PP en tu código cuando el checkbox no estaba marcado).

    Otra solución, en el caso de que quieras grabar NULL en lugar de un string vacío (suponiendo claro está que la tabla está configurada para aceptar null en ese campo) es pasar DBNull.Value:

    altas.Parameters.AddWithValue("@PizzaPeperoni", PP ?? DBNull.Value);

    Si la sentencia anterior te da un error de compilación, métele un "cast" para decirle que trate PP como object.

    sábado, 16 de noviembre de 2019 15:14