You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C# Windows Forms程序无法更新本地SQL库存数据库,无报错但数据无变化

C# Windows Forms程序无法更新本地SQL库存数据库,无报错但数据无变化

嗨,兄弟,我一眼就瞅出问题所在了——你辛辛苦苦构造了SQL语句,但完全没让数据库执行它

你看你的代码,创建了MySqlCommand对象之后,直接就把连接关了,根本没调用执行命令的方法,数据库连这个更新请求都没收到,自然不会有任何变化啦。

先给你修复最核心的问题:加上命令执行步骤

先把你的函数改成这样,重点是加上comando.ExecuteNonQuery()这一行,它才是真正把SQL命令发送给数据库执行的关键:

public void setCantidad(int valorActualizado, int indice)
{
    Conexion miConexion = new Conexion();
    using (var conectar = miConexion.GetConnection()) // 用using自动管理连接,避免资源泄漏
    {
        conectar.Open();
        string sql = "UPDATE stock SET cantidad = " + valorActualizado + " WHERE id = " + indice;
        using (MySqlCommand comando = new MySqlCommand(sql, conectar))
        {
            int affectedRows = comando.ExecuteNonQuery(); // 执行更新,返回受影响的行数
            // 可以加个判断,看看有没有行被更新,方便调试
            if (affectedRows == 0)
            {
                // 说明没找到对应id的记录,或者更新没生效,这里可以加调试日志
                Console.WriteLine("没有找到id为" + indice + "的记录,或者更新未生效");
            }
        }
    } // using结束会自动关闭连接,不用手动Close()
}

更重要的优化:别用字符串拼接SQL,改用参数化查询

你现在用字符串拼接的方式构造SQL,不仅容易出类型错误,还存在SQL注入的风险(虽然这是本地数据库,但好习惯要从小养成)。改成参数化查询的版本更安全也更可靠:

public void setCantidad(int valorActualizado, int indice)
{
    Conexion miConexion = new Conexion();
    using (var conectar = miConexion.GetConnection())
    {
        conectar.Open();
        // 用占位符代替直接拼接变量
        string sql = "UPDATE stock SET cantidad = @valorActualizado WHERE id = @indice";
        using (MySqlCommand comando = new MySqlCommand(sql, conectar))
        {
            // 添加参数,指定类型和值
            comando.Parameters.AddWithValue("@valorActualizado", valorActualizado);
            comando.Parameters.AddWithValue("@indice", indice);
            
            int affectedRows = comando.ExecuteNonQuery();
            if (affectedRows == 0)
            {
                Console.WriteLine("未找到匹配id的记录,更新无效果");
            }
        }
    }
}

最后再检查几个可能的小问题:

  • 确认你的id=0的记录真的存在于stock表中,有时候可能是id值不对(比如数据库里id从1开始,你传了0)
  • 检查数据库用户的权限,确保有UPDATE表的权限(不过你说直接执行SQL能生效,这个可能性不大)
  • 确认你的连接对象miConexion.GetConnection()返回的是正确的数据库连接,有没有连错库的情况

这样改完之后,你的更新操作应该就能正常生效了,试试吧!

火山引擎 最新活动