-2147483648 整数类型列中的值,尽管输入掩码

Nul*_*ter -1 sql-server constraint data-integrity

我有一个带有文本框字段的桌面应用程序,它是一个带有掩码值的RadMaskedNumericInput#6,这意味着它只能有 6 位数字。我将它存储在int类型的数据库列中。

当我检查数据库时,列中的某些值是 -2147483648。

我已尝试输入许多值,但无法重现此场景。我只能在此屏幕中输入 6 位数字。我尝试了最大值 999999,但它保持不变。

我只是获取文本框值,将其转换为int,然后通过存储过程将其插入到数据库中。

int value = (int)txtPrice.value;
Run Code Online (Sandbox Code Playgroud)

我试图输入负值以及尝试添加字母,但由于掩码,它不允许我添加除整数以外的任何值。

根据我的理解和知识,只有桌面应用程序可以插入或更新此列的值。

有谁知道为什么会这样?我该如何预防?

Mar*_*ith 7

SQL Server 不会将整数随机设置为 -2147483648。

无论如何,很明显你有一个应该被检查的约束,负价格是不好的。

首先清理具有无效值的行,然后您可以添加检查约束

ALTER TABLE YourTable 
ADD CONSTRAINT CK_CheckPriceInRange CHECK(Price BETWEEN 0 AND 999999);
Run Code Online (Sandbox Code Playgroud)

现在,任何将其设置为无效值的尝试都将失败并显示错误。

你当然可以在你的存储过程中做类似的事情

IF @Price NOT BETWEEN 0 AND 999999
    BEGIN
    RAISERROR('Invalid Price %d',16,1,@Price);
    RETURN;
    END
Run Code Online (Sandbox Code Playgroud)

但是您仍然应该将检查约束作为最后一道防线,因此无论出现无效值,它都会停止。