Using decimal with specific precision as output parameters with Dapper

前端 未结 3 856
轮回少年
轮回少年 2021-01-13 08:27

I am evaluating Dapper as a replacement for custom and cumbersome code and so far all was very good and promising. But this morning I have stumbled on a problem with Dynamic

相关标签:
3条回答
  • 2021-01-13 09:07

    I had the same issue. I changed my USP or query to pass varhcar(10) and assign varchar(10) to decimal value with success!

    0 讨论(0)
  • 2021-01-13 09:09

    Well, seems that there is no way to resolve this problem (at least none has found a tentative answer) so I put this workaround that I have implemented to continue with the rest of the work.

    var args = new DynamicParameters(new { custID = customerID});
    args.Add("@accnt", dbType: DbType.Single, direction: ParameterDirection.Output);
    args.Add("@avail", dbType: DbType.Single, direction: ParameterDirection.Output);
    
    var results = connection.QueryMultiple("Customer_CalcBalance", args, commandType:CommandType.StoredProcedure);
    decimal account = args.Get<decimal>("@accnt");
    decimal availab = args.Get<decimal>("@avail");
    

    I have passed the output parameters as Single instead of the expected type Decimal.
    In this way, I suppose the SqlParameter.Scale property is set to something different than zero and I could get the decimals digits when I try to read the output parameters.
    If someone has a better solution let me know.

    0 讨论(0)
  • 2021-01-13 09:14

    A little late to the party, but I thought I would mention that this was fixed in 2015. Here is the GitHub issue. Example usage:

    public void Issue261_Decimals()
    {
        var parameters = new DynamicParameters();
        parameters.Add("c", dbType: DbType.Decimal, direction: ParameterDirection.Output, precision: 10, scale: 5);
        connection.Execute("create proc #Issue261 @c decimal(10,5) OUTPUT as begin set @c=11.884 end");
        connection.Execute("#Issue261", parameters, commandType: CommandType.StoredProcedure);
        var c = parameters.Get<Decimal>("c");
        c.IsEqualTo(11.884M);
    }
    
    0 讨论(0)
提交回复
热议问题