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

C#中向MySQL传递路径参数时遇反斜杠加倍及SQL语法错误求助

问题解决:MySQL插入图片路径时的语法错误与反斜杠误解

核心错误原因

你的代码报错的直接原因是SQL语句的语法错误:在指定列名时用了单引号'path'、'filename',MySQL中列名的正确分隔符是反引号`(单引号仅用于包裹字符串值),这会直接触发SQL语法错误。

至于你看到的反斜杠加倍(\\\\srvdata\\images\\products),只是错误信息中字符串的转义显示——C#里的单个\在输出日志时会被转义为\\,而参数化查询本身会自动处理字符串转义,实际传递给数据库的路径是正确的,不会存储多余的反斜杠,这属于调试显示的误解,不是真正的问题。

修正后的代码

只需要修改SQL语句中的列名分隔符即可,修正后的完整代码如下:

using (MySql.Data.MySqlClient.MySqlConnection mySqlConnection = new MySql.Data.MySqlClient.MySqlConnection(Settings.Default.tlConnectionString))
{
    try
    {
        mySqlConnection.Open();
        // 把列名的单引号换成反引号,或者直接省略(如果列名无特殊字符)
        string cmdText = "INSERT INTO images (`path`, `filename`) VALUES (@path, @filename);";
        MySqlCommand cmd = new MySqlCommand(cmdText, mySqlConnection);
        cmd.Parameters.AddWithValue("@path", Path.GetDirectoryName(itemFilePath));
        cmd.Parameters.AddWithValue("@filename", Path.GetFileName(itemFilePath));
        cmd.ExecuteNonQuery();
        long imageId = cmd.LastInsertedId;

        // 后续代码...
    }
    catch (Exception e)
    {
        return false;
    }
}
return true;

补充说明

  1. 如果你的列名(path、filename)是MySQL的合法标识符(没有空格、特殊字符、关键字冲突),也可以直接去掉反引号,写成INSERT INTO images (path, filename) VALUES (@path, @filename);
  2. 参数化查询是安全的做法,它会自动处理字符串中的特殊字符(包括反斜杠、单引号等),不需要手动转义,避免SQL注入的同时也能保证数据正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:43:31