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