DATETIME使用SQL语句时,在VB.Net中使用MS Access数据库格式化问题

时间:2012-09-04 20:22:12

标签: ms-access vb.net-2010 ms-access-2003

我正在使用vb.net和ms访问2003作为后端。当我使用下面显示的sql查询时,我的结果中没有任何记录。我正在尝试查找日期较低(或之前)日期的记录。

Dim Sql, CurrentDate as String

Dim TrDate as Date

Dim DataVal As Integer

TrDate=DateTime.Now

CurrentDate=Format(TrDate, "dd/MM/yyyy hh:mm:ss tt")

Sql="Select count(*) from Table1 where InvDate<=#" & CurrentDate & "#"

IF DBConOpen()=True

        cmdOledb.CommandText = sql
         cmdOledb.CommandType = CommandType.Text
         cmdOledb.Connection = ConOledb
         DataVal = cmdOledb.ExecuteScalar
         msgbox(DataVal)

End IF

例如,如果我当前的日期是01/09/2012或02/09/2012或.. 12/09/2012,并且数据库中的日期是01/09/2012或02/09/2012或.. 12 / 09/2012。我应该得到相应的记录数。但在这种情况下我得到0条记录。

但如果我目前的日期是01/09/2012或02/09/2012或.. 12/09/2012且数据库中的日期是20/08/2012或15/06/2012或.. 30 / 05/2012。我得到了正确的记录数。

我在MS访问表中定义的日期格式是“常规日期”。有人能够发现什么是错的吗?

2 个答案:

答案 0 :(得分:1)

您应该使用:

CurrentDate=Format(TrDate, "yyyy/MM/dd hh:mm:ss tt")

访问需要一个明确的日期。

您可能也想删除时间元素。

答案 1 :(得分:1)

除非您在提交查询之前需要在Dot.Net中确定日期/时间值,否则您可以使用Access数据库引擎的Now()函数。

Sql="Select count(*) from Table1 where InvDate<=Now()"

该方法避免了有关格式化和分隔符的问题。

如果您只想要没有当前时间的日期,请使用Date()代替Now()。 (实际上,Date()将作为时间组件返回午夜。)