C# 使用RepoDB时,如何将参数传递给MySQL存储过程
我尝试在MySQL上调用不带out参数的存储过程 我对存储过程的定义如下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
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