Свойство ComboBox.SelectedText и ошибка базы данных - PullRequest
0 голосов
/ 10 ноября 2019

Этот конкретный код ComboBox2.SelectedItem запрос содержит ошибку в моей базе данных. Я думаю, что что-то упустил с этим кодом ComboBox2.SelectedItem:

Private Sub UpdateCombo()
        ComboBox2.Items.Clear()

        SQLcon.Open()
        Dim Command As SqlClient.SqlCommand = SQLcon.CreateCommand()
        Command.CommandText = "Select productName From tblProductsStocks"
        Dim SQLReader As SqlClient.SqlDataReader = Command.ExecuteReader()
        While SQLReader.Read()
            ComboBox2.Items.Add(SQLReader.Item("productName"))
        End While
        SQLcon.Close()
    End Sub

Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
SQLcon.Open()
        Dim Command As SqlClient.SqlCommand = SQLcon.CreateCommand()
        Command.CommandText = "Select * From tblProductsStocks WHERE productName=" & ComboBox2.SelectedItem
        Dim SQLReader As SqlClient.SqlDataReader = Command.ExecuteReader()
        SQLReader.Read()
        TextBox1.Text = SQLReader.Item("productType")
        TextBox2.Text = SQLReader.Item("productMass")
        SQLcon.Close()
    End Sub

1 Ответ

0 голосов
/ 10 ноября 2019

Пожалуйста, включите Option Strict. Это процесс из 2 частей. Сначала для текущего проекта. В обозревателе решений дважды щелкните Мой проект. Выберите Compile слева. В раскрывающемся списке Option Strict выберите ON. Второе для будущих проектов - зайдите в Меню инструментов -> Параметры -> Проекты и решения -> VB по умолчанию. В раскрывающемся списке Option Strict выберите ON. Это избавит вас от ошибок во время выполнения.

Соединения должны быть удалены, а также закрыты для возврата в пул соединений. Если есть ошибка, ваш код может даже не закрыть соединение. Если вы сохраняете объекты базы данных локальными, вы можете контролировать их закрытие и удаление. Блоки Using...End Using позаботятся об этом за вас даже в случае ошибки. В моем коде команда является частью блока Using. Запишите запятую после конструктора соединения.

Вы можете передать строку соединения непосредственно в конструктор соединения. Аналогичным образом передайте текст команды и соединение конструктору команд.

Используйте параметры. Он не только избегает ошибок конкатенации строк, но также избегает внедрения Sql. В вашем коде выбранный элемент должен быть строкой, но вы не смогли добавить окружающие одинарные кавычки. Это не нужно, когда вы используете параметры. Текст команды - это исполняемый код для сервера, и злонамеренный пользователь может вводить вещи, которые могут испортить вашу базу данных. Параметры рассматриваются сервером как значения, а не как исполняемый код, поэтому они намного безопаснее.

Открытие соединения в последний возможный момент, прямо перед .Execute ... Соединения являются ценным ресурсом и должны быть открыты. , закрыты и утилизированы как можно быстрее. Соединение должно быть открыто, пока считыватель включен. Поэтому я переместил обновление пользовательского интерфейса (текстовые поля) за пределы блока using.

Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
    Dim String1 As String = ""
    Dim String2 As String = ""
    Using SQLcon As New SqlConnection("Your connection string"),
        Command As New SqlCommand("Select * From tblProductsStocks WHERE productName= @producName", SQLcon)
        'Check your database for the actual datatype and field size
        Command.Parameters.Add("@productName", SqlDbType.VarChar, 100).Value = ComboBox2.SelectedItem.ToString
        SQLcon.Open()
        Dim SQLReader As SqlClient.SqlDataReader = Command.ExecuteReader()
        SQLReader.Read()
        String1 = SQLReader.Item("productType").ToString
        String2 = SQLReader.Item("productMass").ToString
    End Using 'closes and disposes the connection and command
    TextBox1.Text = String1
    TextBox2.Text = String2
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...