C#将返回的参数显示为标签内的十进制

时间:2018-10-24 16:31:30

标签: c# sql-server ssms dapper

我正在使用返回的参数来显示垃圾箱的重量。

这是我的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();
}

我在哪里错了?

1 个答案:

答案 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);