Sql-Server
-2147483648 整數類型列中的值,儘管輸入遮罩
我有一個桌面應用程序,其文本框欄位是帶有屏蔽值的*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
但是您仍然應該將檢查約束作為最後一道防線,因此無論無效值出現如何,它都會被停止。