Friday, August 9, 2013

Sharing Everything From My Experience And Knowlegde

Sharing Everything From My Experience And Knowlegde


Cara Mengatasi Error [RESOLVED] : There is already an open DataReader associated with this Command which must be closed first. VBNET

Posted: 08 Aug 2013 05:13 PM PDT

Mungkin diantara sahabat djiesoft semua pernah mengalami error :
There is already an open DataReader associated with this Command which must be closed first.
kenapa ini terjadi ? ok, sebelum saya jelaskan saya mempunyai contoh source code :
Dim con As SqlConnection
con = New SqlConnection("data source=.\sql2012;user id=djie;password=123;initial catalog=djiesodt_db;")
con.Open()
Using cmd As New SqlCommand("select * from produk", con)
      Using dreader As SqlDataReader = cmd.ExecuteReader
            Do While dreader.Read
               Using cmd2 AsNew SqlCommand("select * from produk_detail where produk_id='"& dreader("produk_id") & "'", con)
                     Usingdreader2 As SqlDataReader= cmd2.ExecuteReader
                           Do Whiledreader2.Read
 ListView1.Items.Add(dreader("produk_id").ToString).SubItems.Add(dreader2("produk_id_detail").ToString)
                            Loop
                      EndUsing
                End Using
             Loop
        End Using
End Using
 Lihatlah ada ExecuteReader didalam ExecuteReader, jadi yang pertama adalah looping Reader dari
"select * from produk", nah selama looping ke semua produk kita juga ingin mengetahui produk detail nya apa saja, maka looping lagi dengan menggunakan ExecureReader lagi dengan dari "select * from produk_detail where produk_id='yg sedang di looping'.
Nah pada saat ExecuteReader yang kedua lah terjadi error diatas, artinya kita tidak bisa melakukan :
1.ExecuteReader jika masih ada ExecuteReader lain yang masih Aktif 
2.ExecuteReader di dalam ExecuteReader lain
So, apa solusinya mas pandji??? hehehe. Solusinya minimal ada dua :
1.Kita harus pandai dalam melakukan sql query, karena sebenarnya dari contoh kasus diatas kita bisa lakukan hanya dengan 1 kali looping (1x ExecuteReader)  yaitu dengan Sql Query :
SELECT A.PRODUK_ID, B.PRODUK_ID_DETAIL FROM PRODUK AS A JOIN PRODUK_DETAIL AS B ON A.PRODUK_ID=B.PRODUK_B

2.Cara yang paling simple dan mudah adalah dengan menambahkan atribut MultipleActiveResultSets=True  pada ConnectionString, jadi connection string-nya menjadi seperti ini :


con = New SqlConnection("data source=.\sql2012;user id=djie;password=123;initial catalog=djiesoft_db;MultipleActiveResultSets=True")

Dengan ini tidak perlu mengubah sql query atau mengubah looping. Jadi kesimpulan terakhirnya adalah, selalu gunakan atribut MultipleActiveResultSets=True  disetiap connectionString anda agar aman.

Tags:
fix error There is already an open DataReader associated with this Command which must be closed first., tips dan trik mengatasi error There is already an open DataReader associated with this Command which must be closed first., vbnet error There is already an open DataReader associated with this Command which must be closed first.solution of There is already an open DataReader associated with this Command which must be closed first.


No comments:

Post a Comment