访问SQL语句以检索两个日期之间的所有数据

时间:2014-06-14 13:04:56

标签: sql vb.net ms-access datetimepicker oledbcommand

我需要编码帮助才能在两个日期内获取所有数据,其中包含两个DateTimePickers

  • dtpDateFrom
  • dtpDateTo

因此,如果我提出dtpDateFrom = 06/01/14dtpDateTo = 06/30/14,我会在6月份获得所有数据。

到目前为止我有这个代码:

Public Shared Function GetNoofHoursofTImeIn(ByVal search As String, ByVal dfrom As DateTime, ByVal dto As Datetime) As DataTable

    Dim dtoffenseinfo As New DataTable

    If Not DBConnection.State = ConnectionState.Open Then
        'open connection
        DBConnection.Open()
    Else

    End If


    Dim adapter As New OleDbDataAdapter("SELECT sum(No_of_Hour) as THour from EmployeeAttendance where EmployeeID='" & search & "'" & _
                                          "and Format(WorkingDate, 'Short Date')>='" & Format(dfrom, "Short Date") & _
                                  "' and Format(WorkingDate, 'Short Date')<='" & Format(dto, "Short Date") & "'", DBConnection)

    adapter.Fill(dtoffenseinfo)
    DBConnection.Close()


    Return dtoffenseinfo
End Function

我有6/09/14和6/12/14的数据,但它运作不正常。

所以我正在为这个目标寻找完美的代码。

非常感谢!我工作了几个星期的主要特色。

3 个答案:

答案 0 :(得分:0)

在您的查询中尝试此操作.... 你可以在这里使用operator更简单..请检查日期格式也意味着你传递的内容以及DB中存储的格式。

"SELECT sum(No_of_Hour) as THour from EmployeeAttendance where EmployeeID='" & search & "'" & _
                                          "and Format(WorkingDate, 'Short Date') between(" & Format(dfrom, "Short Date") & _
                                  ","& Format(WorkingDate, 'Short Date')& ")"

答案 1 :(得分:0)

评论时间有点长。

您正在将日期转换为字符串以进行比较。所以,你最终得到了像'6/09/14'和'6/12/14'这样的字符串。好吧,猜猜看,'6/10/13'介于这些值之间。 '6/10/22'也是如此。要使字符串比较起作用,您需要将日期格式设置为YYYY-MM-DD(或YYYYMMDD)。

删除format()功能,并将比较作为日期。

答案 2 :(得分:0)

正如其中一条评论中所建议的那样,您确实应该使用参数化查询。在您的特定情况下,代码看起来像这样:

Public Shared Function GetNoofHoursofTImeIn(ByVal search As String, ByVal dfrom As DateTime, ByVal dto As DateTime) As DataTable
    Dim dtoffenseinfo As New DataTable

    If Not DBConnection.State = ConnectionState.Open Then
        'open connection
        DBConnection.Open()
    End If

    Using cmd As New OleDbCommand
        cmd.Connection = DBConnection
        cmd.CommandText = _
                "SELECT SUM(No_of_Hour) AS THour FROM EmployeeAttendance " & _
                "WHERE EmployeeID = ? " & _
                    "AND WorkingDate BETWEEN ? AND ?"
        cmd.Parameters.AddWithValue("?", search)
        cmd.Parameters.AddWithValue("?", dfrom.Date)
        cmd.Parameters.AddWithValue("?", dto.Date)
        Using adapter As New OleDbDataAdapter(cmd)
            adapter.Fill(dtoffenseinfo)
        End Using
    End Using

    DBConnection.Close()
    Return dtoffenseinfo
End Function