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



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

我有一个 vb.net 表格申请。基本上,我有一个SQL数据库,其中包含一个Employee 表,其中包含日期时间的EmpFinish列,null格式(员工完成日期)。数据是从链接的 SQL 数据库(从外部应用填充)导入的。任何"空白"日期在 SQL 中都显示为 1899-12-30 00:00:00.000。

员工表数据显示在 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 年的空白日期,但无法正常工作。如果我在测试行调试代码,选择EmpFinishDate应该等于#12/30/1899#。如果我通过以下方式在屏幕上显示字段值 MsgBox("selectedFinDate = " & selectedEmpFinishDate) 它报告为

00:00:00我知道这一定是可能的,但想不通。

有人可以提供解决方案,因为我的头发快用完了。

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

最新更新