Member 14621280 Ответов: 1

Я хочу найти свой код ?


я попробовал этот код для поиска записей из базы данных access

и успешно искал но единственное что Datagridview1 не фильтрует эту конкретную строку

пожалуйста, помогите мне

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

Private Sub txtsearch_TextChanged(sender As Object, e As EventArgs) Handles txtsearch.TextChanged

        ConnD()
        sql = "Select * from SONGS where CODE like '" & txtsearch.Text & "'"
        cmd = New OleDbCommand(sql, conn)

        dr = cmd.ExecuteReader()

        If (dr.Read) Then
            txtCode.Text = dr(0).ToString
            txtET.Text = dr(1).ToString
            txtTT.Text = dr(2).ToString
            RichTextBox1.Text = dr(3).ToString
            DataGridView1.Show()




        End If


        conn.Close()

Richard Deeming

Как мы вам постоянно говорим, НЕ ДЕЛАЙ ЭТОГО ТАК!

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

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

Dave Kreskowiak

Я не вижу никакого кода, который связывает DGV с возвращенным набором записей.

Вы выполняете считыватель над возвращенными записями, а не помещаете их в объект DataTable, который может быть привязан к сетке, чтобы показать их.

Вам также не нужен DataGridView1.Показать линию вообще.

1 Ответов

Рейтинг:
0

OriginalGriff

Сколько раз мы должны это повторять?
Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?