---Error Message----
1.INSERT INTO SQL SERVER時引發錯誤,SQL資料類型 smalldatetime
將 varchar 資料類型轉換成 smalldatetime 資料類型時,產生超出範圍的值
2.
轉換 expression 到資料型別 smalldatetime 時發生算術溢位錯誤
轉換 nvarchar 到資料型別 smalldatetime 時發生算術溢位錯誤
,etc...
資料庫欄位型態為 datetime or smalldatetime
程式 insert 時,必須注意日期規則是否溢位
Ex:
一月份最大日期為31日
此時 insert 32 便會 error
解決辦法(1)--
其實用 ISDate() 最準
接受輸入格式
(1)12-24 (自動加入今年)
(2)12-01-01 , 2013-1-1,
(3)2011/1/1 , 2012/01/12
(4)12/1-01
在 insert 前判別規則
ex: 正規化表示法
If Not Regex.IsMatch(C.Text.Trim, "^((19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01]))*$") Then
'do something
End
解決辦法(2)--
將資料庫 欄位型態 改為 varchar / nvarchar
溢位是因為期中有NULL值或空白值
解決辦法(3)--
WHERE下條件
where date <> "" and date is not null 或是 where isdate(date)
NOTE:
一、IsDate() 有效日期的範圍是介於西元 100 年 1 月 1 日與西元 9999 年 12 月 31 日之間;其有效範圍會因作業系統而有所差異。
二、
smalldatetime 有效時間範圍 1900/1/1~2079/6/6
datetime 有效時間範圍 1753/1/1~9999/12/31
所以如果不用到太遠的日期範圍,就會使用smalldatetime。
更關鍵的差別,smalldatetime只精準到分,而datetime可精準到3.33毫秒。
參考1
參考2
參考3
沒有留言:
張貼留言