Member 12996616 Ответов: 2

Как получить данные между двумя конкретными датами из базы данных


Я ищу, чтобы получить данные между конкретными датами.Я использовал BETWEEN cause, чтобы получить их, но моя проблема в том, что мой запрос рассматривает данные только между двумя конкретными датами, независимо от месяца и года.

Здесь idate datatype - это "текст", и я использую MS-access db

Кто-нибудь, пожалуйста, помогите мне выбраться отсюда.
Заранее спасибо.

Что я уже пробовал:

    Try
    Dim ds As New DataSet()
    cn = New OleDbConnection(str)
    cn.Open()
    cmd = New OleDbCommand("select idate,sum(itotalrs)as itotalrs from ordertable where idate between '" + DateTimePicker1.Text + "' and '" + DateTimePicker2.Text + "' group by idate", cn)
    Dim da As New OleDbDataAdapter(cmd)
    cmd = New OleDbCommand("select idate,sum(itotalrs)as itotalrs from ordertable where idate between '" + DateTimePicker1.Text + "' and '" + DateTimePicker2.Text + "' group by idate", cn)
    cmd.ExecuteReader()
    da.Fill(ds, "ordertable")
    DataGridView1.DataSource = ds.Tables("ordertable")
Catch ex As Exception
    MsgBox(ex.Message.ToString)
End Try
cn.Close()

[no name]

"idate datatype - это "текст"", вот тут-то и возникает ваша первая проблема. Текст-это не дата и не время... это текст.

Member 12996616

Большое спасибо..
Извините, но я никогда не сталкивался со словом SQL-инъекция...Его совершенно новый термин для me..so не могли бы вы, пожалуйста, перекодировать и перепечатать мою вышеприведенную кодировку обратно мне, чтобы я мог избежать SQL-инъекции..еще раз заранее спасибо...

2 Ответов

Рейтинг:
2

OriginalGriff

Никогда не храните даты в строковых переменных: всегда храните данные в наиболее подходящем типе данных-или вы создадите себе огромные проблемы позже.
Когда вы сравниваете строковые значения, все сравнение зависит от первого другого символа, встречающегося в двух строках, поэтому дата, подобная "01/06/2017", будет ниже даты, подобной "31-06-1901", потому что " 0 "стоит перед" 3 " в порядке сортировки символов.

Храните свои даты в Столбцах DATETIME или DATE, и сравнения начнут работать.

Но не делай этого так! Никогда не объединяйте строки для формирования SQL-команды, так как вы оставляете свою БД открытой для атаки SQL-инъекций, которая может повредить или уничтожить вашу БД. Всегда используйте параметризованные запросы и передавайте значения в собственном формате.В этом случае передайте DateTimePicker.Значение непосредственно как параметр, а не через строку


Рейтинг:
2

Patrice T

Цитата:
Здесь idate datatype - это "текст", и я использую MS-access db

В этом причина вашей проблемы. Тип данных DateTime был изобретен именно для решения этой проблемы.

Совет: никогда не создавайте запросы путем конкатенации, это откроет дверь для SQL-инъекции.
SQL-инъекция[^]


Member 12996616

Большое спасибо..
Извините, но я никогда не сталкивался со словом SQL-инъекция...Его совершенно новый термин для me..so не могли бы вы, пожалуйста, перекодировать и перепечатать мою вышеприведенную кодировку обратно мне, чтобы я мог избежать SQL-инъекции..еще раз заранее спасибо...

Patrice T

Ссылка в ответе приведет вас на очень хороший обучающий сайт.
Там вы узнаете, что такое SQL-инъекция и как ее исправить.

Member 12996616

Большое спасибо, дорогая ... оставайся благословенной...!!!