C#在标签中显示返回参数为十进制

Gre*_*alk 0 c# sql-server ssms dapper

我使用返回的参数来显示bin的重量.

这是我的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
Run Code Online (Sandbox Code Playgroud)

这在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();
}
Run Code Online (Sandbox Code Playgroud)

我在哪里错了?

Jon*_*eet 6

问题在于如何在.NET代码中配置参数:

// Note DbType.Int32
param.Add("@ScrapBinWeightSUM", dbType: DbType.Int32, direction: ParameterDirection.Output);
Run Code Online (Sandbox Code Playgroud)

您只需要使其成为合适的数据类型:

// Note DbType.Decimal
param.Add("@ScrapBinWeightSUM", dbType: DbType.Decimal, direction: ParameterDirection.Output);
Run Code Online (Sandbox Code Playgroud)