使用 OUT 参数调用 MySQL 过程
Posted
技术标签:
【中文标题】使用 OUT 参数调用 MySQL 过程【英文标题】:Call MySQL procedure with OUT parameter 【发布时间】:2020-11-08 08:27:26 【问题描述】:我想从 mysql 获取最后插入的行的 id,但是我得到了某种未处理的异常。视觉工作室给了我这个错误:
MySql.Data.MySqlClient.MySqlException: 'OUT or INOUT argument 9 for routine test.pr_VendegFelvetele is not a variable or NEW pseudo-variable in BEFORE trigger'.
mysql代码:
CREATE PROCEDURE pr_VendegFelvetele(
IN uvezNev VARCHAR(75),
IN ukerNev VARCHAR(75),
IN uemail VARCHAR(255),
IN utel INT(15),
IN ucim VARCHAR(75),
IN uiranyito INT(5),
IN uvaros VARCHAR(55),
IN uorszag VARCHAR(45),
OUT uvendegID INT(11)
)
BEGIN
INSERT INTO `vendeg`(`vezNev`, `kerNev`, `email`, `tel`, `cim`, `iranyito`, `varos`, `orszag`)
VALUES (uvezNev, ukerNev, uemail, utel, ucim, uiranyito, uvaros, uorszag);
SET uvendegID = LAST_INSERT_ID();
END
顺便说一句,mysql 程序运行良好。
c#代码:
String query = "CALL pr_VendegFelvetele(@uvezNev, @ukerNev, @uemail, @utel, @ucim, @uiranyito, @uvaros, @uorszag, @uvendegID);";
MySqlCommand cmd = new MySqlCommand(query, Con);
cmd.Parameters.AddWithValue("@uvezNev", uvezNev);
cmd.Parameters["@uvezNev"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@ukerNev", ukerNev);
cmd.Parameters["@ukerNev"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@uemail", uemail);
cmd.Parameters["@uemail"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@utel", utel);
cmd.Parameters["@utel"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@ucim", ucim);
cmd.Parameters["@ucim"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@uiranyito", uiranyito);
cmd.Parameters["@uiranyito"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@uvaros", uvaros);
cmd.Parameters["@uvaros"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@uorszag", uorszag);
cmd.Parameters["@uorszag"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@uvendegID", MySqlDbType.Int32);
cmd.Parameters["@uvendegID"].Direction = ParameterDirection.Output;
Con.Open();
cmd.ExecuteNonQuery();
MessageBox.Show(cmd.Parameters["@uvendegID"].Value.ToString());
我在 cmd.ExecuteNonQuery(); 上得到它;
【问题讨论】:
dev.mysql.com/doc/connector-net/en/… , codeproject.com/Articles/36484/… - 请参阅 CommandType 用法。 谢谢!我需要添加这些行,现在就像一个魅力。 ``` cmd.CommandText = "pr_VendegFelvetele"; cmd.CommandType = CommandType.StoredProcedure; ``` 酷,考虑将其添加为答案 - 包括链接等!可以回答自己的问题(尤其是在没有其他人站出来的情况下):D 【参考方案1】:我添加了这些行,现在它可以工作了。
cmd.CommandText = "pr_VendegFelvetele";
cmd.CommandType = CommandType.StoredProcedure;
此链接帮助: https://dev.mysql.com/doc/connector-net/en/connector-net-programming-stored-using.html
【讨论】:
也许您可以将您的解决方案标记为答案,这样可以帮助其他人快速找到解决方案。以上是关于使用 OUT 参数调用 MySQL 过程的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JDBC4PreparedStatement 与期望 OUT 参数的 MySQL 存储过程一起使用?
MySQL 存储过程传参之in, out, inout 参数用法
MySQL-进阶18 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'