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()返回的是正确的数据库连接,有没有连错库的情况
这样改完之后,你的更新操作应该就能正常生效了,试试吧!




