【问题标题】:How to pass the output parameter for MySQL stored procedure for .net core using Pomelo ORM如何使用 Pomelo ORM 为 .net 核心传递 MySQL 存储过程的输出参数
【发布时间】:2020-02-20 14:00:24
【问题描述】:

这是我在 MySQL 中的 SP

CREATE PROCEDURE `GetMemberID`(
   IN uname     VARCHAR(128),
   OUT MemberID     INT
)
BEGIN  
   SELECT ID INTO MemberID FROM `Member` Where username = uname;    
END

我正在使用 Pomelo ORM 的 .netcore web api 项目调用 SP。

var usernameParam = new MySqlParameter
{ 
   ParameterName = $"@uname",
   DbType = DbType.String,
   Direction = ParameterDirection.Input,
   Value = "test"
 };
var memberIDParam = new MySqlParameter
{ 
   ParameterName = $"@MemberID",
   DbType = DbType.Int32,
   Direction = ParameterDirection.Output
 };

rContext.Database.ExecuteSqlRaw($"Call GetMemberID (@uname=@uname, @MemberID=@MemberID OUT)"
            , usernameParam , memberIDParam);

使用输出参数时出现以下错误。

CommandType 为 Text 时仅支持 ParameterDirection.Input(参数名称:@MemberID)

如何传递输出参数?

【问题讨论】:

    标签: mysql asp.net-core-webapi pomelo-entityframeworkcore-mysql


    【解决方案1】:

    这是a known issue在github,正如mguinness评论的那样

    RelationalCommand.cs 不指定 CommandType,因此默认为 CommandType.Text,这意味着输出参数将不起作用。

    这里有一个解决方法,你可以参考

     using (MySqlConnection lconn = new MySqlConnection(Configuration.GetConnectionString("DefaultConnection")))                
                {
                    lconn.Open();
                    using (MySqlCommand cmd = new MySqlCommand())
                    {
                        cmd.Connection = lconn;
                        cmd.CommandText = "GetMemberID"; // The name of the Stored Proc
                        cmd.CommandType = CommandType.StoredProcedure; // It is a Stored Proc
    
                        cmd.Parameters.AddWithValue("@uname", "sherry");
                        cmd.Parameters.Add("@MemberID", MySqlDbType.Int32);
                        cmd.Parameters["@MemberID"].Direction = ParameterDirection.Output; // from System.Data
                        cmd.ExecuteNonQuery();
                        Object obj = cmd.Parameters["@MemberID"].Value;
                        var lParam = (Int32)obj;    // more useful datatype
    
                    }
                }
    

    参考:How to call stored procedure in Entity Framework Core with input and output parameters using mysql

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 2014-01-30
      • 2018-02-27
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多