Фильтрация SQL по правильному интервалу времени в vb.net - PullRequest
2 голосов
/ 24 февраля 2010

У меня есть таблица с двумя временными столбцами. Один - это время входа, другой - время выхода из системы. Я хотел бы иметь возможность фильтрации между двумя, в основном больше, чем выбранный минимум и меньше, чем выбранный максимум. Я использую ежемесячный календарь, чтобы получить мне промежутки времени, но он не работает правильно. Оттуда я хотел бы добавить 4 столбца в таблице в сетку. Дата в БД имеет следующий формат:

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

EDIT

SLaks ответил на большинство моих вопросов, остается одна проблема. Мне нужно выяснить, как сделать так, чтобы в monthcalendar можно было выбрать только один день и вернуть значения этих дней. Похоже, время является проблемой, так как оно находится в БД, как указано выше. Недостаточно просто сравнить даты.

Не уверен, как настроить дату, чтобы включить время.

1 Ответ

2 голосов
/ 24 февраля 2010

Вы должны использовать параметры, например:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...