1

テーブルにこのようなDECIMAL(10,2)列があり、そのテーブルに行を挿入するストアド プロシージャがあります。その列のパラメーターは次のよう@FuelLiters AS DECIMAL(10, 2),
になります。ado.net を使用して、このストアド プロシージャを呼び出します。その列の sql パラメータは次のようになります

cmd.Parameters.Add(@FuelLiters, SqlDbType.Decimal).Value = fuelLiters; 
(it's decimal value)

私が何をしても、SQLは私の値を変更しているので、小数点以下が2桁になります。FuelLiters = 56 の場合、データベースには 0.56 が保存されます。FuelLiters = 75.4 の場合、データベースには 7.54 が保存されます。

私は何を間違っていますか?

私のsqlパラメータは次のようになりましたが、それでも同じ問題です。

            SqlParameter fuelParam = new SqlParameter();
            fuelParam.SqlDbType = SqlDbType.Decimal;
            fuelParam.ParameterName = "@FuelLiters";                
            fuelParam.Precision = 10;
            fuelParam.Scale = 2;
            fuelParam.Value = fuelLiters ;
            cmd.Parameters.Add(fuelParam);

LE: 精度とスケールが設定された後に値が設定されるように sql パラメータを変更し、ストアド プロシージャを追加しました。

CREATE PROCEDURE [dbo].[SaveFuel] 
    @Id AS INT,
    @RegNumber AS NVARCHAR(50),
    @FuelLiters AS DECIMAL(10, 2)
AS
BEGIN

    INSERT INTO [dbo].[Fuel]
        (
            [Id],       
            [RegNumber],
            [Fuel_litres]         
        )
        VALUES
        (
            @Id,
            @RegNumber,
            @FuelLiters
        )

END

わかりました、私は愚かです、そのフィールドでいくつかの修正を行っていたことに気付かなかったトリガーがあります

4

1 に答える 1

0

SqlParameterの精度とスケールを指定する必要があります。http://msdn.microsoft.com/en-us/library/5a10hy4y.aspxを参照してください

于 2012-10-02T07:00:00.603 に答える