修复vb.net错误“连接必须有效且打开”

zkure5ic  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(392)

我得到一个错误,在这个登录表,我已经创建了这是“连接必须是有效的和开放的,有人可以帮助我,这是代码。我无法理解这个错误是什么,我需要你的帮助。

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
qncylg1j

qncylg1j1#

尝试在使用前打开连接。
使用一个“using”块,这样就可以正确地处理它。
另外,最好不要将凭据存储在代码中,而是使用配置文件。

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
2ekbmq32

2ekbmq322#

如果正在使用,则不需要声明reader adapter.Fill . 删除此行:

Dim reader As MySqlDataReader = command.ExecuteReader

正是上面的行引发了异常。因为 reader 需要打开连接。
并添加行:

command.CommandType = CommandType.Text

相关问题