Sharing Everything From My Experience And Knowlegde |
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. |
You are subscribed to email updates from Djiesoft, All About Source Code To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google Inc., 20 West Kinzie, Chicago IL USA 60610 |
No comments:
Post a Comment