У меня есть следующая хранимая процедура в MySQL, которая содержит выходной параметр. Хранимая процедура работает при выполнении на сервере БД.
CALL `db`.`usp_AgentTransferPortalsDisplayed`(@val);
select @val
Я пытаюсь вызвать эту хранимую процедуру с помощью Entity Framework Core, используя следующее.
var count = ctx.Database.ExecuteSqlCommand("CALL db.usp_AgentTransferPortalsDisplayed(@output);",
new MySqlParameter("@output", MySqlDbType.Int32));
Я получаю следующую ошибку:
MySql.Data.MySqlClient.MySqlException has been thrown: "OUT or INOUT argument 1 for routine db.usp_AgentTransferPortalsDisplayed is not a variable or NEW pseudo-variable in BEFORE trigger"
Я не уверен, что использую правильный синтаксис, так как это выходной параметр или нет.
Я также пробовал так:
var outParam = new MySqlParameter();
outParam.Direction = ParameterDirection.Output;
outParam.DbType = DbType.Int32;
var count = ctx.Database.ExecuteSqlCommand("CALL db.usp_AgentTransferPortalsDisplayed(@outParam);", outParam);
MySql.Data.MySqlClient.MySqlException: "Fatal error encountered during command execution." ---> System.Exception {MySql.Data.MySqlClient.MySqlException}: "Parameter '@outParam' must be defined." at at
ОБНОВИТЬ
На основе ссылок, которые предложил Мэтт; Я смог сделать это, используя этот синтаксис:
using (MySqlConnection lconn = new MySqlConnection(conn))
{
lconn.Open();
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = lconn;
cmd.CommandText = "db.usp_AgentTransferPortalsDisplayed"; // The name of the Stored Proc
cmd.CommandType = CommandType.StoredProcedure; // It is a Stored Proc
cmd.Parameters.AddWithValue("@result", MySqlDbType.Int32);
cmd.Parameters["@result"].Direction = ParameterDirection.Output; // from System.Data
cmd.ExecuteNonQuery(); // let it rip
Object obj = cmd.Parameters["@result"].Value;
var lParam = (Int32)obj; // more useful datatype
}
}
@ Matt.G спасибо за ссылку, Мэтт; Я только что попробовал таким образом и получил другую ошибку. Я обновил свой исходный пост, чтобы включить это.
взгляните на это
@Matt.G спасибо, Мэтт; хотя я не смог использовать синтаксис EF; использование более традиционного подхода сработало. Спасибо вам за ссылки.
Существует известная проблема с MySqlParameter с Direction=Output не работает для текстовых команд.





проверьте этот отвечать