mysql vb.net已经有一个与此连接关联的开放数据读取器

时间:2016-05-13 10:26:00

标签: mysql vb.net

我已经添加了reader.dispose(),但它仍然显示异常

  

已经有一个与此连接关联的开放DataReader,必须先关闭它。

请不要介意Sql注入。我很快就会解决这个问题。

Private Sub ItemStore(ByVal itemname)
        mydbcon = New MySqlConnection
        mydbcon.ConnectionString = "server=localhost;userid=root;password=;database=sdudb"
        Dim reader As MySqlDataReader
        Try
            mydbcon.Open()
            Dim Query As String
            Query = "select * from inventory where itemname = '" & itemname & "'"
            COMMAND = New MySqlCommand(Query, mydbcon)
            reader = COMMAND.ExecuteReader()
            While reader.Read
                AddItemstoDatabase(reader.GetString("itemcategory"), reader.GetString("itemname"), reader.GetString("price"), reader.GetString("stockcount"))
            End While
            reader.Close()
            reader.Dispose()
            mydbcon.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub AddItemstoDatabase(ByVal itemcategory, ByVal itemname, ByVal price, ByVal stock)
        mydbcon = New MySqlConnection
        mydbcon.ConnectionString = "server=localhost;userid=root;password=;database=sdudb"
        Try
            mydbcon.Open()
            Dim Query As String
            Query = "INSERT into itemstored(itemcategory, itemname, price, stockcount) VALUES('" & itemcategory & "', '" & itemname & "', '" & price & "', '" & stock & "')"
            Dim rowsadded = COMMAND.ExecuteNonQuery()
            If rowsadded = 0 Then
                MessageBox.Show("Failed to update database")
            End If
            mydbcon.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

3 个答案:

答案 0 :(得分:2)

由于您的方法ItemStore已经为相同的连接字符串打开了连接,并且再次使用相同的方法调用另一个函数AddItemstoDatabase,该函数也将使用相同的连接字符串。 由于这个原因,你得到了这个例外

  

已经有一个与此连接关联的开放DataReader,必须先关闭它。

并且您无法在不关闭早期打开连接的情况下为同一个连接字符串打开多个连接。

<强>更新 不确定它是否适用于您的场景,尝试评论连接obj,因为它是全局的

Private Sub AddItemstoDatabase(ByVal itemcategory, ByVal itemname, ByVal price, ByVal stock)
    'mydbcon = New MySqlConnection
    'mydbcon.ConnectionString = "server=localhost;userid=root;password=;database=sdudb"
    Try
        'mydbcon.Open()
        Dim Query As String
        Query = "INSERT into itemstored(itemcategory, itemname, price, stockcount) VALUES('" & itemcategory & "', '" & itemname & "', '" & price & "', '" & stock & "')"
        COMMAND.CommandText = Query 
        Dim rowsadded = COMMAND.ExecuteNonQuery()
        If rowsadded = 0 Then
            MessageBox.Show("Failed to update database")
        End If
        'mydbcon.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

答案 1 :(得分:0)

变化:

mydbcon = New MySqlConnection 

为:

Dim mydbcon = New MySqlConnection

它会起作用。

您正在使用全局声明的连接变量 并且正如错误所述,您不能同时在1个连接中打开2个数据读取器。

答案 2 :(得分:0)

所以我可以通过添加

来修复它
COMMAND = New MySqlCommand(Query, mydbcon)
查询与COMMAND.ExecuteNonQuery()

之间的

谢谢大家的其他答案!