Исправьте ошибку VB.NET «Соединение должно быть действительным и открытым»

0

Я получаю ошибку в этой форме входа, которую я создал, которая "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
  • 0
    Можете ли вы написать код и описать, что вы хотите сказать в ответе?
  • 1
    @the_lotus adapter.Fill не требует открытого соединения.
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

Вам не нужно декларировать читателя, если вы используете adapter.Fill. Удалите эту строку:

Dim reader As MySqlDataReader = command.ExecuteReader

Точно выстройте линию выше исключения. Потому что reader требуется открытое соединение.

И добавьте строку:

command.CommandType = CommandType.Text
  • 0
    Позвольте мне проверить, если это работает
  • 0
    Это действительно работает, спасибо за вашу помощь.
Показать ещё 1 комментарий
0

Попробуйте открыть соединение перед его использованием.

И используйте для этого блок "использования", чтобы он правильно выглядел.

Кроме того, это хорошая практика НЕ хранить учетные данные в коде, использовать для этого файл конфигурации.

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
  • 1
    Я хочу еще раз подчеркнуть, что adapter.Fill не требует ни читателя, ни открытого соединения.

Ещё вопросы

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