我有一个有两个时间列的表。一个是登录时间,一个是注销时间。我希望能够在两者之间进行过滤,基本上大于所选的最小值并小于所选的最大值。我使用每月日历来获取时间跨度,但它无法正常工作。从那里我想将表中的4列添加到gridview。 DB中的日期采用以下格式:
2/23/2010 11:17:01 AM
我知道如何从表中获取单个元素,或者从列中获取但不是整行。
所以我想我有2个问题,让SQL的过滤器正确,然后将结果绑定到表。
到目前为止,这是我的代码:
Dim cn As OleDbConnection
Dim cmd As OleDbCommand
Dim str As String
Dim dr As OleDbDataReader
Dim date1 As Date
Dim date2 As Date
If (Not SubmitNewToDB(session)) Then
MsgBox("error")
End If
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 < " & MonthCalendar1.SelectionEnd _
& " AND Logout > " & MonthCalendar1.SelectionStart & ") AND BonderIdentifier = " & session.bonderIdentifier
cmd = New OleDbCommand(str, cn)
dr = cmd.ExecuteReader
While dr.Read()
If dr.Item(0).ToString <> "" Then
DataGridView1.Rows.Add(dr.Item(0))
End If
End While
dr.Close()
cn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
修改
SLaks回答了我的大多数问题,一个问题依然存在。我需要弄清楚如何制作它,以便monthcalendar只能选择一天并返回那些天值。似乎时间是一个问题,因为它在DB中如上所述。仅仅比较日期是不够的。
不确定如何调整日期以包含时间。
答案 0 :(得分:2)
您应该使用参数,例如:
str = "Select BonderIdentifier, UserName, Login, Logout From [Session] Where Login >= ? AND Login <= ? AND BonderIdentifier = ?"
cmd = New OleDbCommand(str, cn)
cmd.Parameters.AddWithValue("Start", MonthCalendar1.SelectionStart
cmd.Parameters.AddWithValue("End", MonthCalendar1.SelectionEnd)
cmd.Parameters.AddWithValue("BID", session.bonderIdentifier)
要为四列添加值,您可以编写
DataGridView1.Rows.Add(dr.Item(0), dr.Item(1), dr.Item(2), dr.Item(3))