使用EF Core中的Database.ExecuteSqlCommand从MySql存储过程读取输出参数

时间:2019-03-04 20:45:27

标签: c# mysql entity-framework

我在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
        }
    }

0 个答案:

没有答案