Error : there is already an open DataReader associated with this Command which must be closed frist
الخطأ الظاهر عندك هو:
System.InvalidOperationException: "There is already an open DataReader associated with this Command which must be closed first."
معنى الخطأ:
ده معناه إنك بتستخدم SqlDataReader (أو أي DataReader تاني) على نفس SqlCommand، لكن فيه DataReader شغال بالفعل ومفتوح، ولسه مقفلتوش قبل ما تفتح واحد جديد.
الحلول:
✅ 1. تأكد إنك بتقفل الـDataReader بعد ما تخلص منه
SqlDataReader reader = command.ExecuteReader();
// اقرأ البيانات هنا
reader.Close(); // مهم جداً تقفله
✅ 2. أو استخدم using علشان يتقفل أوتوماتيكياً
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// التعامل مع البيانات
}
} // هنا بيتقفل تلقائياً
✅ 3. لو مضطر تفتح DataReader تاني على نفس الاتصال، فعّل MultipleActiveResultSets
في connection string ضيف:
MultipleActiveResultSets=true;
مثلا :
string connectionString = "Server=.;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true;";
- لو مش محتاج تقرأ من أكتر من DataReader في نفس الوقت، استخدم reader.Close() أو using.
- لو فعلاً عندك أكثر من قراءة بنفس الوقت من نفس الـConnection، فعّل MultipleActiveResultSets=true.

إرسال تعليق