如何在可空类型之前将空值输入日期时间

本文关键字:空值 输入 日期 时间 类型 | 更新日期: 2023-09-27 18:18:12

Nullable类型在中被引入。NET 3. x 。假设我有一个DB表,列类型为datetime,接受null值。如果列数据假设来自windows表单客户端,我如何创建类型datetime的属性并使其接受null,以便我可以将null值发送到我的DB表列?这在以前的。net版本中是如何实现的?

如何在可空类型之前将空值输入日期时间

根据你的问题,我假设你使用的是。net 2.0之前的版本。

如果是这种情况,你有几个选择:

  1. 使用"magic"日期值来表示"null"。通常为DateTime.MinValueDateTime.MaxValue
  2. 添加一个属性到你的类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