user1410081
user1410081

Reputation:

MysqlException was unhandled DataReader with this connection must be closed vb.net

I have encountered this problem:

ERROR: There is already an open DataReader associated with this Connection which must be closed first.

Please have a look on my code:

 Dim sqlQuery As String = "SELECT * FROM users"
    Dim myAdapter As New MySqlDataAdapter

    If txtUsername.Text = String.Empty And txtPassword.Text = String.Empty Then
        MsgBox("Enter username and password", MsgBoxStyle.Exclamation, "Tea Sparkle POS")
    Else
        Dim sqlquerry = "Select * From users where username = '" + txtUsername.Text + "' And password= '" + txtPassword.Text + "'"
        Dim myCommand As New MySqlCommand()
        myCommand.Connection = SQLConnection
        myCommand.CommandText = sqlquerry
        'Starting The Query
        myAdapter.SelectCommand = myCommand
        Dim mydata As MySqlDataReader
        mydata = myCommand.ExecuteReader()
        'To check the Username and password and to validate the login a
        If mydata.HasRows = 0 Then
            MsgBox("Invalid Login")
            txtPassword.Clear()
            txtUsername.Clear()
        Else
            Dim authorityid = 0
            While mydata.Read()
                authorityid = mydata.GetInt32("authorityid")
            End While
            MsgBox("Welcome " + txtUsername.Text + "!")
            If authorityid = 1 Then
                MainForm.Show()
            Else
                MainForm.Show()
            End If
            Me.Hide()
        End If
    End If


    Private Sub Login_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    SQLConnection.ConnectionString = ServerString

    Try
        If SQLConnection.State = ConnectionState.Closed Then
            SQLConnection.Open()
        Else
            SQLConnection.Close()
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

End Sub

This error is in this line:

 mydata = myCommand.ExecuteReader()

What's wrong with this? Any help is truly appreciated.

Upvotes: 0

Views: 3113

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1500873

What's wrong with this?

Well, it looks like you're reusing an existing connection:

myCommand.Connection = SQLConnection

Don't do that. Create a new connection each time you need to talk to the database, and close it when you've finished, using a Using statement to make sure it gets closed even if an exception is thrown.

Additionally, use a Using statement for your command, and another for your reader - these are all resources you should be closing.

Oh, and it also looks like you're doing this in the UI thread, which is a bad idea as your UI will be unresponsive while the database access is ongoing.

Upvotes: 3

Related Questions