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

含@符号的MySQL列名在C#动态SQL执行中报错的问题咨询

解决C#执行带@列名的MySQL创建表语句报错问题

我来帮你搞定这个问题!核心原因是MySQL默认不认可双引号作为标识符的包裹符号,而开启ANSI_QUOTES sql模式后,MySQL会遵循标准SQL规则,把双引号当作标识符引号使用——这也是你手动执行SET sql_mode='ANSI_QUOTES';后能成功的原因。下面是两种代码层面的可行方案:

1. 在连接字符串中自动启用ANSI_QUOTES

你可以直接在C#的MySQL连接字符串里添加Sql Mode=ANSI_QUOTES;参数,这样每次建立数据库连接时会自动激活该模式,不需要额外执行SET语句。示例代码如下:

string connectionString = "server=你的服务器地址;user=用户名;password=密码;database=目标库;Sql Mode=ANSI_QUOTES;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
    connection.Open();
    string createTableSql = "CREATE TABLE dump (\"@employee_OID\" VARCHAR(50));";
    using (MySqlCommand command = new MySqlCommand(createTableSql, connection))
    {
        command.ExecuteNonQuery();
    }
}

2. 执行创建表语句前临时设置sql_mode

如果不想修改全局连接的sql模式,你可以在每次执行目标SQL前,先单独执行设置sql_mode的语句,仅在当前连接生效。示例代码:

string connectionString = "server=你的服务器地址;user=用户名;password=密码;database=目标库;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
    connection.Open();
    
    // 先临时设置sql模式
    using (MySqlCommand setModeCommand = new MySqlCommand("SET sql_mode='ANSI_QUOTES';", connection))
    {
        setModeCommand.ExecuteNonQuery();
    }
    
    // 再执行创建表的语句
    string createTableSql = "CREATE TABLE dump (\"@employee_OID\" VARCHAR(50));";
    using (MySqlCommand createCommand = new MySqlCommand(createTableSql, connection))
    {
        createCommand.ExecuteNonQuery();
    }
}

小提醒

开启ANSI_QUOTES模式后,双引号只能用来包裹标识符(比如你的@employee_OID列名),字符串常量必须用单引号表示。如果你的其他SQL语句里有用双引号写字符串的情况,记得改成单引号避免新的报错哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:45:18