使用monthcalendar控件,当我选择一天并将其用作我的SQL的过滤器时,它无法按预期工作

时间:2010-02-24 16:13:29

标签: sql vb.net datetime monthcalendar

我正在尝试使用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

2 个答案:

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