"Procedure or function 'UPDATE' expects parameter '@Id', which was not supplied" 在 Windows 表格中

"Procedure or function 'UPDATE' expects parameter '@Id', which was not supplied" in Windows Form

我们创建了一个 Windows 表单来更新 SQL 服务器中的一个 table。

首先我单击输入 ID 从数据库中检索详细信息,然后在更改一些数据后,当我单击 Update 按钮时,出现错误:

Procedure or function 'UPDATE' expects parameter '@Id', which was not supplied.

Windows 表单设计:

Click here

错误:

Click here

Windows 表格代码:

public partial class Update : Form
{
    string connectionString = @"Data Source=AMAR;Initial Catalog=Hotel;Integrated Security=True";

    public Update()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        {
            TestObject t = null;
            string spName = "Get";
            //string queryText = "Select * from TestTable where Id = " +txtId.Text;
            SqlConnection conn = new SqlConnection(connectionString);
            //SqlCommand com = new SqlCommand(spName, conn);
            SqlCommand com = new SqlCommand(spName, conn);
            com.Parameters.AddWithValue("@Id", ID.Text);
            com.CommandType = CommandType.StoredProcedure;

            conn.Open();

            using (SqlDataReader reader = com.ExecuteReader())
            {
                t = new TestObject();

                while (reader.Read())
                {
                    t.Id = reader["ID"].ToString();
                    t.Status = reader["Status"].ToString();
                    t.FName = reader["FirstName"].ToString();
                    t.LName = reader["LastName"].ToString();
                    t.Addr = reader["Address"].ToString();
                    t.City = reader["City"].ToString();
                    t.State = reader["State"].ToString();
                    t.Country = reader["Country"].ToString();
                    t.PhoneNo = reader["PhoneNo"].ToString();
                    t.Email = reader["EmailId"].ToString();
                    t.Pin = reader["Pincode"].ToString();
                    t.CheckIn = reader["CheckIn"].ToString();
                    t.CheckOut = reader["CheckOut"].ToString();
                    t.AdultNo = reader["AdultNo"].ToString();
                    t.ChildNo = reader["InfantNo"].ToString();
                    t.InfantNo = reader["InfantNo"].ToString();
                    t.RoomNo = reader["RoomNo"].ToString();
                };
            }

            Statustxt.Text = t.Status;
            txtfName.Text = t.FName;
            txtlName.Text = t.LName;
            txtAddr.Text = t.Addr;
            City.Text = t.City;
            State.Text = t.State;
            Country.Text = t.Country;
            PhoneNo.Text = t.PhoneNo;
            EmailID.Text = t.Email;
            Pincode.Text = t.Pin;
            CheckIN.Text = t.CheckIn;
            CheckOut.Text = t.CheckOut;
            Adult.Text = t.AdultNo;
            Child.Text = t.ChildNo;
            Infant.Text = t.InfantNo;
            RoomNo.Text = t.RoomNo;
        }
    }

    private void btnUpdate_Click(object sender, EventArgs e)
    {
        string Stat = Statustxt.Text;
        string FirstName = txtfName.Text;
        string LastName = txtlName.Text;
        string Address=txtAddr.Text;
        string Cities=City.Text;
        string States= State.Text;
        string  Countries =Country.Text;
        string  PhoneNos= PhoneNo.Text;;
        string  EmailId= EmailID.Text;
        string PinCode=Pincode.Text;
        string CIn=CheckIN.Text;
        string  COut=CheckOut.Text;
        string  AdultNo=Adult.Text;
        string  ChildNo=Child.Text;
        string InfantNo=Infant.Text;
        string RoomNos=RoomNo.Text;

        TestObject obj = new TestObject();

        obj.Stat=Statustxt.Text;
        obj.FirstName = txtfName.Text;
        obj.LastName = txtlName.Text;
        obj.Address=txtAddr.Text;
        obj.Cities=City.Text;
        obj.States= State.Text;
        obj.Countries =Country.Text;
        obj.PhoneNos= PhoneNo.Text;;
        obj.EmailId= EmailID.Text;
        obj.PinCode=Pincode.Text;
        obj.CIn=CheckIN.Text;
        obj.COut=CheckOut.Text;
        obj.AdultNo=Adult.Text;
        obj.ChildNo=Child.Text;
        obj.InfantNo=Infant.Text;
        obj.RoomNos=RoomNo.Text;

        string spName = "UPDATE";

        SqlConnection conn = new SqlConnection(connectionString);
        SqlCommand com = new SqlCommand(spName, conn);

        conn.Open();

        com.Parameters.AddWithValue("@Stat", obj.Stat);
        com.Parameters.AddWithValue("@FirstName", obj.FirstName);
        com.Parameters.AddWithValue("@LastName", obj.LastName);
        com.Parameters.AddWithValue("@Address", obj.Address);
        com.Parameters.AddWithValue("@Cities", obj.Cities);
        com.Parameters.AddWithValue("@States", obj.States);
        com.Parameters.AddWithValue("@Countries", obj.Countries);
        com.Parameters.AddWithValue("@PhoneNos", obj.PhoneNos);
        com.Parameters.AddWithValue("@EmailId", obj.EmailId);
        com.Parameters.AddWithValue("@PinCode", obj.PinCode);
        com.Parameters.AddWithValue("@CIn", obj.CIn);
        com.Parameters.AddWithValue("@COut", obj.COut);
        com.Parameters.AddWithValue("@AdultNo", obj.AdultNo);
        com.Parameters.AddWithValue("@ChildNo", obj.ChildNo);
        com.Parameters.AddWithValue("@InfantNo", obj.InfantNo);
        com.Parameters.AddWithValue("@RoomNos", obj.RoomNos);

        com.CommandType = CommandType.StoredProcedure;

        com.ExecuteNonQuery();
        conn.Close();

        MessageBox.Show("Customer Details updated in system");
    }
}

