无法设置Nullable DateTime属性

时间:2014-03-11 17:15:08

标签: vb.net nullable

我有以下代码,我试图从数据库中获取SQL Server中Nullable DateTime字段的数据 -

 If dr("SendDate") Is DBNull.Value Then
      ctrl_prov_dtl.SelectedDateSendDate = DirectCast(Nothing, System.Nullable(Of DateTime))
 Else
      ctrl_prov_dtl.SelectedDateSendDate = dr("SendDate")
 End If

这是调用以下公共属性

Public Property SelectedDateSendDate() As Nullable(Of DateTime)
    Get
        Dim myDateTime As DateTime

        If (DateTime.TryParse(calSendDate.Text, myDateTime)) Then
            Return calSendDate.Text
        Else
            Return "01/01/1900"
        End If
    End Get
    Set(value As Nullable(Of DateTime))
       calSendDate.Text = value
    End Set
End Property

我一直收到以下错误 Nullable对象必须有值。

我真的很困惑因为我将值设置为 Nullable(Of DateTime)

1 个答案:

答案 0 :(得分:1)

这可能是因为您尝试将calSendDate的文本值设置为value,无论它是否为空。

相反,请将属性设置器更改为:

Set(value As Nullable(Of DateTime))
   If value.HasValue Then
       calSendDate.Text = value
   Else
       calSendDate.Text = Nothing
   End If
End Set

其他建议:

如果您的项目是.NET 3.5或更高版本并引用了 System.Data.DataSetExtensions.dll ,请将您的第一个代码块改为:

ctrl_prov_dtl.SelectedDateSendDate = dr.Field(Of DateTime?)("SendDate")

此外,您的属性getter永远不会返回已解析的myDateTime值。并且返回1/19/1900作为可空类型的后备值对我来说感觉非常错误。