使用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