C# 我在ASP.NET中有一个库存数据库。如果我试图减少库存量超过可用库存量,我需要一条错误消息

C# 我在ASP.NET中有一个库存数据库。如果我试图减少库存量超过可用库存量,我需要一条错误消息,c#,asp.net,vbscript,sqlcommand,stock,C#,Asp.net,Vbscript,Sqlcommand,Stock,我有一个基于网站的库存系统,我可以增加库存和减少库存。但是,当我减小它时,如果您试图将它减小到-1,我希望出现一个错误 例如:我在一件商品上有40支库存,我想拿走41支。它应该会给我一条错误消息,告诉我错误:库存不足 protected void Button1_Click(object sender, EventArgs e) { con.Open(); SqlCommand cmd = new SqlCommand("update Inventory set stock =

我有一个基于网站的库存系统,我可以增加库存和减少库存。但是,当我减小它时,如果您试图将它减小到-1,我希望出现一个错误

例如:我在一件商品上有40支库存,我想拿走41支。它应该会给我一条错误消息,告诉我
错误:库存不足

protected void Button1_Click(object sender, EventArgs e)
{
    con.Open();

    SqlCommand cmd = new SqlCommand("update Inventory set stock = stock - '" 
        + txtstockremove.Text + "' where model_number='" + txtmodelno.Text + "'", con);

    cmd.ExecuteNonQuery();
    con.Close();
    GridView1.DataBind();
    Label1.Visible = true;
    Label1.Text = "Stock Successfully Removed!";
}          

我建议允许数据库做它擅长的事情。在
库存
表中添加一个约束,这样您就可以保证
库存
永远不会变为负值

ALTER TABLE dbo.Inventory ADD CONSTRAINT CK_Inventory_Stock CHECK (Stock >= 0)
这样做的副作用是,您的
cmd.ExecuteNonQuery()
语句可能会引发异常。所以你应该做好准备:

try {
  cmd.ExecuteNonQuery();
  GridView1.DataBind();
  Label1.Visible = true;
  Label1.Text = "Stock Successfully Removed!";
} catch (SqlException e) {
  Label1.Visible = true;
  Label1.Text = e.ToString();
}

如果我正确理解了问题,您需要在更新之前验证库存:

protected void Button1_Click(object sender, EventArgs e)
{

    con.Open();

    SqlDataReader reader;

    SqlCommand cmd = new SqlCommand("select stock from Inventory, con);
    cmd.CommandType = CommandType.Text;

    reader = cmd.ExecuteReader();
    // Data is accessible through the DataReader object here. You'll have to fill this part in

    cmd.ExecuteNonQuery();

    if (txtstockremove.Text <= currentStock)
    {


    SqlCommand cmd = new SqlCommand("update Inventory set stock= stock - '" + txtstockremove.Text + "' where model_number='" + txtmodelno.Text + "'", con);


    cmd.ExecuteNonQuery();
    }
    else
    {
        Label1.Visible = true;
        Label1.Text = "Stock Successfully Removed!";
    }
    con.Close();
    GridView1.DataBind();
    Label1.Visible = true;
    Label1.Text = "Stock Successfully Removed!";

}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
con.Open();
SqlDataReader;
SqlCommand cmd=新的SqlCommand(“从库存中选择库存,con”);
cmd.CommandType=CommandType.Text;
reader=cmd.ExecuteReader();
//可以通过此处的DataReader对象访问数据。您必须填写此部分
cmd.ExecuteNonQuery();

if(txtstockremove.Text)您永远不应该将SQL查询与直接用户输入连接起来。此代码很容易出错,这可能是您的软件中的一个严重安全缺陷。我将对此进行更好的解释,因此我需要一个标签来显示“错误:库存不足”"如果我在文本框中键入30,可用的存量是25。因此,我希望用户验证错误不会降到-5。希望这更有意义,对不起,我是一个初学者。好吧,这个想法与我上面写的代码基本相同。我只会更改一件事:我不会将函数连接到ButtonClick,而是使用文本框的TextChanged事件。因此,基本上是:1.每当用户更改值时-您根据数据库测试您是否有足够的库存。2.如果您这样做-没有问题。3.如果您不这样做-显示错误消息(我还将禁用提交按钮)。4.如果用户单击按钮-您不需要再次验证-只需更新数据库(和你以前做的一样)。希望这有帮助。