我正在使用Dapper一段时间,它是一个很棒的ORM映射器。但最近我发现传递小数的问题作为存储过程的输出参数将切断精度并仅返回整数。
var dynamicParam = new DynmaicParam();
dynamicParam.Add("decimalOut",11.25,dbtype.decimal,ParameterDirection.OutPut);
connection.execute("sp1",dynamicParam,commandType.StoredProcedures);
decimal val = dynamicParam.Get<decimal>("decimalOut");
在这种情况下,val将为11,它不会返回11.25,因为它意味着当过程刚刚返回精确输出参数时,它将被传递。
我们使用了一个解决方法,它也返回了精度,
var dynamicParam = new DynmaicParam();
dynamicParam.Add("decimalOut",11.25,dbtype.double,ParameterDirection.OutPut);
connection.execute("sp1",dynamicParam,commandType.StoredProcedures);
decimal val = dynamicParam.Get<dynamic>("decimalOut");
但我仍然认为必须有一种更好的方法来处理小巧精确的问题,因为它是一个令人惊奇的ORM映射器,它支持许多数据类型。感谢更好的工作,并感谢提前
答案 0 :(得分:0)
您需要使用精度和刻度。
示例:
dynamicParam.Add("decimalOut",11.25,dbtype.decimal,ParameterDirection.OutPut, precision: 18, scale: 2);