C#执行MySQL UPDATE语句后数据库无变更且无报错求助
排查C#中MySQL UPDATE无变化且无报错的问题
看了你的代码,马上发现了几个关键问题,这就是为什么你的UPDATE操作没生效还没报错的原因:
首先最致命的——你只是创建了MySqlCommand对象,但完全没有执行它!代码到创建命令就结束了,根本没把这条UPDATE语句发送给数据库执行。
然后还有几个容易踩坑的地方,我一步步给你理清楚:
必须执行命令
你需要调用command.ExecuteNonQuery()来执行UPDATE语句,这个方法会返回受影响的行数,你可以打印这个值来确认是否真的命中了记录(如果返回0,说明你的WHERE条件value_id=4063没有匹配到任何行)。端口转发的冲突问题
你的ForwardedPortLocal构造参数顺序是(本地IP, 本地端口, 远程数据库IP, 远程数据库端口),现在你设置的是本地22端口转发到远程3306,但SSH连接本身就是用22端口的,这会导致端口冲突,根本没法正常转发。应该换一个本地未被占用的端口,比如3307,然后连接字符串里的PORT也要改成3307。连接字符串的DATABASE参数错误
你写的DATABASE=DB_tablename,这里应该填数据库名称,不是表名!表名是写在SQL语句里的,这个参数是指定要连接的数据库,填错的话可能连到了错误的库,自然找不到要更新的表。添加异常捕获
你的代码没有任何异常处理,即使中间出现了错误(比如连接失败、SQL语法错误),也不会输出任何信息,导致你误以为没有错误。一定要加上try-catch块来捕获并打印异常详情。
修改后的完整代码(标注了所有修改点)
public static void Builder() { try { Console.WriteLine("Opening SSH Connection..."); // Establishing ssh connection to server where MySql is hosted using (var client = new SshClient("ssh_host", "ssh_username", "ssh_password")) { client.Connect(); if (client.IsConnected) { // 修改:换一个本地端口,避免和SSH的22端口冲突 var portForwarded = new ForwardedPortLocal("127.0.0.1", 3307, "127.0.0.1", 3306); client.AddForwardedPort(portForwarded); portForwarded.Start(); Console.WriteLine("SSH Connection Established!\n"); Console.WriteLine("Opening MySql Connection..."); // 修改:连接字符串的PORT改成3307,DATABASE填正确的数据库名称 using (MySqlConnection con = new MySqlConnection("SERVER=127.0.0.1;PORT=3307;UID=DB_login;PASSWORD=DB_password;DATABASE=正确的数据库名称")) { Console.WriteLine("MySql Connection Established!\n"); // Opening the Connection con.Open(); Console.WriteLine("Generating Query..."); // Making the Query MySqlCommand command = new MySqlCommand("UPDATE catalog_product_entity_decimal SET value= 1114 WHERE value_id= 4063", con); Console.WriteLine("Query Generated!"); // 修改:执行命令并获取受影响行数 int affectedRows = command.ExecuteNonQuery(); Console.WriteLine($"执行完成,受影响行数:{affectedRows}"); if (affectedRows == 0) { Console.WriteLine("警告:没有匹配到任何记录,请检查value_id=4063是否存在"); } } client.Disconnect(); } else { Console.WriteLine("Client cannot be reached..."); } } } catch (Exception ex) { // 修改:捕获所有异常并输出详情 Console.WriteLine($"发生错误:{ex.Message}"); Console.WriteLine($"错误堆栈:{ex.StackTrace}"); } }
额外排查建议
- 如果执行后受影响行数是0,去数据库里手动执行
SELECT * FROM catalog_product_entity_decimal WHERE value_id=4063,确认这条记录是否存在 - 检查SSH服务器上的MySQL是否允许本地连接(因为你转发的是远程的127.0.0.1:3306,所以MySQL需要允许localhost连接)
- 确认
DB_login账号有对catalog_product_entity_decimal表的UPDATE权限
内容的提问来源于stack exchange,提问作者AsSEateR5000
相关产品推荐
相关产品推荐

