You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server库存扣减及C#库存为0时弹窗拦截采购操作问题

解决库存扣减负值问题的方案

你的问题核心是未在执行数据库更新前做库存合法性校验,导致库存为0时仍会执行扣减操作。以下是修改后的代码,同时优化了异常处理和资源管理:

private void updateQty()
{
    try
    {
        // 1. 验证输入的采购数量是否为有效整数
        if (!int.TryParse(txtnumberofunit.Text, out int deductQty))
        {
            MessageBox.Show("请输入有效的采购数量!");
            return;
        }

        // 2. 校验库存状态:库存为0或扣减后库存为负时终止操作
        if (stock <= 0 || stock - deductQty < 0)
        {
            MessageBox.Show("库存不足,无法执行采购操作!");
            return;
        }

        int newqty = stock - deductQty;
        
        // 使用using语句自动管理数据库资源,避免连接泄漏
        using (var con = new SqlConnection(你的数据库连接字符串))
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("Update medic Set quantity=@q where id=@Xkey ", con);

            cmd.Parameters.AddWithValue("@q", newqty);
            cmd.Parameters.AddWithValue("@Xkey", key);

            cmd.ExecuteNonQuery();
            MessageBox.Show("Medicine updated!!");
        }

        //showExpenses();
        //Reset();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

关键修改点说明:

  • 输入合法性校验:用int.TryParse替代直接Convert.ToInt32,避免输入非数字内容时抛出异常。
  • 库存前置校验:在计算新库存前先判断当前库存是否为0,或扣减后是否会出现负值,满足条件则直接弹出提示并终止流程。
  • 资源自动管理:用using语句包裹数据库连接,确保无论是否发生异常,连接都会被自动关闭,避免连接资源泄漏。

内容的提问来源于stack exchange,提问作者zack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:20:27