2013-01-11 23 views
0

我有一個方法這需要在一些參數,其中有三個DateTime領域(從Web窗體填充)與日期時間字段更新錯誤

方法使用自動生成的TableAdapterDataSet向表中添加新記錄。在聲明之後,我們稱之爲Dataset.Update(Table)聲明以將添加項保留到數據庫中。

雖然此功能幾乎適用於所有情況,但有時會出現錯誤: System.Data.SqlClient.SqlException (0x80131904): The conversion of a date data type to a datetime data type resulted in an out-of-range value The statement has been terminated.

有沒有人有線索可能發生什麼?

回答

2

here

The date datatype can hold dates from Jan 1 of year 1 thru Dec 31, 9999. The datetime datatype can only hold dates from Jan 1, 1753 thru Dec 31, 9999. So you must have dates in your table with values of less than Jan 1, 1753.

由於DateTime是一個結構,因此總是有一個值(DateTime.MinValue),另一種可能的原因是,DateTime無法成功解析。

所以你插入之前,如果DateTime是在SqlDateTime的有效範圍內,你可以檢查:

DateTime darkAge = new DateTime(1111, 1, 1); 
if (darkAge >= SqlDateTime.MinValue.Value && darkAge <= SqlDateTime.MaxValue.Value) 
{ 
    // we're not gettting here since the dark age was before 1753 
} 
+1

感謝您的迅速反應;在我最終解決這個問題前幾分鐘,但你走在正確的道路上。我真的不得不深入SQL語句,因爲這最終是一個SQL問題,而不是C#問題。原來,Insert在正在運行更新語句的表上觸發了一個觸發器,該語句依次使用自定義函數從DateTime獲取日期部分;對於這個特定的實例,手動添加了一個記錄錯誤的日期(0202-12-28而不是2012-12-28),並且試圖提取日期部分的函數拋出錯誤。 – user1012598