3

我正在使用输出参数从存储过程返回值。返回四舍五入值的存储过程输出参数

在存储过程宣言是:@GrandTtl DECIMAL(19,3) OUT

SELECT查询是:

SET @GrandTtl = (SELECT TOP 1 Bill_Amount 
       FROM Tbl_Restaurant_Kitchen_Order_Bill_Details 
       WHERE Bill_Number = @billno) 

例如,选择查询返回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

您还可以发布调用此过程的C#代码吗? – InSane

回答

10

您需要设置的C#参数作为

  1. 输出 - 很明显,你已经这样做了
  2. 小数类型,具有正确的/兼容规模

SqlParameter parm = new SqlParameter("@GrandTtl", SqlDbType.Decimal); 
parm.Precision = 19; 
parm.Scale = 3; 
parm.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(parm); 

如果您未设置比例尺,则默认值为0.参考号:SqlParameter.Scale Property

值被解析的小数位数。缺省值为0.

+0

这对我感谢。但是我们可以将'Precision'和'Scale'放在源代码行吗?像'SqlDbType.Decimal,19.3);'这样的事情? –

+0

您需要此版本的SqlParameter构造函数:http://msdn.microsoft.com/en-us/library/5a10hy4y.aspx只需按照页面上的C#示例 – RichardTheKiwi

0

根据Microsoft十进制(P,S),应为你工作。金钱和smallmoneyt类型只是精确度为4位的小数的一个子集。所以我认为你的问题来自于绑定到C#中的OUT参数的变量的类型。

+0

我使用十进制设置为outparameter。我也尝试了双倍,但同样的问题仍然存在 –