Jayanta Modak Ответов: 2

Как показать данные между двумя датами..пожалуйста, помогите мне


Как показать данные в listview1 между двумя датами. Показывая какую-то ошибку
Пожалуйста, помогите мне...........



Ошибка
https://ibb.co/hOOgPa

элемент управления ListView
https://ibb.co/gyjo4a

База данных
https://ibb.co/eTJ4cv

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

Public Sub Displayitemrpt()
        If cn.State = ConnectionState.Open Then
            cn.Close()
        End If
        cn.Open()
        Dim cmd As New OleDb.OleDbCommand("SELECT * FROM pur_inv,inv_type, party_ldg WHERE pur_inv.partyID=party_ldg.partyID and pur_inv.invtypid=inv_type.invtypid and purinvdt BETWEEN '" & txtdtf.Text & " And " & txtdtt.Text & "' ORDER BY purinvdt  ", cn)
        Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader()
        ListView1.Items.Clear()
        Do While dr.Read()
            Dim new_item As New  _
                     ListViewItem(dr.Item("purinvdt").ToString)
            new_item.SubItems.Add(dr.Item("purinvid").ToString)

            new_item.SubItems.Add(dr.Item("invno").ToString)
            new_item.SubItems.Add(dr.Item("invdt").ToString)

            new_item.SubItems.Add(dr.Item("prtynm").ToString)
            new_item.SubItems.Add(dr.Item("invtyp").ToString)
            new_item.SubItems.Add(dr.Item("taxamt").ToString)
            new_item.SubItems.Add(dr.Item("tottaxblamt").ToString)
            new_item.SubItems.Add(dr.Item("invamt").ToString)
            ListView1.Items.Add(new_item)
        Loop
        cn.Close()
    End Sub

Michael_Davies

Ваши даты и и заключены в кавычки поэтому рассматриваются как единое целое;

и пуринвдт между '" & txtdtf.Текст & " и " & txtdtt.Текст & "' заказать по

Вы открываете цитату после промежутка и закрываете ее после второго свидания, тогда как это, возможно, должно быть;

и пуринвдт между '" & txtdtf.Текст & "' и '" & txtdtt.Текст & "' заказать по

2 Ответов

Рейтинг:
2

Andy Lanng

Никогда не стройте запросы в строках! Эта ошибка распространена, и она оставляет вас открытыми для SQL-инъекций! Это плохо.

Во-первых, это ваша ошибка:

"'" & txtdtf.Text & " And " & txtdtt.Text & "'"

это означает, что
"'mytest And myother'"


Видишь, ты кое-что пропустил "'"'с

Вместо этого используйте параметры. Такого рода проблемы не возникнут!
Объект oledbcommand.свойства параметров[^]


Вот заметка о SQL-инъекции:
SQL-инъекция[^]


Рейтинг:
19

OriginalGriff

Две вещи:
1) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
2) Никогда не доверяйте вводу пользователя: разберите ваши даты на значения DateTime (сообщая о проблемах пользователю) и передайте значения DateTime в SQL

Dim dtFrom as DateTime
If Not DateTime.TryParse(txtdtf.Text, dtFrom) Then
	' Report problem
        ...
	Return
End If
Dim dtTo as DateTime
If Not DateTime.TryParse(txtdtt.Text, dtTo) Then
	' Report problem
        ...
	Return
End If

Dim cmd As New OleDb.OleDbCommand("SELECT * FROM pur_inv,inv_type, party_ldg WHERE pur_inv.partyID=party_ldg.partyID AND pur_inv.invtypid=inv_type.invtypid AND purinvdt BETWEEN @DF AND @DT ORDER BY purinvdt", cn)
cmd.Parameters.AddWithValue("@DF", dtFrom)
cmd.parameters.AddWithValue("@DT", dtTo)
...


Jayanta Modak

Здравствуйте, сэр, это нормально работает, но проблема дата шоу со временем, как я могу показать только дату без времени, пожалуйста, помогите мне.
https://ibb.co/iYyxfF

OriginalGriff

Используйте параметры формата в строке ToString для элементов, основанных на дате:

https://www.codeproject.com/Tips/54577/Formatting-a-DateTime-for-display-format-string-de

Jayanta Modak

ГДЕ Я ИСПОЛЬЗОВАЛ ФОРМАТ ДАТЫ (КАКАЯ СТРОКА)

OriginalGriff

НЕ КРИЧИ. Использование всех заглавных букв считается криком в интернете и грубостью (использование всех строчных букв считается ребячеством). Используйте правильную капитализацию, если вы хотите, чтобы вас воспринимали всерьез - или если вы хотите получить помощь от людей.

Jayanta Modak

Я прошу прощения. к сожалению, кнопка caps lock включена на моей клавиатуре, и я не собираюсь этого делать. И снова я очень сожалею. И я новичок в этом деле. vb.net 1-й раз я использовал vb.net Итак, я не знаю, где я использую этот формат.
Спасибо за Ваш ответ и предложение
Пожалуйста, прости меня, прости

OriginalGriff

Наверное, здесь:

новый элемент.подпункты.Добавить(др.Пункт("invdt").Метод toString)
ToString преобразует значение DateTime в строку - и здесь вы можете использовать спецификацию формата. Если вы этого не сделаете, он использует общесистемный строковый формат по умолчанию.