我正在使用返回的参数来显示垃圾箱的重量。
这是我的SQL Server存储过程;
ALTER PROCEDURE [dbo].[SumScrapBinWeight]
@ScrapBinNumber INT,
@ScrapBinWeightSUM DECIMAL(8,2) OUTPUT
AS
BEGIN
SELECT @ScrapBinWeightSUM = SUM(CalculatedWeightLbs)
FROM ScrapData
WHERE ScrapBinNumber = @ScrapBinNumber
END
这在SSMS中有效,并返回期望值,当我在C#应用程序中调用它时出现错误
在最后一行上发布无效
。这让我感到很困惑,如果我将Decimal
更改为Int
,它不会引发错误,但是不会显示我想要显示的小数。
using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MfgDataCollector"].ToString()))
{
DynamicParameters param = new DynamicParameters();
param.Add("@ScrapBinNumber", lbl_TicketNumber.Text);
param.Add("@ScrapBinWeightSUM", dbType: DbType.Int32, direction: ParameterDirection.Output);
conn.Execute("SumScrapBinWeight", param, commandType: CommandType.StoredProcedure);
lbl_BinWeight.Text = param.Get<decimal>("@ScrapBinWeightSUM").ToString();
}
我在哪里错了?
答案 0 :(得分:6)
问题在于您如何在.NET代码中配置参数:
// Note DbType.Int32
param.Add("@ScrapBinWeightSUM", dbType: DbType.Int32, direction: ParameterDirection.Output);
您只需要设置适当的数据类型即可
// Note DbType.Decimal
param.Add("@ScrapBinWeightSUM", dbType: DbType.Decimal, direction: ParameterDirection.Output);