Фильтр между датами VB.NET и базой данных Access - PullRequest
0 голосов
/ 21 октября 2019

Как видно из названия, я не могу отфильтровать предложение SQL из базы данных доступа с помощью vb.net

Dim data1 As String = DateTimePicker1.Value.ToShortDateString
Dim data2 As String = DateTimePicker2.Value.ToShortDateString
Dim sql As String = "SELECT totais.* From totais Where totais.data Between #" + data1 + "# And #" + data2 + "#;"

Это дает мне случайные значения. Если я поставлю 1-10 (октябрь) -2019, это даст мне все записи в системе, если я поставлю 12-10 (октябрь) -2019, это даст только сегодняшнюю запись (не показывает вчера и до записей). Я не нахожу проблему, не могли бы вы помочь?

Спасибо

Ответы [ 3 ]

2 голосов
/ 22 октября 2019

Я бы использовал Параметры вместо конкатенации строки для оператора Sql. Это значительно упрощает чтение оператора и позволяет избежать синтаксических ошибок.

При использовании OleDb порядок появления параметров в выражении sql должен соответствовать порядку их добавления в коллекцию параметров, поскольку OleDb не обращает внимания на имяпараметр.

Private Sub OPCode()
    Dim sql As String = "SELECT * From totais Where data Between @StartDate And @EndDate;"
    Using dt As New DataTable
        Using cn As New OleDbConnection("Your connection string"),
            cmd As New OleDbCommand(sql, cn)
            cmd.Parameters.Add("@StartDate", OleDbType.Date).Value = DateTimePicker1.Value
            cmd.Parameters.Add("@EndDate", OleDbType.Date).Value = DateTimePicker2.Value
            cn.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
        DataGridView1.DataSource = dt
    End Using
End Sub
1 голос
/ 21 октября 2019

Вам нужно использовать одинарные кавычки и преобразовать тип в SQL следующим образом:

SELECT totais.* FROM totais WHERE totais.data Between CDATE('" + data1 + "') And CDATE('" + data2 + "');"
0 голосов
/ 22 октября 2019

Вы должны использовать параметры в соответствии с ответом Мэри, НО для полноты ...

Ms / Access требуются даты, указанные как # mm / dd / yy #, так что ваш SQL будет работать правильно только там, где используется локальный формат даты и временимм / дд / гг. то есть в основном США. В противном случае вам придется отформатировать строку даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...