Как использовать BETWEEN и AND в Access SQL для фильтрации по диапазону дат? - PullRequest
0 голосов
/ 04 февраля 2020

Я использую базу данных Access с таблицей Visits с полем VisitDate, значения которого хранятся в виде строк (например, 01/21/2020). Мне нужно извлечь все записи, используя VisitDate значения полей между 1/20/2020 и 1/26/2020. Лучшее, что я могу сделать после работы над этой проблемой за последние пять дней, это ...

dim WHEREclause as string = " WHERE VisitDate BETWEEN " & ccc & " AND " & ddd

, где ccc равно "01/20/2020", а ddd равно "01/26/2020". Это дает мне правильные записи за 2020 год, но также возвращает записи за тот же период времени в 2019 году. Как мне решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 04 февраля 2020

Объединение комментариев @LarsTech и @jmcilhinney. Используйте параметры и преобразуйте строковое поле в реальную дату.

Private Sub OPCode(ccc As String, ddd As String)
    Dim dt As New DataTable
    Using cn As New OleDbConnection("Your connection string"),
    cmd As New OleDbCommand("Select * From Visits WHERE CDate(VisitDate) BETWEEN @FirstDate AND @SecondDate;")
        cmd.Parameters.Add("FirstDate", OleDbType.Date).Value = CDate(ccc)
        cmd.Parameters.Add("SecondDate", OleDbType.Date).Value = CDate(ddd)
        dt.Load(cmd.ExecuteReader)
    End Using
    DataGridView1.DataSource = dt
End Sub

Обратите внимание, что в Access имена параметров не имеют значения. Порядок, в котором параметры появляются в операторе sql, должен соответствовать порядку, в котором параметры добавляются в коллекцию Parameters. Я использую описательные имена для удобства чтения.

0 голосов
/ 04 февраля 2020

Сделайте это с #

dim WHEREclause as string = " WHERE VisitDate BETWEEN #" & ccc & "# AND #" & ddd & "#"

nb: остерегайтесь конкатенации, это облегчает sql инъекции

...