從 datetime2 數據類型到 datetime 數據類型的轉換產生一個超出範圍的值

  1. 給這些字段一個值(不管它是否在數據庫設置了默認值),並且日期要大於1753年1月1日,這是最簡單的方法。
  2. 將數據庫類型修改爲datetime?類型,也就是說允許爲空。
  3. 修改數據庫字段類型爲datetime2類型,前提是數據庫要支持該類型。
  4. 在C#中用new DateTime(year,month,day,hour,minute,second)來限制精度,原因之後會在datetime2和datetime的區別中提到。
  5. 這個方法不太推薦,將model的edmx中的providerManifestToken設置成2005,這樣ef就默認轉化成datetime。

datetime2和datetime的區別:

官方MSDN對於datetime2的說明:定義結合了 24 小時制時間的日期。 可將 datetime2 視作現有 datetime 類型的擴展,其數據範圍更大,默認的小數精度更高,並具有可選的用戶定義的精度。

這裏值的注意的是datetime2的日期範圍是"0001-01-01 到 9999-12-31"(公元元年 1 月 1 日到公元 9999 年 12 月 31 日)。

而datetime的日期範圍是:”1753 年 1 月 1 日到 9999 年 12 月 31 日“。這裏的日期範圍就是造成“從 datetime2 數據類型到 datetime 數據類型的轉換產生一個超出範圍的值”這個錯誤的原因。

 

DateTime字段類型對應的時間格式是yyyy-MM-dd HH:mm:ss.fff,3個f,精確到1毫秒(ms),示例2014-12-0317:06:15.433。
 
DateTime2字段類型對應的時間格式是yyyy-MM-dd HH:mm:ss.fffffff,7個f,精確到0.1微秒(μs),示例2014-12-0317:23:19.2880929。
 
如果用SQL的日期函數進行賦值,DateTime字段類型要用GETDATE(),DateTime2字段類型要用SYSDATETIME()。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章