从 .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 的支持!!
我正在使用 .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 的支持!!