Я получаю ошибку в этой форме входа, которую я создал, которая "Connection должна быть действительной и открытой, может кто-то мне помочь, вот код. Я не могу понять, что это за ошибка, и мне нужна ваша помощь.
Imports MySql.Data.MySqlClient
Public Class LoginForm1
Dim Username As String
Dim Password As String
Public StudentName As String
'MySql
Dim connection As New MySqlConnection("Server=server;User ID=id;Password=pass;Database=data;SSLMode=None")
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Username = UsernameTextBox.Text
Password = PasswordTextBox.Text
StudentName = NameTextBox.Text
Dim command As New MySqlCommand("SELECT 'Username', 'Password', 'FirstName' FROM 'people' WHERE 'Username' = @username AND 'Password' = @password And 'FirstName' = @name", connection)
command.Parameters.Add("@username", MySqlDbType.VarChar).Value = Username
command.Parameters.Add("@password", MySqlDbType.VarChar).Value = Password
command.Parameters.Add("@name", MySqlDbType.VarChar).Value = StudentName
Dim adapter As New MySqlDataAdapter(command)
Dim table As New DataTable()
Dim reader As MySqlDataReader = command.ExecuteReader
adapter.Fill(table)
If table.Rows.Count = 0 Then
MessageBox.Show("Invalid Username Or Password", "Invalid Login", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("Logged In", "Logged in Successfully", MessageBoxButtons.OK, MessageBoxIcon.Information)
MainMenuForm.Show()
Me.Close()
End If
End Sub
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
Me.Close()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim webAddress As String = "http://windowsadvancedstudy.com"
Process.Start(webAddress)
End Sub
End Class
Вам не нужно декларировать читателя, если вы используете adapter.Fill
. Удалите эту строку:
Dim reader As MySqlDataReader = command.ExecuteReader
Точно выстройте линию выше исключения. Потому что reader
требуется открытое соединение.
И добавьте строку:
command.CommandType = CommandType.Text
Попробуйте открыть соединение перед его использованием.
И используйте для этого блок "использования", чтобы он правильно выглядел.
Кроме того, это хорошая практика НЕ хранить учетные данные в коде, использовать для этого файл конфигурации.
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Dim connection As MySqlConnection
Using(connection As New MySqlConnection("Server=server;User ID=id;Password=pass;Database=data;SSLMode=None")
connection.Open()
Username = UsernameTextBox.Text
Password = PasswordTextBox.Text
StudentName = NameTextBox.Text
Dim command As New MySqlCommand("SELECT 'Username', 'Password', 'FirstName' FROM 'people' WHERE 'Username' = @username AND 'Password' = @password And 'FirstName' = @name", connection)
command.Parameters.Add("@username", MySqlDbType.VarChar).Value = Username
command.Parameters.Add("@password", MySqlDbType.VarChar).Value = Password
command.Parameters.Add("@name", MySqlDbType.VarChar).Value = StudentName
Dim adapter As New MySqlDataAdapter(command)
Dim table As New DataTable()
Dim reader As MySqlDataReader = command.ExecuteReader
adapter.Fill(table)
If table.Rows.Count = 0 Then
MessageBox.Show("Invalid Username Or Password", "Invalid Login", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("Logged In", "Logged in Successfully", MessageBoxButtons.OK, MessageBoxIcon.Information)
MainMenuForm.Show()
Me.Close()
End If
End Using
End Sub
adapter.Fill
не требует ни читателя, ни открытого соединения.
adapter.Fill
не требует открытого соединения.