从 .NET 数据库上下文调用 MySQL 存储过程会引发"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:"只能存储MySqlParameter对象">

那么,试图告诉我的错误是什么?我该如何修复它?

SqlParameter用于SqlClient,即SQL Server。您需要new MySqlParameter(连接、命令、参数和读取器类型都是特定于提供程序的(。或者更好:让连接创建参数,或者使用一个工具来处理ADO.NET内部。

好吧,当人们知道它时,它看起来相对简单:

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

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

非常感谢你的支持@Marc!!

最新更新