通过vb.net中的正确时间跨度过滤SQL

时间:2010-02-23 23:33:45

标签: .net vb.net datetime datagridview

我有一个有两个时间列的表。一个是登录时间,一个是注销时间。我希望能够在两者之间进行过滤,基本上大于所选的最小值并小于所选的最大值。我使用每月日历来获取时间跨度,但它无法正常工作。从那里我想将表中的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中如上所述。仅仅比较日期是不够的。

不确定如何调整日期以包含时间。

1 个答案:

答案 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))