There is already an open DataReader associated with this Command which must be closed first (איך להפעיל SqlDataReader בתוך SqlDataReader)
אבל היה שווה לבוא להרצאה רק כדי לשמוע על הפיצ'ר הבא (שלמעשה קיים כבר מ - Ado 2.0)
בדרך כלל אנחנו לא יכולים להפעיל redaer כל עוד שה - reader הקודם לא נסגר (אלא אם כן נייצר connection חדש)
לדוגמא - הקוד הבא:
SqlConnection cnn = new SqlConnection(@"Data Source=sever;Initial Catalog=DB;Integrated Security=True;");
SqlCommand cmd1 = new SqlCommand("SELECT * FROM Table1", cnn);
SqlCommand cmd2 = new SqlCommand("SELECT * FROM Table2 WHERE Table2.Table1Id = @Id", cnn);
cmd1.Parameters.Add("Id", SqlDbType.Int);
cnn.Open();
SqlDataReader reader1 = cmd1.ExecuteReader();
while (reader1.Read())
{
//.... read
cmd2.Parameters[0].Value = reader1["Id"];
SqlDataReader reader2 = cmd2.ExecuteReader();
while (reader2.Read())
{
}
}
cnn.Close();
כשנגיע לשורה שבה אנחנו מנסים לייצר reader על ידי ה - cmd2 - אנחנו נעוף עם:
"There is already an open DataReader associated with this Command which must be closed first"
כדי לפתור את זה, אפשר פשוט להוסיף ל - ConnectionString את המחרוזת הבאה:
MultipleActiveResultSets=True
וזהו, מאותו רגע נוכל לייצר reader בתוך reader.