如何在c#中使用SQL Server存储过程数值参数

时间:2012-04-24 18:02:59

标签: c# sql

我在我的一个C#项目中使用以下SQL Server存储过程。

create procedure [dbo].[TestRecordSelect]
@OMarks numeric(3,1) output
as 
begin
select @OMarks = isnull(sum(cast(OMarks as numeric(3,1))),0) from Marks 
end

我在SQL Server中执行该过程时得到了所需的结果,即24.9。但是当我在我的C#项目中使用相同的过程并按如下方式调用@OMarks

cmd.Parameters.Add("@OMarks", SqlDbType.Decimal).Direction = ParameterDirection.Output;
tbomarks.Text = cmd.Parameters["@OMarks"].Value.ToString();  

我得到25而不是24.9这是向上舍入的数据。

我的问题是我不想得到25.我想在tbomarks中得到24.9

2 个答案:

答案 0 :(得分:7)

SqlParameter param = new SqlParameter("@OMarks", SqlDbType.Decimal);
param.Direction = ParameterDirection.Output;
param.Precision = 3;
param.Scale = 1;
cmd.Parameters.Add(param);

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.scale.aspx

答案 1 :(得分:5)

在您的C#中,您没有指定参数的Scale(或精度),这意味着您将获得零小数位。

  

如果未明确指定Scale属性且数据上的数据,则可能会截断数据   服务器不适合比例0(默认值)

     

输出参数需要精度和比例