Member 12950816 Ответов: 3

Как я могу искать и фильтровать данные в datagridview с помощью radiobutton используя VB .NET и мою базу данных mysql


Нет ошибки в моем коде, но нет отображения данных в моем datagridview. Заранее спасибо

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

Private Sub YearlyREp()
        Dim con As MySqlConnection = New MySqlConnection("server=localhost;user id=root;password=;database=itbcis; Convert Zero DateTime=True")
        Dim Content As String

        If (RBproducts.Checked = True) Then
            Content = "Bondpaper" & "Ballpen" & "Pentelpen" & "Ink" & "Manila Paper" & "Envelop" & "Folder" & "Pencil"
            RBservices.Checked = False
        Else : RBservices.Checked = True
            Content = "Binding" & "Encoding" & "Photocopy" & "Print" & "Scan"
            RBproducts.Checked = False
        End If

        Dim sql As MySqlCommand = New MySqlCommand("Select DATE_FORMAT(Date, '%m/%Y') as Month, ServicesOrProduct, sum(Quantity) as Quantity, sum(Total) as Total from sales where Year(Date) = '" & cbYear.Text & "' and ServicesOrProduct = '" & Content & "' group by ServicesOrProduct, Month(Date) ORDER BY Month(Date)", con)
        Dim ds As DataSet = New DataSet()
        Dim da As MySqlDataAdapter = New MySqlDataAdapter()
        con.Open()
        da.SelectCommand = sql;
        da.Fill(ds, "sales")
        DGVYearly.DataSource = ds
        DGVYearly.DataMember = "sales"
        con.Close()
    End Sub

3 Ответов

Рейтинг:
8

Dave Kreskowiak

Вам действительно нужно вернуться и узнать, как работают струны. Ваши две строки "содержания", которые выглядят следующим образом:

Content = "Bondpaper" & "Ballpen" & "Pentelpen" & "Ink" & "Manila Paper" & "Envelop" & "Folder" & "Pencil"
Content = "Binding" & "Encoding" & "Photocopy" & "Print" & "Scan"
на самом деле это так:
Content = "BondpaperBallpenPentelpenInkManila PaperEnvelopFolderPencil"
Content = "BindingEncodingPhotocopyPrintScan"

Я серьезно сомневаюсь, что в вашей базе данных есть элементы ServicesOrProduct, которые выглядят именно так.

Вы также рассматриваете даты как строку в запросе:
...where Year(Date) = '" & cbYear.Text & "' and...

Удалите одинарные кавычки, потому что на самом деле вы сравниваете целочисленные значения, а не целое число со строкой.
...where Year(Date) = " & cbYear.Text & " and...


Member 12950816

ServicesOrProduct
Шариковая ручка
Bondpaper
Пентелпен
Сканировать
Связующий
Печать
и т.д.
я пытаюсь найти эти данные по услугам и продуктам с помощью radiobutton.

Рейтинг:
23

Patrice T

MySqlCommand = New MySqlCommand("Select DATE_FORMAT(Date, '%m/%Y') as Month, ServicesOrProduct, sum(Quantity) as Quantity, sum(Total) as Total from sales where Year(Date) = '" & cbYear.Text & "' and ServicesOrProduct = '" & Content & "' group by ServicesOrProduct, Month(Date) ORDER BY Month(Date)", con)

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


Рейтинг:
19

RickZeeland

Может быть, вы можете использовать BindingSource.Фильтр, см.: Объектом bindingsource.Свойство Фильтра (System.Окна.Формы)[^]
И: Объектом bindingsource.Фильтр[^]