使用具有特定精度的小数作为Dapper的输出参数非常好,很有前途。但是今天早上我偶然发现了动态参数的问题并且找不到解决方案。存储过程计算客户的帐户余额和可用余额,以两位十进制输出参数返回其结果。这些小数在Precision=18和Scale=2的存储过程中声明。此程序与当前的标准方法完美配合。但是在Dapper中,我找不到传递这些参数和指定比例的方法,所以我得到的只是十进制值的整数部分。使用(IDbConnectionconnection=OpenConnection()){varargs=newDynamicParameters(new{custID=customerID});//没办法在这里设置比例?args.Add("@accnt",dbType:DbType.Decimal,direction:ParameterDirection.Output);args.Add("@avail",dbType:DbType.Decimal,direction:ParameterDirection.Output);varresults=connection.QueryMultiple("Customer_CalcBalance",args,commandType:CommandType.StoredProcedure);十进制账户=args.Get("@accnt");十进制availab=args.Get("@avail");这里有一个问题,有没有办法传递十进制输出参数的比例?还是有不同的方法来实现我的目标,以获得精确的十进制值?好吧,似乎没有办法解决这个问题(至少没有人找到暂定答案)所以我采用了这个已经实施的解决方法并继续其余的。varargs=newDynamicParameters(new{custID=customerID});args.Add("@accnt",dbType:DbType.Single,direction:ParameterDirection.Output);args.Add("@avail",dbType:DbType.Single,direction:ParameterDirection.Output);varresults=connection.QueryMultiple("Customer_CalcBalance",args,commandType:CommandType.StoredProcedure);十进制账户=args.Get("@accnt");十进制availab=args.Get("@avail");我已将输出参数作为Single而不是预期的Decimal类型传递。这样,我想将SqlParameter.Scale属性设置为非零值,当我尝试读取输出参数时,我可以获得小数位数。如果有人有更好的解决方案,请告诉我。派对有点晚了,但我想我会提到这是在2015年修复的。这是一个GitHub问题。用法示例:publicvoidIssue261_Decimals(){varparameters=newDynamicParameters();parameters.Add("c",dbType:DbType.Decimal,direction:ParameterDirection.Output,precision:10,scale:5);connection.Execute("createproc#Issue261@cdecimal(10,5)OUTPUTasbeginset@c=11.884end");connection.Execute("#Issue261",参数,commandType:CommandType.StoredProcedure);varc=parameters.Get("c");c.IsEqualTo(11.884M);}我有同样的问题。我更改了我的USP或查询以传递varhcar(10)并将varchar(10)分配给十进制值并且它起作用了!以上就是C#学习教程:使用特定精度的十进制作为Dapper的输出参数,分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表作品如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
