Member 14621280 Ответов: 3

Я пытаюсь найти запись из базы данных ms access в VB.NET-что?


когда я ищу запись для кода

Он говорит, что свойство connectionString не инициализировано

Пожалуйста поправьте меня

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

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

        ConnD()
        Try

        
        Dim dt As New DataTable
        Dim ds As New DataSet
        ds.Tables.Add(dt)
        Dim da As New OleDbDataAdapter
        da = New OleDbDataAdapter("Select * from SONGS where CODE like ?", con)
        da.SelectCommand.Parameters.AddWithValue("Code", "%" & txtsearch.Text & "%")
        da.Fill(dt)
            conn.Close()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

3 Ответов

Рейтинг:
1

phil.o

Сообщение об ошибке говорит вам, что Объект sqlconnection.Свойство ConnectionString (System.Data.SqlClient) | Microsoft Docs[^] не был инициализирован.
Проблема, скорее всего, заключается в том, что ConnD() метод, содержание которого вы забыли показать. Более того у вас кажется есть две переменные для связи: con и conn- а какой из них правильный? Было бы также полезно узнать, где находится conn или con переменная была объявлена и инициализирована.


Рейтинг:
1

Maciej Los

Обратите внимание, что приведенное ниже утверждение неверно:

da.SelectCommand.Parameters.AddWithValue("Code", "%" & txtsearch.Text & "%")


Компонент MS Access database engine не признавать [%] характер. Видеть:
Инструкция SELECT (Microsoft Access SQL) | Microsoft Docs[^]
Оператор Like (Microsoft Access SQL) | Microsoft Docs[^]

Если вы хотите найти значение, которое содержит конкретный текст, использование: *specific_text*
Если вы хотите найти значение, которое начинает с конкретным текстом используйте: specific_text*
Если вы хотите найти значение, которое концы с конкретным текстом используйте: *specific_text


Member 14621280

где код будет именем столбца таблицы

Рейтинг:
1

Patrice T

da = New OleDbDataAdapter("Select * from SONGS where CODE like ?", con)
da.SelectCommand.Parameters.AddWithValue("Code", "%" & txtsearch.Text & "%")

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


Richard Deeming

Этот код уже использует параметры и является нет уязвим для SQL-инъекций.

Patrice T

ой, как я виноват.

Member 14621280

Так что ... еще одно предложение, пожалуйста