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

C# WinForm库存管理系统:销售时数据库库存数量未减少问题求助

解决C# WinForm库存更新代码不生效的问题

嘿,我来帮你梳理下你的库存管理系统里的问题——这段更新库存的代码没生效,主要有几个关键的地方需要修正,咱们一步步来:

核心问题分析

1. SqlDataAdapter的使用场景不对

SqlDataAdapter主要是用来和DataSet/DataTable配合,实现批量数据填充或更新的。你只是初始化了它,但没有触发任何执行逻辑(比如调用Update()方法),所以这条UPDATE命令根本没被发送到数据库。而且对于这种单一的更新操作,用SqlCommand会更直接高效。

2. 逻辑错误:同一个TextBox复用了不同含义的值

你的SQL语句里,Vcount-('"+textBox4.Text+"')(销售数量)和WHERE id=('"+textBox4.Text+"')(商品ID)用的都是textBox4的内容,这显然不符合业务逻辑——商品ID和销售数量肯定是两个不同的输入项,应该对应两个不同的输入控件(比如一个输入商品ID,一个输入卖出的数量)。

3. 字符串拼接SQL的安全和语法隐患

直接把用户输入拼到SQL里,不仅存在SQL注入的严重安全风险,还可能因为输入内容不是合法数字(比如用户输入了字母)导致SQL语法错误,最终更新失败。


修正后的代码示例

下面是优化后的代码,解决了上述所有问题:

// 假设:textBoxProductId是商品ID输入框,textBoxSaleQty是销售数量输入框
string updateSql = "UPDATE Stock SET Vcount = Vcount - @SaleQty WHERE id = @ProductId";

// 使用using语句自动管理资源,避免连接泄漏
using (SqlConnection conn = new SqlConnection("你的数据库连接字符串"))
using (SqlCommand cmd = new SqlCommand(updateSql, conn))
{
    try
    {
        // 添加参数化查询,避免注入+保证类型正确
        cmd.Parameters.Add("@SaleQty", SqlDbType.Int).Value = int.Parse(textBoxSaleQty.Text);
        cmd.Parameters.Add("@ProductId", SqlDbType.Int).Value = int.Parse(textBoxProductId.Text);

        conn.Open();
        int affectedRows = cmd.ExecuteNonQuery();
        
        // 根据受影响行数判断更新结果
        if (affectedRows > 0)
        {
            MessageBox.Show("库存更新成功!");
        }
        else
        {
            MessageBox.Show("未找到对应商品ID,更新失败!");
        }
    }
    catch (FormatException)
    {
        MessageBox.Show("请输入有效的数字!");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"更新出错:{ex.Message}");
    }
}

关键优化点说明

  • 使用SqlCommand.ExecuteNonQuery()执行更新命令:这个方法专门用于执行不返回数据集的SQL语句(UPDATE/INSERT/DELETE),还会返回受影响的行数,方便判断操作是否成功。
  • 参数化查询:彻底避免SQL注入,同时自动处理数据类型转换,不会因为字符串拼接导致语法错误。
  • using语句:自动帮你关闭数据库连接、释放资源,不用手动写conn.Close(),代码更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:13:47