c# - 使用 OUT 参数调用 MySQL 过程

标签 c# mysql stored-procedures ado.net out-parameters

我想从 mysql 中获取最后插入的行的 ID,但我遇到了某种未处理的异常。 Visual Studio 给我这个错误:

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() 上获取它;

最佳答案

我添加了这些行,现在可以使用了。

cmd.CommandText = "pr_VendegFelvetele";
cmd.CommandType = CommandType.StoredProcedure;

此链接有帮助: https://dev.mysql.com/doc/connector-net/en/connector-net-programming-stored-using.html

关于c# - 使用 OUT 参数调用 MySQL 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62972478/

相关文章:

c# - 将信息发送到数据库中的特定列 C#

MySQL - 从两列中查找重复数据

azure - 如何通过azure Portal在cosmos db中保存并执行存储过程?

php - MySQL包含变量

mysql - 数据库设计,创建其他表,或添加类别字段?

php - 从 HTML 表中的存储过程 MySql PHP 获取结果

mysql - 更新存储过程中的表更新所有行

c# - 根据网格宽度调整 DataGridView 列的大小

c# - 将 Windows 窗体单元测试迁移到 WPF

c# - Windows Phone 8.1 页面导航