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

.NET Core调用MySQL存储过程提示p_room_types参数不存在如何解决

.NET Core调用MySQL存储过程参数不存在错误修复方案

核心原因

触发Parameter 'p_room_types' not found in the collection错误的常见原因如下:

  • 参数名匹配规则冲突:.NET Core常用的MySQL连接器(MySqlConnector、MySql.Data)在CommandType = CommandType.StoredProcedure模式下,会默认移除C#参数名的@前缀后,再和存储过程定义的入参名匹配,部分版本的连接器存在规则适配问题,导致带@的参数无法匹配到存储过程的无@入参。
  • 大小写不匹配:Linux/Unix环境下的MySQL默认对存储过程参数名大小写敏感,若C#参数名和存储过程参数名大小写不一致,会触发匹配失败。
  • 参数未正确挂载:创建的参数对象未添加到MySqlCommand.Parameters集合中,或者添加时参数名拼写错误。
  • 连接字符串配置冲突:连接字符串中Allow User Variables设为true时,@开头的参数会被识别为用户自定义变量,不会和存储过程的入参做匹配。

修复步骤

1. 统一参数命名规则

推荐优先使用此方案,C#参数名直接和存储过程入参名完全一致,不需要加@前缀:

// 错误写法
command.Parameters.AddWithValue("@p_room_types", "参数值");
// 正确写法
command.Parameters.AddWithValue("p_room_types", "参数值");

2. 校验大小写与拼写

确认C#中定义的参数名,和存储过程定义的入参名拼写、大小写完全一致。

3. 调整连接字符串配置

如果需要保留参数的@前缀,在连接字符串中添加配置Allow User Variables=false;即可。

4. 兼容写法(规避存储过程参数匹配规则)

如果上述操作都无效,可以直接改CommandType为文本类型,用CALL语法调用存储过程:

using var conn = new MySqlConnection("你的连接字符串");
conn.Open();
using var cmd = conn.CreateCommand();
// 改用文本类型执行存储过程调用语句
cmd.CommandType = CommandType.Text;
cmd.CommandText = "CALL InsertRoomNecessities(@p_room_types, @p_param2, @p_param3, @p_param4, @p_param5);";
// 此时参数可以正常带@前缀
cmd.Parameters.AddWithValue("@p_room_types", "逗号分隔的房间类型值");
// 依次添加剩余4个参数
using var reader = cmd.ExecuteReader();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:06:05