开发者

Named parameters order has sense for MySql .Net data provider?

I found that in my project order of named parameter has sense.

I call this procedure

CREATE PROCEDURE `test`.`TestProc` (
in myText varchar (5),
in myText2 varchar (100)
)
BEGIN

END

If I add parameters like this:

    command.CommandText = "testProc";
    command.CommandType = System.Data.CommandType.StoredProcedure;
    command.Parameters.AddWithValue("myText2", "aaaaaaaaaaaaaaaaa");
    command.Parameters.AddWithValue("myText", "bbbb");

I get "Data too long" exception. Also I can't reproduce this in test project.

Any thoughts?


I found the cause. Looks like bug in MySql .Nat Data Provider. To reproduce the bug you need to call this not under the root user.

开发者_如何学JAVAConclusion: MySql.Data version 6.2.3.0. Order of named parameter has sense If you call procedure with non root db account


The name of the parameters don't have to match the columns but the placeholders:

INSERT INTO testproc (mytext, mytext2) VALUES (?mytext, ?mytext2)

I suppose if you use unnamed parameters:

INSERT INTO testproc (mytext, mytext2) VALUES (?, ?)

the order does matter.

I always used the former option but with:

command.Parameters.Add("?mytext2", "aaaaaaaaaaaaaaaaa")
command.Parameters.Add("?mytext", "bbbb")

Don't know if it makes any difference to AddWithValue()

Update: Just noticed that your parameters are missing a questionmark. That will be the problem. Add a questionmark to both, your query and your parameters.


Answer that I get from MySql bugtracker:

Reggie Burnett

I don't believe this is a bug. I believe your test user doesn't have the privs to see the body of the proc. Please login to MySQL using the commandline client and the test user account. Do a "show create procedure" on your proc. If the body is null you need to use the "use function bodies=false" option and pass in the parameters in the right order.


The MySQL driver doesn't support named parameters. The name of the parameters are ignored, and they are applied in the order that you put them in the parameter collection.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