c# - 如何从 .net 中的 MySql 过程中选择输出参数

标签 c# mysql .net-core mysqlcommand

假设我们有一个像这样的存储过程

CREATE PROCEDURE CopyValue(IN src INT, OUT dest INT)
BEGIN
    SET dest = src;
END

我想从 .net 应用程序调用它(假设连接等已成功创建)

var sql = "调用 CopyValue(100, @destValue); 选择 @destValue 作为结果;";

上面语句中的字符串在 MySql Workbench 中调用时效果非常好。

但是,显然,当在 .net 中的 MySqlCommand 对象上执行时,这会失败,并显示“MySqlException:必须定义参数'@destValue'”

如何安排此语句以便可以从现有过程捕获输出参数?

注意:我正在运行 MySql 5.6,目前无法升级。

注意直接使用CommandType.StoredProcedure调用过程违反了公司准则。

最佳答案

默认情况下,MySQL Connector/NET 不允许在 SQL 语句中使用用户定义的变量。您可以通过将 AllowUserVariables=true; 添加到连接字符串来放宽此限制。无需修改 SQL 或执行 MySqlCommand 的方式。

有关为什么这是默认设置的信息,您可以阅读有关此的研究 MySqlConnector问题(也具有相同的默认行为,但更好的错误消息会告诉您如何解决问题):https://github.com/mysql-net/MySqlConnector/issues/194

关于c# - 如何从 .net 中的 MySql 过程中选择输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61613461/

相关文章:

c# - 退出 .NET 应用程序的通用方法

c# - 如何使用正则表达式模式替换以下字符串

MySQL 查询 : Selecting rows of linked tables and catching a "bigger" dataset

php - Android App 连接不上mysql数据库

c# - 如何避免在 EF .net 核心中多次查询一个复杂对象

c# - 使用 .NET Core 在 Windows 上执行 cmd.exe 命令 (webpack) 并保留颜色和输出

c# - Nhibernate CommitAsync 是否等待所有异步 CRUD 操作?

c# - 如何通过odata模拟用户

c# - 将SQL信息写入TXT文件

php - 无法在 Laravel 中检索多个 mysql 查询值