【发布时间】:2017-04-14 17:26:52
【问题描述】:
我有一个 SQL Server 数据库。我的一张表有一个 SQL DATETIME 列。创建记录时不必输入此列,但以后应修改。
我了解DateTime 不可为空。 datetime2 的默认值为 1/1/0001,而 SQL Server 的最小值为 1/1/1753。
Why when I insert a DateTime null I have "0001-01-01" in SQL Server?
那么,我的问题是正确的方法是什么?如何将po.PODate 设置为 SQL Server (1/1/1753) 的最小值。
ApplicationDbContext db = new ApplicationDbContext();
PurchaseOrder po = new PurchaseOrder();
po.PODate = new DateTime(1753, 1, 1); // Best way?
// po.PODate = DateTime.MinValue; Doesn't work because DateTime.MinValue is 1/1/0001
// po.PODate = null; Doesn't work because DateTime is non-nullable value type
// po.PODate = DBNull.value; Doesn't work because it is for type System.DBNull not DateTime
db.PurchaseOrders.Add(po);
db.SaveChanges();
【问题讨论】:
-
创建记录时为什么不使用
DateTime.Now? -
我不希望 PODate 的默认值是当前时间,我希望它是一些不应该发生的“荒谬”的 DateTime。稍后,时间将更改为实际的 DateTime。
-
然后只需修改您的属性以接受空值。
DateTime PODate { get; set; }到DateTime? PODate { get; set; }。提供虚假(或荒谬)数据并不是最佳做法。如果您不需要数据,请将其设置为NULL并稍后更新其值。 -
DATETIMEin SQL Server is 可以为空 - 完全没有问题。DATETIME2(n)的日期范围为 0001 到 9999 - 1753 年 1 月 1 日仅适用于DATETIME(这是应该开始逐步淘汰该类型并使用 @ 的原因之一987654334@ 代替)
标签: asp.net asp.net-mvc