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
相关产品推荐
相关产品推荐

