0
我正在尝试创建POS(销售点)应用程序,并且出现此错误。 “已经有一个开放的DataReader与这个Connection关联,必须先关闭它。”与此连接关联的打开DataReader必须先关闭
下面是我的代码:使用MySQL
If txt_notr.Text = "" Or txt_kodep.Text = "" Or txt_item.Text = "" Or txt_gt.Text = "" Or txt_bayar.Text = "" Then
MsgBox("Data belum lengkap...!!!")
Exit Sub
Else
'Simpan ke tabel penjualan
db.Close()
db.Open()
Call Koneksi()
Dim simpan1 As String = "Insert Into tb_penjualan values('" & txt_notr.Text & "','" & Format(Now, "yyyy-MM-dd") & "','" & txt_kodep.Text & "','" & txt_item.Text & "','" & txt_gt.Text & "','" & txt_bayar.Text & "')"
cmd = New MySqlCommand(simpan1, db)
cmd.ExecuteNonQuery()
db.Close()
db.Open()
'Simpan ke tabel detail penjualan
For baris As Integer = 0 To DGV.Rows.Count - 2
Dim simpandet As String = "Insert into tb_detjual values('" & txt_notr.Text & "','" & DGV.Rows(baris).Cells(0).Value & "','" & DGV.Rows(baris).Cells(3).Value & "','" & DGV.Rows(baris).Cells(4).Value & "','" & DGV.Rows(baris).Cells(5).Value & "')"
cmd = New MySqlCommand(simpandet, db)
cmd.ExecuteNonQuery()
db.Close()
db.Open()
cmd = New MySqlCommand("Select * from tb_stok where id_obat = '" & DGV.Rows(baris).Cells(0).Value & "'", db)
dr = cmd.ExecuteReader
dr.Read()
If dr.HasRows Then
Dim kurangstok As String = "Update tb_stok set stok = '" & dr.Item("stok") - DGV.Rows(baris).Cells(4).Value & "' where id_obat = '" & DGV.Rows(baris).Cells(0).Value & "'"
cmd = New MySqlCommand(kurangstok, db)
cmd.ExecuteNonQuery() 'The Error shows here...
End If
Next
Call hapustemp()
Call bersih()
Call notrans()
End If
db.Close()
你为什么叫db.Close; ,紧接着重新开放它后?我还想指出,这似乎是开放的sql注入(读取使用sqlParameters代替) – jbutler483 2014-12-05 09:55:32
错误消息是明确的。您正尝试使用已被打开的DataReader使用的连接。您必须先关闭数据读取器(dr),然后才能在另一个查询中使用该连接。顺便说一句,您的查询可以广泛应用于Sql Injection攻击。您应该使用参数化查询。 – 2014-12-05 14:17:20
感谢球员的评论,无论如何,我已经删除了“db.close”像jbutler483建议,但我真的不知道我应该把“dr.close” – 2014-12-05 23:40:55