我有以下代码,我试图从数据库中获取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)
答案 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作为可空类型的后备值对我来说感觉非常错误。