Les sucede eso porque no están cerrando los DataReaders, ya que sólo se permite un DataReader por conexión a la vez.
Por ejm, el siguiente código no manda error (al menos en mi caso
):
Código:
SqlConnection conn=new SqlConnection("server=.;uid=sa;database=Northwind");
SqlCommand com1=new SqlCommand("Select * from customers", conn);
SqlCommand com2=new SqlCommand("Select * from categories", conn);
IDataReader rd1, rd2;
conn.Open();
rd1 = com1.ExecuteReader();
while (rd1.Read())
{
Console.WriteLine(rd1["ContactTitle"]);
}
rd1.Close();
rd2 = com2.ExecuteReader();
while(rd2.Read())
{
Console.WriteLine(rd2["CategoryName"]);
}
rd2.Close();
conn.Close();
Para evitar problemas es mejor trabajar con estructuras Try/Catch/Finally, otra alternativa para evitar el problema que mencionas es usar la instrucción
using (c#)
Saludos