从 .NET 数据库上下文调用 MySQL 存储过程引发 "Only MySqlParameter objects may be stored'"

Calling MySQL Stored Procedure from .NET DB Context throws "Only MySqlParameter objects may be stored'"

我正在使用 .NET Core 5 DBContext 访问 MYSQL 存储过程以使用以下代码获取结果:

var param = new SqlParameter("@word", word);
            var result = _context.History.FromSqlRaw("EXEC GETHISTORY @word", param).ToList();
            if (result != null)
            {
                retval = (IEnumerable<HistoryDM>)result;
            }

然而它抛出以下异常,

MySql.Data.MySqlClient.MySqlException: 'Only MySqlParameter objects may be stored'

那么,试图告诉我的错误是什么,我该如何解决?

SqlParameter 用于 SqlClient,即 SQL 服务器。您需要一个 new MySqlParameter(连接、命令、参数和 reader 类型都是特定于提供者的)。或者更好:要求连接创建参数,或者使用可以为您处理 ADO.NET 内部结构的工具。

好的,看来一会就比较简单了:

Object result = _context.History.FromSqlInterpolated($"CALL ADDHISTORY ({word})").ToList();

因此,同时使用了 CALL(而不是 EXEC)和参数周围的括号,这也类似于 MySQL 本机调用。这里没有黑魔法。

非常感谢@Marc 的支持!!