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

升级MySqlConnector 2.0.0后创建存储过程失败问题咨询

问题诱因

MySqlConnector 2.0.0版本对MySqlCommand.Prepare()的实现逻辑做了调整:调用该方法时,驱动会默认用原生SQL分隔符;对CommandText做语句拆分,仅将拆分得到的第一段SQL发送至MySQL服务端做预编译处理。
你提交的存储过程创建语句内部存在多个;分隔符,拆分逻辑会在SET p_out = 1;处截断语句,发送到服务端的SQL为不完整片段,因此触发第3行附近的语法错误。
未调用Prepare()时,驱动会直接将完整的CommandText全部发送至服务端,不会做提前拆分,所以可以正常执行。

解决方案
  • 优先方案:创建存储过程、函数等包含内置;分隔符的DDL语句时,跳过Prepare()调用,直接执行ExecuteNonQuery()即可。这类单次执行的DDL语句没有预编译的业务价值,跳过调用即可完全规避语句截断问题。
  • 兼容方案:如果公共数据库操作层封装了强制调用Prepare()的逻辑无法单独修改,可改用MySqlScript对象执行存储过程创建脚本,该对象原生支持多分隔符SQL解析,不会出现语句截断问题。
  • 临时方案:如果必须使用MySqlCommand且必须调用Prepare(),可以在存储过程SQL前后显式声明自定义分隔符,同时开启连接字符串的AllowMultiStatement参数,示例SQL如下:
DELIMITER //
CREATE PROCEDURE proc(OUT p_out INT) 
BEGIN
  SET p_out = 1;
  SELECT 200;
END //
DELIMITER ;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:15:05