使用Nullable(Of Date)处理空日期的数据库表

我有一个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中实现可空日期非常困惑。


你的AcknowledgeDate已经是Nothing ,你自己在构造函数中设置它。 您不需要在Set函数中再次指定,实际上您只是说“如果该值为Nothing,则将其设置为Nothing”,这是多余的。

我相信问题是你试图将该对象Nothing引用分配给textbox .Text属性,并导致异常。

TextBox.Text期望一个String我看不到使用Nothing的原因。 创建一个Function来处理Nothing值并显示一个空字符串。 另外,它可以让你随心所欲地格式化你的日期。

就像是

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)
链接地址: http://www.djcxy.com/p/42831.html

上一篇: Handle database table with null dates using Nullable(Of Date)

下一篇: Getting a null reference exception trying to push a zero to a stack