Masalahnya adalah, untuk beberapa alasan, DataReader Anda tidak ditutup. Pengecualian? Pengguna metode tidak ingat untuk menutup DataReader?
Fungsi yang mengembalikan DataReader untuk digunakan di luar tubuhnya meninggalkan tanggung jawab untuk menutupnya ke kode luar, jadi tidak ada jaminan bahwa Reader akan ditutup. Jika Anda tidak menutup pembaca, Anda tidak dapat menggunakan kembali koneksi yang membukanya.
Jadi, mengembalikan DataReader dari suatu fungsi adalah ide yang sangat buruk!
Anda dapat melihat seluruh diskusi tentang topik ini di sini .
Cari kegunaan fungsi ini (GetDataReader
), dan periksa apakah ada jaminan bahwa pembaca akan ditutup. Dan yang terpenting, tidak ada kemungkinan kode ini masuk kembali dan menggunakan koleksi yang sama untuk membuka DataReader baru sebelum yang pertama ditutup. (Jangan disesatkan oleh CommandBehavior.CloseConnection. Ini hanya menangani penutupan koneksi saat DataReader ditutup... hanya jika Anda tidak gagal menutupnya)