mengapa saya tidak bisa menggunakan dua pembaca data dalam satu prosedur?

dapatkah Anda menjelaskan mengapa saya tidak dapat menggunakan dua pembaca data dalam prosedur?

Berikut ini contoh kodenya:

Private Sub  Do_Execute()

  Dim conx as SqlConnection
  Dim cmd1 as SqlCommand
  Dim cmd2 as SqlCommand

  Dim drd1 as SqlDataReader
  Dim drd2 as SqlDataReader

  conx = new SqlConnection("connection string")
  conx.Open()

     cmd1 = new SqlCommand("SELECT * FROM Category" , conx)
     drd1 = cmd1.ExecuteReader()

     While (drd1.Read())
     {
        Reading Data From drd1
     }

     cmd2 = new SqlCommand("SELECT * FROM Stock" , conx)
     drd2 = cmd2.ExecuteReader()

     While (drd2.Read())
     {
        Reading Data From drd2
     }

End Sub

Ketika saya menjalankan program itu, ia memunculkan pesan pengecualian: " Sudah ada DataReader terbuka yang terkait dengan Perintah ini yang harus ditutup terlebih dahulu! "

Ketika saya menutup drd1 sebelum drd2 diinisialisasi. Berhasil.

Mengapa saya tidak bisa menggunakan kode seperti di atas? Tolong jelaskan padaku. Terima kasih sebelumnya!


person RedsDevils    schedule 23.11.2009    source sumber
comment
SELALU Tutup/Buang SqlDataReaders Anda. Anda juga harus melakukan hal yang sama untuk SqlConnection Anda   -  person Brannon    schedule 23.11.2009
comment
Ya, Brannon! Terima kasih atas saran Anda! Saya menutup semua koneksi dan objek pembaca di blok akhirnya.   -  person RedsDevils    schedule 23.11.2009


Jawaban (3)


Saya belum pernah mencoba ini sebelumnya tetapi itu mungkin.

Baca Menggunakan Beberapa Kumpulan Hasil Aktif dan,
Mengaktifkan Beberapa Kumpulan Hasil Aktif di MSDN

Perhatikan ini untuk SQL2005 dan yang lebih baru.

Kutipan dari salah satu artikel:

Untuk mengakses beberapa kumpulan hasil pada versi SQL Server sebelumnya menggunakan objek SqlDataReader, objek SqlConnection terpisah harus digunakan dengan setiap objek SqlCommand.

person o.k.w    schedule 23.11.2009
comment
Terima kasih ! Saya dapat menggunakannya sekarang dengan Mengaktifkan MARS di koneksi saya. - person RedsDevils; 23.11.2009

Itu karena Anda sebenarnya berbagi koneksi yang sama.

Anda juga perlu:
1) menggunakan koneksi yang berbeda untuk setiap SqlCommand, yang merupakan cara asli yang biasa Anda lakukan untuk melakukan ini

or

2) gunakan MARS (Beberapa Kumpulan Hasil Aktif) seperti yang dijelaskan di sini

person AdaTheDev    schedule 23.11.2009
comment
Saya menggunakan cara kedua Anda! Terima kasih sekarang berhasil! :) Terima kasih banyak! Jika saya menggunakan koneksi berbeda, bagaimana dengan performa antara menggunakan koneksi berbeda dan menggunakan MARS? bisakah kamu membalasku? - person RedsDevils; 23.11.2009
comment
Mengingat MARS diperkenalkan untuk tujuan ini, maka hal itulah yang harus dilakukan. Dengan pendekatan beberapa koneksi, setiap koneksi akan memerlukan sumber daya server db sehingga ada overhead untuk setiap koneksi. Juga, lihat stackoverflow.com/questions/510899/ - person AdaTheDev; 23.11.2009

Artikel ini menjelaskan apa masalahnya, dan memperkenalkan solusinya jika Anda menggunakan SQL Server. Solusinya disebut MARS, atau Beberapa Kumpulan Catatan Aktif, dan tersedia di SQL Server 2005 dan versi yang lebih baru.

person Pete OHanlon    schedule 23.11.2009
comment
Terima kasih ! Jawaban Anda juga berguna untuk pertanyaan saya! - person RedsDevils; 23.11.2009