SQL 服务器存储过程:

ALTER PROCEDURE [dbo].[UPDATE] 
    @Id int,
    @Stat nvarchar(100),
    @FirstName nvarchar(100),
    @LastName nvarchar(100),
    @Address nvarchar(100),
    @Cities nvarchar(100),
    @States nvarchar(100),
    @Countries nvarchar(100),
    @PhoneNos int,
    @EmailId nvarchar(100),
    @PinCode int,
    @CIn nvarchar(100),
    @COut nvarchar(100),
    @AdultNo int,
    @ChildNo int,
    @InfantNo int, 
    @RoomNos int
AS
BEGIN
SET NOCOUNT ON;

-- Insert statements for procedure here
UPDATE [Hotel].[dbo].[Details] SET
[Status] = @Stat,
   [FirstName] = @FirstName,
  [LastName] = @LastName,
  [Address] = @Address,
  [City] = @Cities,
  [State] =@States ,
  [Country] = @Countries,
  [PhoneNo] = @PhoneNos,
  [EmailId] = @EmailId,
  [Pincode] = @PinCode,
  [CheckIn] = @CIn,
  [CheckOut] = @COut,
  [AdultNo] = @AdultNo,
  [ChildNo] = @ChildNo,
  [InfantNo] = @InfantNo,
  [RoomNo] = @RoomNos
WHERE ID = @Id

END

一个。正如 Mitch Wheat 在评论中所写,永远不要使用关键字作为过程名称。

b。正如 marc_s 在他的评论中所写 - 停止使用 .AddWithValue()。阅读他链接到的文章。

c。您从不向命令提供 @id 参数,这就是您收到错误的原因。

d。这与winforms无关。

e。以后请只提供相关代码。如果问题出在更新按钮单击中,我们不需要查看整个表单 class,只需查看按钮单击事件处理程序。