2012-05-08 70 views
4

SqlException:將datetime2數據類型轉換爲datetime數據類型導致超出範圍的值。如何修復「SqlException:將datetime2數據類型轉換爲日期時間數據類型導致超出範圍值。」

我的代碼是這樣的:

 using (var contxt = new realtydbEntities()) 
     { 
      var status = GetStatus(); 

      var repIssue = new RepairIssue() 
      { 
       CreaterId = AuthorId, 
       RepairItemDesc = this.txtDescription.Text, 
       CreateDate = DateTime.Now,//here's the problem 
       RepairIssueStatu = status 
      }; 

      contxt.AddObject("RepairIssues", repIssue); 
      contxt.SaveChanges(); 
     } 

CREATEDATE屬性映射到列哪種類型SMALLDATETIME

如何讓這段代碼運行?

+0

[將datetime2數據類型轉換爲datetime數據類型導致超出範圍?](https://stackoverflow.com/questions/7386360/the-conversion-of-a- datetime2-data-type-to-a-datetime-data-type-result-a-o) –

回答

2

問題的根源在於C#DateTime對象比SQL的smalldatetime類型「大」。這裏有區別的很好的概述:http://www.karaszi.com/SQLServer/info_datetime.asp

所以真的是你的選擇是:

  1. 變化從SMALLDATETIME列類型爲日期時間(或DATETIME2)
  2. 使用EF的相反,構造自己的SQL命令(你可以使用SqlDateTime)
+3

這並不能解釋爲什麼'DateTime.Now'不適合SmallDateTime。它的大小並不是太大,而是關於它可以存儲的範圍和精度/準確度。 'DateTime.Now'應該始終是SmallDateTime字段的有效值(除非您將PC時鐘設置爲300年),但是,我正在嘗試保存'DateTime.Now'值爲{ 2013年4月10日12:49:00}到SQL SmallDateTime字段中。令人沮喪的是,我無法在SO上的任何地方找到正確的答案。 –

+0

@TrueBlueAussie不允許從「較大」類型到「較小」類型的自動轉換,因爲信息可能在轉換中丟失。無論「大」意味着「能容納更大的數字」還是意味着「能夠保持更高的精度」,這也是一樣。 C#假設那些小數秒是重要的,除非你明確地說他們不是(例如,明確的演員)。 – GrandOpener

+0

@GrandOpener:對不起,你誤解了我的評論。我只是想答案*應該解釋爲什麼dateTime.Now不適合SmallDateTime *。我沒有要求解釋:) –

1

SqlDateTime將允許你做你需要的東西。

+0

如果你按照你的建議從DateTime創建一個'SqlDateTime',那麼使用它的'Value'作爲EF更新(因爲EF屬性是一個DateTime),你仍然會得到完全相同的錯誤(如果你有這個錯誤)。這個答案對於EF來說似乎不正確(問題的關鍵),除非你能澄清這是如何解決問題的。 –

5

我有同樣的例外,但它是因爲一個不可空的datetime屬性取最小日期時間值。這在DB上並不是很短的時間,但C#的最短日期時間超過了SQL的最短日期時間限制。 解決方案很明顯,正確設置日期時間。 順便說一句,代碼是不是我的,這就是爲什麼我不知道那個屬性:)

0

我得到這個錯誤,因爲我已經添加一個日期時間列到我的SQL表和應用程序沒有刪除舊數據。我發現我可以更新新記錄;但是,在添加字段之前的表中的記錄在嘗試更新其中的一個時會拋出此錯誤。

相關問題