Я занимаюсь программированием в 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, я хотел бы просто отобразить сообщение "У вас пока нет оценки",
Пожалуйста помоги.
Оператор Using с подходящим End Using. Это вместо Dim. Это гарантирует, что ваши объекты будут правильно закрыты и удалены, даже если есть ошибка. Это особенно важно для соединений, которые должны быть закрыты как можно скорее.
Я использовал конструктор соединения для передачи в строке соединения. Установка свойства прекрасна. Это просто сохраняет строку кода.
Такая же идея с конструктором команд. Он может принимать текст команды и соединение. Сохраняет небольшую типизацию.
У вас была правильная идея; используя .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
grade
из таблицы? На данный момент вы выбираетеgrade
из всех рядов. Это действительно то, что вы хотите?Read
. Когда вы в первый раз вызываетеRead
, извлекается первая запись в наборе результатов, и вы можете получить доступ к ее данным.Read
будет возвращатьTrue
каждый раз, когда он успешно читает строку, поэтому он возвращаетFalse
когда больше нет записей для чтения.