حل مشكلة الخطأ فى السى شارب | there is already an open DataReader associated with this Command which must be closed frist



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.

comments

أحدث أقدم