我发现在我的项目中,命名参数的顺序有意义。
我称这个程序为
CREATE PROCEDURE `test`.`TestProc` (
in myText varchar (5),
in myText2 varchar (100)
)
BEGIN
END
如果我添加这样的参数:
command.CommandText = "testProc";
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Parameters.AddWithValue("myText2", "aaaaaaaaaaaaaaaaa");
command.Parameters.AddWithValue("myText", "bbbb");
我得到“数据太长”的异常。另外,我无法在测试项目中重现这一点。
有什么想法吗?
我找到了原因。看起来像MySql .Nat Data Provider中的bug。 要重现该错误,您需要在root用户下调用它。
结论:MySql.Data版本6.2.3.0。 命令参数的顺序有意义如果您使用非root数据库帐户调用过程
答案 0 :(得分:1)
参数的名称不必与列匹配,而是与占位符匹配:
INSERT INTO testproc (mytext, mytext2) VALUES (?mytext, ?mytext2)
我想如果你使用未命名的参数:
INSERT INTO testproc (mytext, mytext2) VALUES (?, ?)
订单确实很重要。
我总是使用前一个选项但是:
command.Parameters.Add("?mytext2", "aaaaaaaaaaaaaaaaa")
command.Parameters.Add("?mytext", "bbbb")
不知道AddWithValue()
是否有任何区别更新:刚刚注意到您的参数缺少问号。那将是问题所在。为您的查询和参数添加问号。
答案 1 :(得分:1)
我从MySql bugtracker得到答案:
Reggie Burnett
我不相信这是一个错误。一世 相信你的测试用户没有 看到过程的主体的私人。 请使用以下命令登录MySQL 命令行客户端和测试用户 帐户。做一个“show create procedure” 在你的过程中。如果身体是空的你 需要使用“使用功能 bodies = false“选项并传入 参数的顺序正确。
答案 2 :(得分:0)
MySQL驱动程序不支持命名参数。将忽略参数的名称,并按照将它们放入参数集合的顺序应用它们。