我正在循环遍历LDAP数据,将一些数据放入MS SQL数据库。在7k + LDAP记录中,有一些在尝试将 lastlogin 放入具有DateTime格式的数据库时引起了问题。
问题是它的日期, 12/31/1600 7:00:00 PM ,不正确并导致错误
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。 声明已经终止。
在将数据插入数据库之前,我一直在检查日期格式。
If Not IsDate(empInfo.lastLogon) Then
empInfo.lastLogon = Format(Now.AddYears(-1), "MM/dd/yyyy HH:MM:ss")
End If
但似乎没有赶上 1600 的年份,这似乎导致了上述错误。
我是否可以使用任何代码来检测那些奇怪的年份并将其替换为随机的合法日期,以便将其放入数据库中?
答案 0 :(得分:1)
我认为你的问题是因为代码中的有效日期不是数据库中的有效日期,可能是因为数据库可以存储最早的1753日期,而代码允许更早的日期(例如你引用的1600)。
尝试在IF语句中添加年度测试:
If Not IsDate(empInfo.lastLogon) OrElse empInfo.lastLogon.year < 2000 Then
empInfo.lastLogon = Format(Now.AddYears(-1), "MM/dd/yyyy HH:MM:ss")
End If
您可能希望使用01/01/2000 00:00:00
之类的标记值,而不是使用1年前的默认值。这将让您轻松识别那些没有“真实”价值的东西。但我不知道你的业务规则,所以YMMV。
答案 1 :(得分:0)
使用MM
几个月,但使用mm
。
即;您应该使用MM/dd/yyyy HH:mm:ss
代替MM/dd/yyyy HH:MM:ss
。
我希望它可以帮到你。
答案 2 :(得分:0)
我想你想要这样的东西:
If Not IsDate(empInfo.lastLogon) OrElse DateTime.Parse(empInfo.lastLogon).Year < 2000 Then
empInfo.lastLogon = Format(Now.AddYears(-1), "MM/dd/yyyy HH:mm:ss")
End If