Читатель if и else оператор

0

Я занимаюсь программированием в Visual Basic. У меня есть 2 формы в визуальной базовой. Первая форма имеет командную кнопку, которая будет отображать входные данные из второй формы. Вторая форма имеет текстовое поле, где мне нужно вводить данные и сохранять их.

Данные, которые я вводил во 2-й форме, хранят его в MySQL

1-я форма имеет кнопку с названием "Показать мой класс", и если я нажму на нее, я хочу отобразить форму 2 и показать мне оценку. Он работает, однако, если я не вводил никакой оценки, а затем я нажимаю кнопку "показать мой класс", он падает, я не знаю ошибки. Я пробовал использовать код "если READER.HasRows Then: но все равно он не будет работать и пробовал, если READER.Read then: else MessageBox.Show(" на данный момент нет ввода оценки ") Пожалуйста, помогите.

Это мой текущий код в командной кнопке в форме 1.

Me.Visible = False
Form2.Show()


    MySqlConn = New MySqlConnection
        MySqlConn.ConnectionString = "server=localhost;userid=root;password=qwerty;database=ssg"
        Dim COMMAND As New MySqlCommand
        Dim READER As MySqlDataReader
        MySqlConn.Open()
        COMMAND.Connection = MySqlConn
        COMMAND.CommandText = "select grade from gradetable"
        READER = COMMAND.ExecuteReader
        Form2.TextBox1.Text = READER("grade")                             
        End Sub

Он работает до тех пор, пока я вводил оценку сначала, однако, если я не вводил оценку, она сработает.

Если я нажму кнопку "Показать мой класс" в форме 1 без ввода оценки в форме 2, я хотел бы просто отобразить сообщение "У вас пока нет оценки",

Пожалуйста помоги.

  • 0
    Какова реальная логика, по которой вы хотите выбрать grade из таблицы? На данный момент вы выбираете grade из всех рядов. Это действительно то, что вы хотите?
  • 0
    Помимо упомянутой выше проблемы, если вы провели какое-либо исследование устройств чтения данных, вы знаете, что для доступа к любым данным вам необходимо вызвать их метод Read . Когда вы в первый раз вызываете Read , извлекается первая запись в наборе результатов, и вы можете получить доступ к ее данным. Read будет возвращать True каждый раз, когда он успешно читает строку, поэтому он возвращает False когда больше нет записей для чтения.
Показать ещё 1 комментарий
Теги:

1 ответ

0
  1. Оператор Using с подходящим End Using. Это вместо Dim. Это гарантирует, что ваши объекты будут правильно закрыты и удалены, даже если есть ошибка. Это особенно важно для соединений, которые должны быть закрыты как можно скорее.

  2. Я использовал конструктор соединения для передачи в строке соединения. Установка свойства прекрасна. Это просто сохраняет строку кода.

  3. Такая же идея с конструктором команд. Он может принимать текст команды и соединение. Сохраняет небольшую типизацию.

  4. У вас была правильная идея; используя .HasRows. Вам просто нужно было добавить READER.Read чтобы перейти к первой записи, как описано в комментариях jmcilhinney.

Private Sub GetGrade()
    Using MySqlConn As New 
        MySqlConnection("server=localhost; userid=root; password=qwerty; database=ssg")
        Using COMMAND As New MySqlCommand("select grade from gradetable", MySqlConn)
            MySqlConn.Open()
            Using READER As MySqlDataReader = COMMAND.ExecuteReader
                If READER.HasRows Then
                    READER.Read()
                    Form2.TextBox1.Text = READER("grade")
                Else
                    MessageBox.Show("Sorry, no grade yet.")
                End If
            End Using
        End Using
    End Using
End Sub
  • 0
    @Ahmend Abdelhameed Спасибо. Я обвиняю майское обновление Windows 10. Именно тогда начались проблемы с форматированием.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню