CaptainChizni Ответов: 1

Как отфильтровать datagrid с помощью textbox


Dim connection As OleDb.OleDbConnection = New OleDbConnection
       connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & System.Environment.CurrentDirectory & "\InventSystem.accdb"
       connection.Open()
       Dim da As OleDb.OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM Items WHERE Barcode Like  '%" & TextBox1.Text & "%' ", connection)
       Dim ds As New DataTable
       da.Fill(ds)
       If ds.Rows.Count = 0 Then
           MessageBox.Show("Record not Found")
       End If
       connection.Dispose()


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

Я действительно Новичок в этом деле. Ребята, вы можете мне помочь, я чувствую, что в моем коде отсутствует фильтр datagrid

Richard Deeming

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]

Using connection As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|AppData|\InventSystem.accdb")
    Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Items WHERE Barcode Like '%' + @find + '%'", connection)
    da.SelectCommand.Parameters.AddWithValue("@find", TextBox1.Text)
    
    Dim table As New DataTable()
    da.Fill(table)
    
    If table.Rows.Count = 0 Then
        MessageBox.Show("Record not found")
    Else
        ' TODO: Show the returned rows somewhere...
    End If
End Using

Richard Deeming

Кроме того, вы на самом деле не сказали нам, в чем проблема.

1 Ответов

Рейтинг:
2

Maciej Los

Я бы предложил использовать Гугл[^].

Как Ричард Диминг[^] упоминалось, что вы должны использовать параметризованный запрос (Объект oledbcommand[^]), например:

Dim qry As String = "SELECT * FROM Items WHERE Barcode Like '*@find*';"


Примечание: MS Access database engine использует [*] вместо [%]. Пожалуйста, смотрите: Оператор Like (Microsoft Access SQL) [Ссылка Разработчика Access 2007][^]