gpt4 book ai didi

c# - 使用 out 参数调用存储过程

转载 作者:可可西里 更新时间:2023-11-01 07:35:30 24 4
gpt4 key购买 nike

我正在尝试调用一个具有一个输入参数和两个输出参数的存储过程。

作为脚本,我这样调用它:

set @MaxPrice = 0.00;
set @MinPrice = 0.00;
set @BSku = '1011001403';
call GetSkuMinMaxPrice(@Sku,@MaxPrice, @MinPrice);

然后我拿回我的价格

这是我用 ef5 调用它的结果:

decimal? minPrice;
decimal? maxPrice;

var skuParameter = new MySqlParameter("?SKU", productToUpload.Sku)
{
Direction = ParameterDirection.Input
};
var maxPriceParameter = new MySqlParameter("?MaxPrice", SqlDbType.Decimal)
{
Direction = ParameterDirection.Output
};
var minPriceParameter = new MySqlParameter("?MinPrice", SqlDbType.Decimal)
{
Direction = ParameterDirection.Output
};
db.Database.ExecuteSqlCommand("call GetSkuMinMaxPrice(?SKU,?MaxPrice,?MinPrice)",
skuParameter,
maxPriceParameter,
minPriceParameter);

minPrice = minPriceParameter.Value as decimal?;
maxPrice = maxPriceParameter.Value as decimal?;

对我来说,这看起来不错,但我从 MySQL 服务器收到此错误消息:OUT or INOUT argument 2 for routine tng.GetSkuBaseMinMaxPrice is not a variable or NEW pseudo-variable in BEFORE trigger .

那么,除了 not using Entity Framework 之外,我需要做什么才能使这项工作正常进行? ?

到目前为止我的一些研究:

最佳答案

这似乎是 MySQL 处理 out 参数的结果。我的解决方法是更改​​存储过程以返回输出参数的选择查询,创建一个公共(public)属性名称与存储过程选择结果的列名称匹配的 POCO。

新的存储过程调用

set @BSku = '1011001403';
call GetSkuPrices(@Sku);

我的 POCO:

private class PriceOutput
{
public decimal? MaxPrice { get; set; }
public decimal? MinPrice { get; set; }
}

我的调用代码:

decimal? minPrice = null;
decimal? maxPrice = null;

var skuParameter = new MySqlParameter("?SKU", productToUpload.Sku);
var basePrices = db.Database.SqlQuery<PriceOutput>("call GetSkuPrices(?SKU)",
skuParameter).FirstOrDefault();
if (basePrices != null)
{
minPrice = basePrices.MinPrice;
maxPrice = basePrices.MinPrice;
}

关于c# - 使用 out 参数调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com