Чтение и сравнение значений данных в базе данных MySQL в vb.net

Я пытаюсь получить ввод от пользователя, проверить его по моей базе данных и посмотреть, существует ли он в базе данных. Если это так, программа должна получить фамилию, имя и гонорары соответствующего лица и вывести их.

Код:

Imports Mysql.Data.MySqlClient

Public Class Form1
    Dim reader As MySqlDataReader
    Dim command As New MySqlCommand

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim myConnectionString As String

        myConnectionString = "server=localhost;" _
              & "uid=root;" _
              & "pwd=Emma@21*GCTU;" _
              & "database=dummystudents"

        Try
            Dim conn As New MySql.Data.MySqlClient.MySqlConnection(myConnectionString)
            conn.Open()
            Dim sql As String = "SELECT idstudents FROM students WHERE idstudents = @TextBox1.Text "
            command = New MySqlCommand(sql, conn)
            reader = command.ExecuteReader()

            If reader.Read() Then
                TextBox2.Text = reader(1)
                TextBox3.Text = reader(2)
                TextBox4.Text = reader(3)
            End If

        Catch ex As MySql.Data.MySqlClient.MySqlException
            MessageBox.Show(ex.Message)
        End Try
    End Sub
End Class
...WHERE idstudents =" & textbox1.text ? Ваше окно сообщения показывает какие-либо ошибки?
Nathan_Sav 17.05.2022 12:36

@Nathan_Sav после вставки этого ... WHERE idstudents =" & textbox1.text TextBox2.Text = reader(1) был отмечен этим кодом ошибки «System.IndexOutOfRangeException: 'Индекс был за пределами массива».

KB 21 17.05.2022 12:59

Я не уверен, с какой проблемой вы столкнулись, но в своем запросе на выбор вы выбираете только IDstudents. поэтому, если позже вы попытаетесь прочитать свои данные. вы бы читали только IDstudents. в операторе выбора добавьте только те поля, которые вам нужно выбрать.

Demeteor 17.05.2022 13:33

Ни у одного проекта не должно быть TextBoxes с такими общими именами. ВСЕГДА меняйте имена ваших элементов управления на что-то осмысленное, например. a TextBox для хранения заданного имени должен называться givenNameTextBox или тому подобное.

user18387401 17.05.2022 14:14
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
4
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот ваш код SQL:

SELECT idstudents FROM students WHERE idstudents = @TextBox1.Text

Какой смысл вытаскивать idstudents, когда это ценность, которую вы вкладываете? Хуже того, это ВСЕ, что вы вытаскиваете, а затем делаете следующее:

TextBox2.Text = reader(1)
TextBox3.Text = reader(2)
TextBox4.Text = reader(3)

что потребует от вас отступить как минимум на четыре столбца.

Модификация, упомянутая в комментариях, вполне может заставить ваш код выполняться, но это неправильный путь. Похоже, вы пытались использовать параметр, но не смогли. Делайте это, но делайте это правильно, т.е.

Dim sql As String = "SELECT idstudents, otherColumnsHere FROM students WHERE idstudents = @idstudents"

Using connection As New MySqlConnection(myConnectionString),
      command As New MySqlCommand(sql, connection)
    command.Parameters.Add("@idstudents", MySqlDbType.Int32).Value = CInt(TextBox1.Text)
    conn.Open()

    Using reader = command.ExecuteReader()
        If reader.Read() Then
            TextBox2.Text = reader(1)
            TextBox3.Text = reader(2)
            TextBox4.Text = reader(3)
        End If
    End Using
End Using

Другие вопросы по теме