4

C# プロジェクトの 1 つで、次の 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が得られます。@OMarksしかし、C# プロジェクトで同じ手順を使用し、次のように呼び出すと、

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

切り上げられたデータである 24.9 ではなく 25 を取得しています。

私の問題は、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 に答える