При чтении данных из таблицы одно из моих числовых значений возвращается как -1, а не значение, заданное пользователем.Странная проблема при получении данных из моей базы данных
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
Dim conn As New MySqlConnection("server=localhost;user=root;database=new_project;port=3306;password=********;")
conn.Open()
Dim command As New MySqlCommand("SELECT * FROM students;", conn)
Dim dataSet As New DataSet()
Dim dataAdapter As New MySqlDataAdapter()
dataAdapter.SelectCommand = command
dataAdapter.Fill(dataSet, "students")
Dim dataTable As DataTable = dataSet.Tables("students")
For x As Integer = 0 To dataTable.Rows.Count - 1
Dim newStudent As New Student
newStudent.intIDNum = dataTable.Rows(x).Item("idNumber")
newStudent.strFirstName = dataTable.Rows(x).Item("firstName")
newStudent.strLastName = dataTable.Rows(x).Item("lastName")
newStudent.chrGender = dataTable.Rows(x).Item("gender")
newStudent.dateDOB = dataTable.Rows(x).Item("dateOfBirth")
newStudent.intAge = CInt(Today.Year - newStudent.dateDOB.Year)
newStudent.intYearGroup = dataTable.Rows(x).Item("yearGroup")
newStudent.intSkillLevel = dataTable.Rows(x).Item("skillLevel")
studentList.Add(newStudent)
lstStudents.Items.Add(newStudent.nameConcat(newStudent.strFirstName, newStudent.strLastName))
Next
conn.Close()
Catch ex As Exception
MsgBox("Error: " & ex.ToString())
End Try
End Sub
При чтении значения «skillLevel» он должен читать от 1 до 4, но вместо этого он читает -1. Это не произошло с данными, добавленными непосредственно в базу данных через MySQL, но при использовании метода в моей программе, похоже, эта проблема возникает.
Dim newStudent As New Student
newStudent.strFirstName = txtForename.Text
newStudent.strLastName = txtSurname.Text
newStudent.dateDOB = dtpStudentDOB.Value
If rdbMale.Checked = True Then
newStudent.chrGender = "M"
Else
newStudent.chrGender = "F"
End If
newStudent.intAge = newStudent.calcAge(dtpStudentDOB.Value)
newStudent.intSkillLevel = cmbSkillLevel.SelectedItem
newStudent.intYearGroup = cmbYearGroup.SelectedItem
newStudent.intIDNum = CInt(txtStudentID.Text)
Dim conn As New MySqlConnection("server=localhost;user=root;database=new_project;port=3306;password=********;")
Try
conn.Open()
Dim command As MySqlCommand = New MySqlCommand
command.Connection = conn
command.CommandText = "INSERT INTO Students VALUES(@IdNumber, @firstName, @lastName, @gender, @dateOfBirth, @yearGroup, @skillLevel);"
command.Prepare()
command.Parameters.AddWithValue("@IdNumber", newStudent.intIDNum)
command.Parameters.AddWithValue("@firstName", newStudent.strFirstName)
command.Parameters.AddWithValue("@lastName", newStudent.strLastName)
command.Parameters.AddWithValue("@gender", newStudent.chrGender)
command.Parameters.AddWithValue("@dateOfBirth", newStudent.dateDOB)
command.Parameters.AddWithValue("@yearGroup", newStudent.intYearGroup)
command.Parameters.AddWithValue("@skillLevel", newStudent.intSkillLevel)
command.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Error: " & ex.ToString())
Finally
conn.Close()
End Try
Это раздел кода, в котором ученик добавлен в систему. Что именно может вызвать эту ошибку?
Для справки, основной формой добавить в данных использует перечисление:
Private Enum SkillLevels As Integer
One = 1
Two = 2
Three = 3
Four = 4
End Enum
А потом я связать его с выпадающего меню: cmbSkillLevel.DataSource = System.Enum.GetValues(GetType(SkillLevels))
Думаю, вам нужно 'newStudent.intSkillLevel = cmbSkillLevel.SelectedItem.Value'. 'SelectedItem' - это объект, поэтому, возможно, VB.NET неявно бросает его и дает вам ненадежную ценность? Вы можете найти достаточно легко, выставив окно сообщения с помощью 'newStudent.intSkillLevel = cmbSkillLevel.SelectedItem' и' newStudent.intSkillLevel = cmbSkillLevel.SelectedItem.Value'. –
Я попытался использовать 'cmbSkillLevel.SelectedValue', но проблема не устранена. Однако это происходит только в том случае, если я закрываю программу и затем снова ее открываю. –
Что такое тип стороны базы данных столбца skillLevel? Предполагая, что это целочисленный тип, вы пробовали передать команду. Параметр.AddWithValue ("@ skillLevel", CInt (newStudent.intSkillLevel))? – tolanj