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

kas*_*hif 4 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
Run Code Online (Sandbox Code Playgroud)

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

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

我得到25而不是24.9这是四舍五入的数据.

我的问题是我不想得到25.我希望得到24.9的tbomarks

zim*_*nen 7

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

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


Mar*_*rtW 5

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

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

输出参数需要精度和比例