Как передать выходной параметр для хранимой процедуры MySQL для ядра. net, используя Pomelo ORM - PullRequest
0 голосов
/ 20 февраля 2020

Вот мой SP в MySQL

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

И я звоню SP из проекта .netcore web api, использующего Pomelo ORM.

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);

Я получаю следующая ошибка при использовании выходного параметра.

Только ParameterDirection.Input поддерживается, когда CommandType имеет значение Text (имя параметра: @MemberID)

Как передать выходной параметр?

1 Ответ

1 голос
/ 21 февраля 2020

Это известная проблема в github, как прокомментировал mguinness

RelationalCommand.cs не указывает CommandType, поэтому по умолчанию он имеет значение CommandType.Text, что означает, что выходные параметры победили t работа.

Вот обходной путь, вы можете обратиться к

 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

                }
            }

Ссылка: Как вызвать хранимую процедуру в Entity Framework Core с параметрами ввода и вывода, используя mysql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...