我想我应该使用类似的东西,但我不知道如何修改它以适用于DateTime,因为这样做会告诉我DateTime不能为null。那么我该如何改变这个或者有更好的方法来解决这个问题呢?提前谢谢。
我正在尝试设置
startDateTime = RadDateTimePickerBegin.SelectedDate;
我认为它应该与
类似RadDateTimePickerBegin.SelectedDate == What goes here(string.Empty) ? (object)DBNull.Value : RadDateTimePickerBegin.SelectedDate);
答案 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)
假设startDateTime
是DateTime
且RadDateTimePickerBegin.SelectedDate
是DateTime?
:
startDateTime = RadDateTimePickerBegin.SelectedDate.HasValue
? RadDateTimePickerBegin.SelectedDate.Value
: DateTime.MinValue;
或者,使startDateTime
可以为空。
答案 5 :(得分:1)
DateTime? selected = RadDateTimePickerBegin.SelectedDate;
if(selected.HasValue)
{
startDateTime = selected.Value;
}
您需要确保实际 选定的日期时间。