我正在尝试使用monthcalendar中的selectionstart和selectionend属性来过滤表中的两个登录日期。当我选择一天时,这不能正常工作。如果我选择前一天和后一天,那么它将会。我的数据库中的时间值如下:
2/23/2010 11:17:01 AM
登录和注销都属于该类型。我有一种感觉,当我使用selectionstart和选择结束时,我只得到mm / dd / yyyy,DB中的内容就是那个和时间。
这是我的代码:
Dim cn As OleDbConnection
Dim cmd As OleDbCommand
Dim str As String
Dim dr As OleDbDataReader
DataGridView1.Rows.Clear()
Try
cn = New OleDbConnection("Provider=microsoft.Jet.OLEDB.4.0;Data Source=G:\Sean\BMSBonder3_0.mdb;")
cn.Open()
str = "Select BonderIdentifier, UserName, Login, Logout From [Session] Where Login >= ? AND Logout <= ? AND BonderIdentifier = ?"
cmd = New OleDbCommand(str, cn)
cmd.Parameters.AddWithValue("Start", MonthCalendar1.SelectionStart)
cmd.Parameters.AddWithValue("End", MonthCalendar1.SelectionEnd)
cmd.Parameters.AddWithValue("BID", ListBox1.SelectedItem)
dr = cmd.ExecuteReader
While dr.Read()
If dr.Item(0).ToString <> "" Then
DataGridView1.Rows.Add(dr.Item(0), dr.Item(1), dr.Item(2), dr.Item(3))
End If
End While
dr.Close()
cn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
答案 0 :(得分:0)
我认为不是使用:
cmd.Parameters.AddWithValue("Start", MonthCalendar1.SelectionStart)
cmd.Parameters.AddWithValue("End", MonthCalendar1.SelectionEnd)
你应该使用
cmd.Parameters.AddWithValue("Start", MonthCalendar1.SelectionRange.Start)
cmd.Parameters.AddWithValue("End", MonthCalendar1.SelectionRange.End)
答案 1 :(得分:-1)
如果您从远处查看问题,您会发现在注销日期之后无法登录,与注销相同,您无法在登录日期之前注销。这意味着您必须在查询中指定登录和注销的边界。您的查询应如下所示:
Select BonderIdentifier, UserName, Login, Logout From [Session] Where Login >= ? AND login <= ? AND logout >= ? AND Logout <= ? AND BonderIdentifier = ?
参数将在哪里:
cmd.Parameters.AddWithValue("Start1", MonthCalendar1.SelectionRange.Start)
cmd.Parameters.AddWithValue("Start2", MonthCalendar1.SelectionRange.End)
cmd.Parameters.AddWithValue("End1", MonthCalendar1.SelectionRange.Start)
cmd.Parameters.AddWithValue("End2", MonthCalendar1.SelectionRange.End)