命名参数顺序对MySql .Net数据提供者有意义吗?

时间:2010-07-14 10:23:49

标签: c# .net mysql

我发现在我的项目中,命名参数的顺序有意义。

我称这个程序为

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数据库帐户调用过程

3 个答案:

答案 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驱动程序不支持命名参数。将忽略参数的名称,并按照将它们放入参数集合的顺序应用它们。