情况
正如问题所述,我有一个程序,输入一个值后,该值将发送到我的存储过程,计算 80% 和 20%,并通过 out 参数返回。
问题
问题是,尽管我认为我的代码应该可以工作,但在计算 80% 和 20% 时并没有返回小数位。我已经查看了代码,并且在 SQL 管理器中运行代码工作正常,但我只是无法将正确的值获取到我的 C# 应用程序中。
C# 代码
decimal fl_covByA;
decimal fl_covByB;
using (Bookstore_DBEntities x = new Bookstore_DBEntities())
{
ObjectParameter covByIndiv = new ObjectParameter("covByIndiv", typeof(decimal));
ObjectParameter covByIns = new ObjectParameter("covByIns", typeof(decimal));
x.cal_InsCoverage(cla_bookDetails.cost,covByIndiv, covByIns); //Breakpoint shows values without decimals
fl_covByB = (decimal)covByIndiv.Value;
fl_covByA = (decimal)covByIns.Value;
}
存储流程
CREATE PROCEDURE [dbo].[cal_InsCoverage]
@cost numeric(18,2),
@covByIndiv numeric(18,2) OUT,
@covByIns numeric(18,2) OUT
AS
SELECT @covByIndiv=(@cost*20)/100,@covByIns=(@cost*80)/100
GO
如果我传递的成本为 100.25,我会在查询结果中得到 20.05 80.20,但根据我的断点,我会得到 20 和 80。因此,我们将不胜感激。
问候。
最佳答案
每当您将小数参数传递给 SQL Server 存储过程时,您都必须设置该参数的精度和小数位数,否则它将默认为小数位数 0,从而去掉小数部分。您的 ObjectParameter 类可能具有 Precision 和 Scale 属性,或者您可以搜索“如何在 ObjectParameter 上设置精度和比例”并找到正确的方法。
关于c# - SQL 存储过程未返回小数位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400188/