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

使用MySql.Data设置conn_attrs(program_name)报错,求解决方案

MySQL连接字符串设置程序名称的解决方案

问题说明

想要在MySQL连接中设置程序名称,尝试通过拼接conn_attrs=program_name:alireza到连接字符串的方式实现,代码如下:

var builder = new MySqlConnectionStringBuilder()
{
    Server = "myip",
    UserID = "myuser",
    Password = "mypass",
    Database = "mydb",
    SslMode = MySqlSslMode.Required,
    ConnectionTimeout = 30,
    CharacterSet = "utf8mb4",
};

var cs = $"{builder.ConnectionString};conn_attrs=program_name:alireza";
using var conn = new MySqlConnection(cs);
using var cmd = new MySqlCommand("Select BookId From Books", conn);
conn.Open();
using var reader = await cmd.ExecuteReaderAsync();
while(await reader.ReadAsync())
{
    int id = reader.GetInt32(0);
}

运行时触发错误:

Option not supported.
Parameter name: conn_attrs

使用的NuGet包版本:

  • MySql.Data Version=8.0.32
  • MySql.Data.EntityFramework Version=8.0.32

解决方案

方法一:使用官方支持的ApplicationName属性

MySql.Data驱动原生支持通过ApplicationName连接字符串参数设置程序名称,该参数会自动映射到MySQL的program_name连接属性。直接在MySqlConnectionStringBuilder中设置即可:

var builder = new MySqlConnectionStringBuilder()
{
    Server = "myip",
    UserID = "myuser",
    Password = "mypass",
    Database = "mydb",
    SslMode = MySqlSslMode.Required,
    ConnectionTimeout = 30,
    CharacterSet = "utf8mb4",
    ApplicationName = "alireza" // 设置程序名称
};

using var conn = new MySqlConnection(builder.ConnectionString);
using var cmd = new MySqlCommand("Select BookId From Books", conn);
conn.Open();
using var reader = await cmd.ExecuteReaderAsync();
while(await reader.ReadAsync())
{
    int id = reader.GetInt32(0);
}

方法二:连接后设置会话变量

如果需要更灵活的设置,可以在连接打开后执行SQL语句设置program_name会话变量:

var builder = new MySqlConnectionStringBuilder()
{
    Server = "myip",
    UserID = "myuser",
    Password = "mypass",
    Database = "mydb",
    SslMode = MySqlSslMode.Required,
    ConnectionTimeout = 30,
    CharacterSet = "utf8mb4",
};

using var conn = new MySqlConnection(builder.ConnectionString);
conn.Open();

// 设置程序名称会话变量
using var setProgramCmd = new MySqlCommand("SET SESSION program_name = 'alireza';", conn);
await setProgramCmd.ExecuteNonQueryAsync();

// 执行业务查询
using var cmd = new MySqlCommand("Select BookId From Books", conn);
using var reader = await cmd.ExecuteReaderAsync();
while(await reader.ReadAsync())
{
    int id = reader.GetInt32(0);
}

说明

MySql.Data 8.0.32版本的连接字符串不支持conn_attrs参数,该参数属于MySQL原生协议字段,但驱动并未将其暴露为连接字符串选项,而是通过ApplicationName属性提供了等价的功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:17:41