我有一个SQL Server表,其中包含多个日期列,可以是NULL
,实际上是NULL
。
在尝试使用可空类型的值之前,我认为我正在使用 .HasValue 测试正确处理此问题。但显然不是因为我得到 InvalidOperationException - Nullable对象必须有值 - 当我的类对象中的getter尝试填充文本框时:
Public Class EventItem
Private _AcknowledgeDate As Nullable(Of Date)
Public Property AcknowledgeDate() As Date?
Get
Return _AcknowledgeDate
End Get
Set(ByVal value As Date?)
If value.HasValue Then
_AcknowledgeDate = value
Else
_AcknowledgeDate = Nothing
End If
End Set
End Property
我的构造函数从SQL服务器获取数据;这是构造函数的片段:
Me.AcknowledgeDate = If(IsDBNull(theRdr("AcknowledgeDate")), Nothing, theRdr("AcknowledgeDate"))
当上述setter运行时,日期为Null,私有变量 _AcknowledgeDate 设置为 Nothing 。
当代码尝试将某些内容分配给文本框时,getter代码会在此处获得异常:
txtAcknowledgeDate.Text = thisEvent.AcknowledgeDate
我可以按如下方式分配文本框:txtAcknowledgeDate.Text = Nothing
尽管阅读了很多关于这个可空类型工具的内容,但我想我对如何在VB.Net中实现可为空的日期感到很困惑。
答案 0 :(得分:1)
您的AcknowledgeDate
已经Nothing
,您是在构造函数中自己设置的。您不需要在Set
函数中再次指定,实际上您只是说“如果值为Nothing,则将其设置为Nothing”,这是多余的。
我认为问题在于您尝试将该对象分配给textbox .Text
属性没有任何引用,这会导致异常。
TextBox.Text
期待String
我看不到使用Nothing
的原因。创建Function
以处理Nothing
值并显示空字符串。此外,它可让您随心所欲地formatting约会。{{3}}
类似
Function getDateText(ByVal d As Date?) As String
If d.HasValue = False Then
Return ""
End If
Return d.Value.ToString("D")
End Function
然后在您想要设置txtAcknowledgeDate.Text
txtAcknowledgeDate.Text = getDateText(thisEvent.AcknowledgeDate)