C# 使用RepoDB时,如何将参数传递给MySQL存储过程

C# 使用RepoDB时,如何将参数传递给MySQL存储过程,c#,mysql,.net,C#,Mysql,.net,我尝试在MySQL上调用不带out参数的存储过程 我对存储过程的定义如下 CREATE PROCEDURE 'GetPerson' ( IN '_accountId' bigint, OUT '_returnValue' int) BEGIN SELECT AccountId, Age from Person where AccountId = _accountId ; SET _returnValue = 0; END 我使用RepoDB编写代码 public se

我尝试在MySQL上调用不带out参数的存储过程

我对存储过程的定义如下

CREATE PROCEDURE 'GetPerson' ( IN '_accountId' bigint, OUT '_returnValue' int)

BEGIN
    SELECT AccountId, Age from Person where AccountId = _accountId ;
    SET _returnValue = 0;
END
我使用RepoDB编写代码

    public sealed class MyCustomMySQLDbSetting : BaseDbSetting
    {
        public MyCustomMySQLDbSetting()
            : base()
        {
            IsDirectionSupported = true;
        }
    }

DbSettingMapper.Add(typeof(MySqlConnection), new MyCustomMySQLDbSetting(), true);

using (var connection = MySqlClientFactory.Instance.CreateConnection())
{
    connection.ConnectionString = dbConnectionString;
    var param = new Dictionary<string, object>
                {
                    { "_accountId", 10 },
                    { "_returnValue", "0" },
                };

    var person = connection.ExecuteQuery<Person>(
        "GetPerson",
        param,
        commandType: System.Data.CommandType.StoredProcedure);
}
我试过下面的param,得到了同样的结果

var param = new Dictionary<string, object>
{
    { "_accountId", 10 },
    { "@_returnValue", 0 },
};
var param=新字典
{
{u accountId',10},
{“@_returnValue”,0},
};
有没有办法通过RepoDB将参数传递给存储过程?

自,库开始支持该对象。它使您能够从数据库中检索
输出
参数的值

假设您有下面的存储过程

CREATE PROCEDURE [dbo].[sp_Multiply]
(
    @Value1 DOUBLE
    , @Value2 DOUBLE
    , @Output DOUBLE OUT
)
AS
BEGIN
    SET @Output = @Value1 * @Value2;
END
然后,你可以这样称呼它

使用(var连接=新的SqlConnection(connectionString))
{
var output=新的DirectionalQueryField(“输出”,typeof(double),ParamDirection.output);
var param=new[]
{
新查询字段(“值1”,100),
新查询字段(“值2”,200),
输出
};
var result=connection.ExecuteNonQuery(“sp_Multiply”,参数,commandType:commandType.storedProcess);
//在此处使用“输出”,如下所示
var value=output.GetValue();//或者,您也可以像'output.parameter.value'一样访问参数本身`
}

否,RepoDB不允许输出参数。也许这是我们可以考虑的未来,如果它成为一个普遍的使用案例。但问题是,您试图在“\u returnValue”输出参数中返回什么?如果这是一个新的标识id或其他什么,只需通过“select LAST_INSERT_id();”选择返回值即可并使用
var id=ExecuteScalar(sp_name)
方法。我尝试将传统的Dapper代码更改为RepoDB,有许多sp使用_returnValue作为sp成功代码或受影响的行,这取决于上下文。谢谢你的回复。
CREATE PROCEDURE [dbo].[sp_Multiply]
(
    @Value1 DOUBLE
    , @Value2 DOUBLE
    , @Output DOUBLE OUT
)
AS
BEGIN
    SET @Output = @Value1 * @Value2;
END