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

最佳答案

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

关于c# - 如何在c#中使用SQL Server存储过程数字参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10303459/

10-10 13:47