无法隐式转换类型'System.DateTime?'到'System.DateTime'。存在显式转换(您是否错过了演员?)

时间:2014-03-11 16:47:39

标签: c# dbnull

我想我应该使用类似的东西,但我不知道如何修改它以适用于DateTime,因为这样做会告诉我DateTime不能为null。那么我该如何改变这个或者有更好的方法来解决这个问题呢?提前谢谢。

我正在尝试设置

startDateTime = RadDateTimePickerBegin.SelectedDate;

我认为它应该与

类似
RadDateTimePickerBegin.SelectedDate == What goes here(string.Empty) ? (object)DBNull.Value : RadDateTimePickerBegin.SelectedDate);

6 个答案:

答案 0 :(得分:6)

看起来您正在使用RadDateTimePicker控件,在这种情况下,SelectedDate属性一个DateTime值。 It's a Nullable<DateTime>。这意味着你应该这样做:

 startDateTime = RadDateTimePickerBegin.SelectedDate ?? default(DateTime);

请注意:如果没有选择日期,您最终会将0001年1月1日作为您的日期,而不是您期望的DBNull。

此外,我看到你在这里施展Object,这告诉我你可能会犯一个大错。看起来startDateTime将被分配给SqlParameter对象的值,并且为了使此变量能够保存DateTime和DBNull类型的项,它必须具有{{1的类型}}。如果您稍后使用Object方法创建SqlParameter,则该方法可能正确猜测参数类型,因为它将看到的只是AddWithValue()类型。发生这种情况时,您可能会受到严重的性能损失,因为类型不匹配会强制数据库中的每行转换或阻止良好使用索引。

如果您确实设置了当前路径,则可以改为:

Object

但同样:我强烈反对。

答案 1 :(得分:4)

不清楚DBNull在图片中的位置,但是如果您尝试将不可为空的DateTime设置为可空的DateTime的值然后,在null的情况下,您需要提供默认值。您可以使用null coalescing operator

someNonNullableDateTime = someNullableDateTime ?? DateTime.MinValue;

我们的想法是someNullableDateTime 可能在运行时包含null值,而someNonNullableDateTime 不能分配了null值。由于编译器无法强制执行此操作,因此会引发编译错误。因此,您可以为运行时代码提供使用该值的选项,或者,如果没有值,则使用默认值。

答案 2 :(得分:3)

如果您对default(DateTime)感到满意,如果可以为空,那么:

DateTime startDateTime = RadDateTimePickerBegin.SelectedDate.GetValueOrDefault();

或者如果你想要另一个值,例如{0}当nullable为null时,您可以传入默认值:

DateTime.MaxValue

答案 3 :(得分:1)

DateTime不能为空。它的默认值是DateTime.MinValue。

if (YourDate.HasValue)
{
   RadDateTimePickerBegin.SelectedDate =  YourDate;
}

adDateTimePickerBegin.SelectedDate= YourDate?? DateTime.MinValue;

答案 4 :(得分:1)

假设startDateTimeDateTimeRadDateTimePickerBegin.SelectedDateDateTime?

startDateTime = RadDateTimePickerBegin.SelectedDate.HasValue
    ? RadDateTimePickerBegin.SelectedDate.Value
    : DateTime.MinValue;

或者,使startDateTime可以为空。

答案 5 :(得分:1)

DateTime? selected = RadDateTimePickerBegin.SelectedDate;

if(selected.HasValue)
{
  startDateTime = selected.Value;
}

您需要确保实际 选定的日期时间。