2012-08-03 71 views
0

我有一個例外,而更新的SQL Server 2008 Express的一個datetime柱:超出範圍的異常,同時DATETIME2轉換爲datetime數據類型

eventinfo.StartDateTime = DateTime.ParseExact(start, 
               "MM/dd/yyyy hh:mm tt", 
               CultureInfo.InvariantCulture); 
db.Entry(eventinfo).State = EntityState.Modified; 
db.SaveChanges(); 

例外:

的轉換datetime2數據類型轉換爲日期時間數據類型導致超出範圍值。語句已終止。

任何想法如何避免此異常?

+1

你轉換的價值是多少? – 2012-08-03 18:54:23

+0

顯示如何定義和填充「開始」可能是一個好的開始(沒有雙關語意圖)。 – 2012-08-03 19:07:06

+0

其中一個datetime如下所示:03/08/2012 12:39:00 PM – San 2012-08-03 19:17:26

回答

1

SQL Server的日期/時間數據類型的域如下:

  • datetime2(100毫微秒的精度) 1753-01-01T00:00:00.0 — 9999-12-31T23:59: 59.9999999。
  • datetime(精確到毫秒...那種) 1753-01-01T00:00:00.000 — 9999-12-31T23:59:59.997
  • smalldatetime(1秒精度) 1900-01-01T00: 00:00 — 2079-06-06T23:59:59

的CLR DateTime結構有100納秒精度爲好。自它的時代(0001-01-01T00:00:00)以來,它的計數爲100秒。它的域名是0001-01-01T00:00:00 — 9999-12-31T23:59:59.9999999。

與SQL Server的datetime2相比,您會注意到CLR DateTime的擴展域。

CLR的DateTime的默認值是其時期(0001-01-01T00:00:00)。 1753-01-01T00:00:00之前的任何值都會導致超出範圍的異常。

在所有可能的情況下,您的DateTime值在某種程度上不會被初始化,或者DateTime.ParseExact()獲取交易垃圾數據,成功解析並在1753-01-01之前清空日期/時間。

+0

很高興知道,但我不認爲這是事實。 – San 2012-08-03 19:18:13

+0

對此前的評論感到抱歉。你是對的。我的日期值中的一個表單爲空。即0001-01-01的東西。造成這個問題。非常感謝。我接受了你的答案! – San 2012-08-03 19:43:30

相關問題