如何在可空类型之前将空值输入日期时间
本文关键字:空值 输入 日期 时间 类型 | 更新日期: 2023-09-27 18:18:12
Nullable
类型在中被引入。NET 3. x 。假设我有一个DB表,列类型为datetime
,接受null
值。如果列数据假设来自windows表单客户端,我如何创建类型datetime
的属性并使其接受null
,以便我可以将null
值发送到我的DB表列?这在以前的。net版本中是如何实现的?
根据你的问题,我假设你使用的是。net 2.0之前的版本。
如果是这种情况,你有几个选择:
- 使用"magic"日期值来表示"null"。通常为
DateTime.MinValue
或DateTime.MaxValue
- 添加一个属性到你的类
IsNull{Column}
(或{Column}IsNull
}),将true
,如果值是"null"。
空类型是在。net 3中引入的。X
不,它们是在。net 2.0中引入的。参考文档
我如何创建类型的datetime属性,并使其接受null,所以我可以发送null值到我的DB表列?
你不能。通常,人们使用DateTime.MinValue
的魔法值来表示null,然后确保他们的对象/数据库转换层将其适当地转换为SQL null。另一种选择是使用单独的bool
属性来指示"真实"值的存在-或者使用单独的类型,如SqlDateTime
。
DB中的可空类型与c#的值类型中的可空类型没有联系。事实上,传递null
作为参数并不算作传递SQL NULL
——相反,它意味着"参数毕竟没有传递"——这实际上是一个很大的区别。相反,您使用(现在仍然使用)DBNull.Value
,这是一个DB系统可以理解的特殊值。
正如Jon在他的回答中所说的,在应用层,您使用了一个神奇的值,比如DateTime.MinValue
,并且只是像这样:
cmd.Parameters.AddWithValue("@Par",
par == DateTime.MinValue ? (object)DBNull.Value : par);
您可以做很多hack,但最初的解决方案是将datetTimePicker的ShowCheckBox设置为true。
所以当checkbox为unChecked时,datetimepicker的值将为null