繁体   English   中英

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

[英]1/1/0001 12:00:00 AM not Updating SQL 2008 Date field

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

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

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

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

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

资源

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

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

在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。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM