假设我们有一个像这样的存储过程
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/