如何使用 Pomelo ORM 为 .net core 的 MySQL 存储过程传递输出参数
How to pass the output parameter for MySQL stored procedure for .net core using Pomelo ORM
这是我在 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);
使用输出参数时出现以下错误。
Only ParameterDirection.Input is supported when CommandType is Text (parameter name: @MemberID)
如何传递输出参数?
a known issue 在 github 中,正如 mguinness 评论的那样
RelationalCommand.csdon't specify CommandType so it'll default to CommandType.Text which means output parameters won't work.
这里有一个解决方法,你可以参考
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
}
}
参考:
这是我在 MySQL
中的 SPCREATE 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);
使用输出参数时出现以下错误。
Only ParameterDirection.Input is supported when CommandType is Text (parameter name: @MemberID)
如何传递输出参数?
a known issue 在 github 中,正如 mguinness 评论的那样
RelationalCommand.csdon't specify CommandType so it'll default to CommandType.Text which means output parameters won't work.
这里有一个解决方法,你可以参考
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
}
}
参考: