1/1/0001 12:00:00 AM不更新SQL 2008日期字段

时间:2009-11-06 17:45:20

标签: c#

这很奇怪,令我头疼。我查看了我的代码,但没有看到任何导致它的逻辑错误。

当我将其添加为我的conn.AddParam中的值时,我的类中设置为我的birthDate DateTime变量的任何其他日期都有效,但是当我发送回1/1/0001 12:00:00 AM(由我发送时)将它设置为MinValue)到SQL 2008的Date字段,它仍然是我在该字段的数据库中设置为null的默认值:

conn.AddParam("@birthDate", birthDate);

birthDate是DateTime类型。它设置为DateTime.MinValue;我不明白为什么不接受这个。

5 个答案:

答案 0 :(得分:4)

我可能不理解这个问题,但我相信1753年1月1日是SQL Server支持的最早日期。

Source

答案 1 :(得分:2)

如果您需要返回那么远,请使用DateTime2。它允许您返回到1/1/0001 http://technet.microsoft.com/en-us/library/bb677335.aspx

答案 2 :(得分:0)

只是一个猜测,但它可能是由一个投射问题引起的。由于birthDate变量具有时间组件(12:00 AM),因此SQL可能会在插入Date字段之前将其强制转换为DateTime。由于1/1/0001是无效的SQL DateTime,因此可能存在问题。请尝试将@birthDate参数设置为birthDate.Date。

答案 3 :(得分:0)

在SQL Server 2008中:

日期数据类型: - 将允许您仅存储日期(YYYY-MM-DD)以及范围0001-01-01至9999-12-31。它精确到1天

时间数据类型:以hh:mm:ss:nnnnnnn格式存储,范围为00:00:00.0000000至23:59:59:9999999,精确到100纳秒

DateTime2:格式为YYYY-MM_DD hh:mm:ss:nnnnnnnm,范围为0001-01-01 00:00:00.0000000至999-12-31:59 9999999,精度为100纳秒

DateTimeOffset:它包含跟踪时区的其他信息。格式为YYYY-MM-DD hh:mm:ss [.nnnnnnn] [+/-] hh:mm,范围为0001-01-01 00 :00:00.000000至9999-12-31 23:59:50.9999999.storage 8 yo 10 bytes。

答案 4 :(得分:0)

DateTime是一种值类型。因此,如果尚未分配DateTime变量,则其值将是默认值,恰好是DateTime.MinValue。这就是为什么当你明确地将birthDate设置为DateTime.MinValue时,它被视为未被分配(例如为null),因此被存储过程中该参数的默认值替换。