我在我的一个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
答案 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(默认值)
输出参数需要精度和比例