输出参数是字符串还是日期?

时间:2013-10-04 21:43:15

标签: sql sql-server vb.net vb6

请参阅下面的DDL:

CREATE TABLE TestDate (bookingdate datetime)
INSERT INTO TestDate VALUES ('2013-10-04')

请参阅下面的ADODB记录集:

rs.open "SELECT bookingdate FROM TestDate"
If rs("bookingdate") > dateadd("yyyy", -6, Now)
  msgbox("test")
end if

无论数据库中的日期是什么,msgbox始终显示。

我相信我必须这样做:

If datevalue(rs("bookingdate")) > dateadd("yyyy", -6, Now)
  msgbox("test")
end if

然后,如果预订日期在过去六年内,则仅显示消息框。

在第一个代码片段中,bookingdate被视为字符串吗?

我相信以下网页会给我答案:http://www.w3schools.com/ado/ado_datatypes.asp。但是,它表示内部服务器错误。

1 个答案:

答案 0 :(得分:2)

你永远不应该写这样的代码:

If rs("bookingdate") > DateAdd("yyyy", -6, Now)

而是养成不依赖于默认属性的习惯,根据使用情况,这可能适得其反。优选:

If rs("bookingdate").Value > DateAdd("yyyy", -6, Now)

但是你从这个难题中遗漏的一块巨大的东西就是你正在使用的DBMS。有些人会使用一些非常时髦的数据类型并将其称为DATETIME,因此您可能希望同时查看返回字段的ADO类型并尝试显示TypeName(rs("bookingdate").Value)以查看您在代码中的最终结果

如果返回的数据属于某种类型,例如DecimalString,则所有投注均已关闭,您需要通过正确的一组回转将其转换为有用的东西,然后再进行比较。