الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

خطاء في SqlDataReader

بدأه عبآآآآدي في 25 أكتوبر 2011 · 2 رد · 647 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

There is already an open DataReader associated with this Command which must be closed first.( رسالة الخطاء )

ما اريده في الكود الأسفل هو ارجاع رقم الطالب وعمل عليه باسورد لرقم عشوائي بجانب كلمة

بحيث كل طالب له رقم لوحده ولكن بشكل عشوائي ابتداء من سجل حتى أخرى سجل في حالة

لو كان هناك سجلات

public int RandomNumber(int min, int max)
    {

        Random rand = new Random();

        return rand.Next(min, max);

    }

    public void setPasswordStudents()
    {
         int count = 0;

         using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
         {


             using (SqlCommand cmd1 = new SqlCommand())
             {

                 cmd1.Connection = con;
                 cmd1.CommandText = " select count(*) from Students";
                 con.Open();
                 count = (int)cmd1.ExecuteScalar();
                 con.Close();



             }

             if (count > 0)
             {

                 using (SqlCommand cmd2 = new SqlCommand())
                 {

                     cmd2.Connection = con;


                     cmd2.CommandText = "select  SID from Students";
                     con.Open();

                     SqlDataReader r = cmd2.ExecuteReader();


                      SqlCommand cmd = new SqlCommand();
                    while(r.Read()) {


                             cmd.Connection = con;
                             cmd.CommandText = "Update  Students set  PasswordStudent='ASHWAQ' WHERE SID=@SID;";
                             cmd.CommandType = CommandType.Text;

                              cmd.Parameters.AddWithValue("@random", "ASHWAQ" + RandomNumber(10,50));
                             cmd.Parameters.AddWithValue("@SID", r["SID"]);



                             cmd.ExecuteNonQuery();

                    }
                    con.Close();




                     }



                     }        



             }

         }

جزاكم الله الف خير ،،

هو يطلب مني اغلاق SqlDataReader

قبل تنفيذ الأمر cmd.executeNonQuery

فلما اغلقه هناك لوب يرجع فيلقى SqlDataReader مغلق

فتظهر هذه الرسالة لما اغلقه قبل cmd.executeNonQuery

Invalid attempt to call Read when reader is closed

اي فكرة ممكن تحل المشكلة تغيير جذري في الكود أنا على الرحب والسعه بس تحل المشكلة جد تعبت

تم تعديل هذه المشاركة بواسطة عبآآآآدي في 25 أكتوبر 2011 في 13:16

#2

السلام عليكم ورحمه الله وبركاته

اخي جرب الكود التالي

using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
using(SqlCommand cmd = new SqlCommand("Select SID From Students",conn))
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if(reader.HasRows)
while(reader.Read())
UpdateStudentByID(Convert.ToInt32(reader["SID"].ToString()));
}
}

وهذه هي الدوالة المساعدة

public int RandomNumber(int min, int max)
{
Random rand = new Random();
return rand.Next(min, max);
}

public void UpdateStudentByID(int ID)
{ 
using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
using(SqlCommand cmd = new SqlCommand("Update Students Set Password=@Password Where SID=@ID",conn))
{
conn.Open();
cmd.Parameters.AddWithValue("Password",RandomNumber(10,100));
cmd.Parameters.AddWithValue("ID",ID);
cmd.ExecuteNonQuery();
}
}
}

.:: Wish to become better and better ::.

#3

تسلم يالغالي ،،،

تم حل المشكلة من مساعدتك جزاك الله الف خير

مواضيع مشابهة