我在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:“例程db.usp_AgentTransferPortalsDisplayed的OUT或INOUT参数1不是触发器之前的变量或NEW伪变量”
我不确定是否使用正确的语法,因为这不是输出参数。
我也尝试过这种方式:
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:“命令执行期间遇到致命错误。” ---> System.Exception {MySql.Data.MySqlClient.MySqlException}:“必须定义参数'@outParam'。” 在
更新
根据马特建议的链接;我能够使用以下语法做到这一点:
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
}
}