Sql-Server

-2147483648 整數類型列中的值,儘管輸入遮罩

  • September 14, 2017

我有一個桌面應用程序,其文本框欄位是帶有屏蔽值的*RadMaskedNumericInput*#6,這意味著它只能有 6 位數字。我將它儲存在類型的數據庫列中int

當我檢查數據庫時,列中的一些值是 -2147483648。

我嘗試輸入許多值,但無法重現這種情況。我只能在這個螢幕上輸入 6 位數字。我嘗試了最大值 999999,但它保持不變。

我只是獲取文本框值,將其轉換為int,然後通過儲存過程將其插入數據庫。

int value = (int)txtPrice.value;

我嘗試輸入負值以及嘗試添加字母,但由於遮罩,它不允許我添加除整數以外的任何值。

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

有誰知道為什麼會這樣?我該如何預防?

SQL Server 不會將整數隨機設置為 -2147483648。

無論如何,很明顯你有一個應該被檢查的約束,負價格是不好的。

首先清理具有無效值的行,然後您可以添加檢查約束

ALTER TABLE YourTable 
ADD CONSTRAINT CK_CheckPriceInRange CHECK(Price BETWEEN 0 AND 999999);

現在,任何將其設置為無效值的嘗試都將失敗並出現錯誤。

你當然可以在你的儲存過程中做類似的事情

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

但是您仍然應該將檢查約束作為最後一道防線,因此無論無效值出現如何,它都會被停止。

引用自:https://dba.stackexchange.com/questions/138456