我已经添加了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
答案 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()
之间的
谢谢大家的其他答案!