問題描述
在平時使用代碼操作SQL Server數據庫時,會遇到給日期格式的字段賦值,然後插入或者更新到數據庫中等。
平時使用的日期都是比較靠近現在的時間,所以一般不會遇到問題。但是有時候,比如在C#中的DateTime類中
DateTime.MinValue
1/1/0001 12:00:00 AM
最小值是DateTime的默認值
DateTime.MaxValue
12/31/9999 11:59:59 AM
如果給某個字段賦值的值,使用的是DateTime的默認值,那麼在操作數據庫時,就會出現下面的錯誤:
The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.
如果是通過string 賦值,會遇到下面的問題:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.
大致意思就是:這個值不在數據庫字段類型的範圍內。
解決思路
在msdn上找到了SQL Server的datetime的相關文檔
通過官網資料,就能知道,該字段用了什麼數據格式,它的範圍就確定了,後面的操作,應該在要求的範圍內,就可以解決問題。
總結如下
datetime 的範圍是:1753-01-01 00:00:00 到 9999-12-31 23:59:59.997
datetime2 的範圍是:0001-01-01 00:00:00 到 9999-12-31 23:59:59.9999999
date 的範圍是:0001-01-01 到 9999-12-31
smalldatetime 的範圍是:1900-01-01 00:00:00 到 2079-06-06 23:59:59