2014-10-30 98 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