检查表单日期字段是否等于1899-12-30 00:00:00.000

时间:2018-01-24 17:10:54

标签: sql vb.net datetime

我知道这应该很简单,但经过数小时的谷歌搜索后,我仍然失败......

我有一个vb.net表单应用程序。基本上我有一个带有Employee表的SQL数据库,该表带有datetime的EmpFinish列,null格式(Employee Finish Date)。数据从链接的SQL DB(从外部应用程序填充)导入。任何“空白”日期在SQL中显示为1899-12-30 00:00:00.000。

Employee表数据显示在datagridview表单上,选择了一行,然后我想执行检查以测试表单中EmpFinish日期的行是早于还是等于今天并且不等于它的“空白” “价值就是让员工离职。

代码摘录:

Dim currentDateTime = DateTime.Now

Dim selectedEmpFinishDate As DateTime = 
    EmployeesDataGridView.SelectedRows(0).Cells(5).Value

If selectedEmpFinishDate.CompareTo(currentDateTime) <= 0 Then

    ' code to do

End If

我没有开始使用上面的CompareTo()我开始谷歌搜索这个问题,这似乎是比较日期的最佳方式。是???

此测试适用于实际日期,例如昨天但也捕获了所有1899个日期,我已经尝试了很多测试(使用1 If单独的声明)来检查1899年的空白日期,但无法获得任何工作。如果我在测试行调试代码,selectedEmpFinishDate应该等于#12/30/1899#。如果我通过屏幕显示字段值 MsgBox(“selectedFinDate =”&amp; selectedEmpFinishDate)报告为00:00:00

我知道这一定是可能的,但无法理解。

有人可以提供一个解决方案,因为我的头发已用尽了。

1 个答案:

答案 0 :(得分:0)

我已经遵循了djv的建议(昨晚我有同样的想法)并完成覆盖以将这些日期值设置为NULL。然后我成功地使用了IsDBNull()。 澄清这些日期的来源......数据从一个巨大的商业软件应用程序创建的另一个SQL数据库导入到该数据库中。不确定他们是否希望以这种方式存储日期,或者导入是否将它们设置为&#34;空白&#34;默认1899年。 它们实际上在1899等所有形式上显示,因此将它们重置为NULL是最好的选择。 对于拥有这1899个日期的任何其他人,我建议将它们更新为NULL。 感谢所有特别回应djv的人。