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 回答