我正在使用输出参数从存储过程返回值。
存储过程中的声明是:@GrandTtl DECIMAL(19,3) OUT
SELECT
查询是:
SET @GrandTtl = (SELECT TOP 1 Bill_Amount
FROM Tbl_Restaurant_Kitchen_Order_Bill_Details
WHERE Bill_Number = @billno)
例如,select查询返回值4087.67
,然后输出参数值从4088
从SQL Server返回到C#。
以下是调用存储过程的C#代码:
SqlCommand cmd = new SqlCommand("Sp_RestCC_BillDetails", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter OutParam26 = cmd.Parameters.Add("@GrandTtl", SqlDbType.Decimal,19);
da = new SqlDataAdapter(cmd);
con.Open();
da.Fill(ds, "dtRestCC_Items");
con.Close();
objRCCBEL.GrandTtlOut = Convert.ToDecimal(cmd.Parameters["@GrandTtl"].Value);
答案 0 :(得分:14)
您需要将C#参数设置为
SqlParameter parm = new SqlParameter("@GrandTtl", SqlDbType.Decimal);
parm.Precision = 19;
parm.Scale = 3;
parm.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm);
如果您未设置比例,则默认值为0. Ref:SqlParameter.Scale Property
解析Value的小数位数。默认值为0.
答案 1 :(得分:0)
根据Microsoft十进制(p,s)应该适合你。 money和smallmoneyt类型只是十进制的一个子集,精度为4位。所以我认为你的问题来自于绑定到C#中OUT参数的变量类型。