Пожалуйста, включите 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