2012-04-24 18 views
4

私のC#プロジェクトのいずれかで次のSQL Serverストアドプロシージャを使用しています。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になります。しかし、私は、私は25の代わりに、24.9を得ている、私のC#プロジェクトで同じ手順を使用して

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

を次のように@OMarksを呼んでいるとき切り上げデータです。あなたが得る意味

私の問題は、私は25を取得する必要はありません私はあなたのC#ではtbomarks

答えて

5

で24.9を取得したい、あなたはScale(または精度)を指定していないで、あなたのパラメータの、小数点以下はゼロです。

スケールプロパティが明示的に指定されていない場合、データが切り捨てられることがありますし、 サーバー上のデータは

精度とスケールは、出力パラメータのために必要とされるスケール0(デフォルト)に収まらない

+0

私はあなたに同意:)それはストレート研を掲示した後、夕食を得るために私を教えてあげます私の答えを改善するのは嬉しかった;) – MartW

関連する問題