C# 我想更新我的库存量,与以前的数量保持一致。

C# 我想更新我的库存量,与以前的数量保持一致。,c#,sql,.net,logic,inventory-management,C#,Sql,.net,Logic,Inventory Management,我想按照以前的库存状态更新我的库存数量。我需要更新以前的数据,根据向内或向外的交易增加或减少数据。我没有在currentstock表中更新库存。 //这是问题部分的开始 SqlCommand cmd2 = new SqlCommand("select stock from currentstock where itemname=@a", con); con.Open(); int x=0; cmd2.Parameters.AddWi

我想按照以前的库存状态更新我的库存数量。我需要更新以前的数据,根据向内或向外的交易增加或减少数据。我没有在currentstock表中更新库存。 //这是问题部分的开始

        SqlCommand cmd2 = new SqlCommand("select stock from currentstock where itemname=@a", con);
        con.Open();
        int x=0;
        cmd2.Parameters.AddWithValue("@a",comboBox2.SelectedItem.ToString());
        SqlDataReader dr = cmd2.ExecuteReader();
        if (dr.Read())
        {
             x = dr.GetInt16(2);
        }
        if (radioButton1.Checked == true)
        {
            x = x + Convert.ToInt16(textBox1.Text);
        }
        else if (radioButton2.Checked == true)
        {
            x = x - Convert.ToInt16(textBox2.Text);
        }
            con.Close();



        SqlCommand cmd1 = new SqlCommand("update currentstock set stock=@a where itemname=@b",con);
        con.Open();
        cmd1.Parameters.AddWithValue("@a", x);
        cmd1.Parameters.AddWithValue("@b", comboBox2.SelectedItem.ToString());
        cmd1.ExecuteNonQuery();
        con.Close();

//这是问题部分的结尾

首先,在与sql表对话时,请不要直接使用来自用户输入的值(请参阅)。使用存储过程

        SqlCommand cmd2 = new SqlCommand("select stock from currentstock where itemname=@a", con);
        con.Open();
        int x=0;
        cmd2.Parameters.AddWithValue("@a",comboBox2.SelectedItem.ToString());
        SqlDataReader dr = cmd2.ExecuteReader();
        if (dr.Read())
        {
             x = dr.GetInt16(2);
        }
        if (radioButton1.Checked == true)
        {
            x = x + Convert.ToInt16(textBox1.Text);
        }
        else if (radioButton2.Checked == true)
        {
            x = x - Convert.ToInt16(textBox2.Text);
        }
            con.Close();



        SqlCommand cmd1 = new SqlCommand("update currentstock set stock=@a where itemname=@b",con);
        con.Open();
        cmd1.Parameters.AddWithValue("@a", x);
        cmd1.Parameters.AddWithValue("@b", comboBox2.SelectedItem.ToString());
        cmd1.ExecuteNonQuery();
        con.Close();

我希望您从组合框返回的值在表的itemname列中不是有效值。

那么问题出在哪里?x=x+Convert.ToInt16(textBox1.Text);x=x-将.ToInt16转换为(textBox2.Text);我认为这两条语句没有得到执行。请解释您在哪一行上面临的问题,以及出现的错误或异常,预计将在currentstock表中进行更改,但即使在完成执行后,程序也不会反映数据库中的任何更改。您确定传递的值与表行中的值不同吗?它是一个有效值,并且正在调试的程序没有显示任何错误。组合框将返回一个字符串格式的值,并在SQL表中使用项名称作为nvarchar类型。。