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

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}");
    }
}

额外排查建议

  1. 如果执行后受影响行数是0,去数据库里手动执行SELECT * FROM catalog_product_entity_decimal WHERE value_id=4063,确认这条记录是否存在
  2. 检查SSH服务器上的MySQL是否允许本地连接(因为你转发的是远程的127.0.0.1:3306,所以MySQL需要允许localhost连接)
  3. 确认DB_login账号有对catalog_product_entity_decimal表的UPDATE权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:04:36