2014-10-30 94 views
0

我正在使用Linq-to-sql從WCF服務調用存儲過程。函數簽名是在設計文件中定義爲:錯誤將日期時間轉換爲日期

public int MS_SetTimeKeeperRecord(... global::System.Data.Linq.Mapping.ParameterAttribute(Name="ReportDate", DbType="Date")] System.Nullable<System.DateTime> reportDate, ...) 

傳遞給reportDate的參數是一個C#DateTime類型的變量,並且有一個Date類型的變量沒有這樣的事情。我從電話收到以下錯誤:

日期數據類型爲datetime數據類型的轉換導致超出範圍的值

輸入字段不爲空。

我該如何做這項工作?

回答

0

C#日期時間MinValue是00:00:00.0000000, January 1, 0001.但如果我沒有錯誤SQL最小日期時間值是1753-01-01 00:00:00.000。如果您嘗試傳遞的值小於SQL最小日期時間,則可能會出現此錯誤。此外,SQL最大日期時間爲9999-12-31 23:59:59.997,但C#最大日期時間爲23:59:59.9999999, December 31, 9999

更新:

的錯誤是從日期轉換爲datetime。 SQL中的Datedatetime具有不同的限制,其範圍爲0001-01-01 through 9999-12-31,但日期時間範圍如上所述。所以無論價值是多少,它都超出了datetime類型的範圍,儘管它在您使用的日期中的評論中已經提到。

http://msdn.microsoft.com/en-us/library/bb630352.aspx

http://msdn.microsoft.com/en-us/library/ms187819.aspx

+0

是啊,但他使用'DATE'在SQL Server已經通過12/31/9999一系列1/1/0001 ..... SQL服務器'DATETIME'有一個最小值爲'1/1/1753' - 但**不** **'DATE'或'DATETIME2' .... – 2014-10-30 09:36:18

+0

@marc_s是的,沒有注意到這一點,我更新了答案。謝謝。 – artm 2014-10-30 09:48:38