4

我在我的一个 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

4

2 回答 2

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

于 2012-04-24T18:14:38.520 回答
5

在您的 C# 中,您没有指定参数的比例(或精度),这意味着您得到零个小数位。

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

输出参数需要精度和比例

于 2012-04-24T18:11:28.853 回答