我需要编码帮助才能在两个日期内获取所有数据,其中包含两个DateTimePickers
。
dtpDateFrom
dtpDateTo
因此,如果我提出dtpDateFrom = 06/01/14
和dtpDateTo = 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的数据,但它运作不正常。
所以我正在为这个目标寻找完美的代码。
非常感谢!我工作了几个星期的主要特色。
答案 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