C # Tentativa inválida de chamar Ler quando o leitor está fechado
Estou tendo tentativa inválida de chamar ler quando o leitor está fechado erro quando estou fazendo o projeto de 3 camadas em linguagem C #. O que estou tentando fazer é recuperar a coluna de dados de endereço unindo duas tabelas e exibindo uma lista suspensa. Aqui está minha camada de acesso a dados:
public List<Distribution> getDistributionAll()
{
List<Distribution> distributionAll = new List<Distribution>();
string address;
SqlDataReader dr = FoodBankDB.executeReader("SELECT b.addressLineOne FROM dbo.Beneficiaries b INNER JOIN dbo.Distributions d ON d.beneficiary = b.id");
while (dr.Read())
{
address = dr["addressLineOne"].ToString();
distributionAll.Add(new Distribution(address));
}
return distributionAll;
}
E esta é minha classe FoodBankDB:
public class FoodBankDB
{
public static string connectionString = Properties.Settings.Default.connectionString;
public static SqlDataReader executeReader(string query)
{
SqlDataReader result = null;
System.Diagnostics.Debug.WriteLine("FoodBankDB executeReader: " + query);
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
result = command.ExecuteReader();
connection.Close();
return result;
}
Separei os dois em duas classes para que, sempre que minha cadeia de conexão fosse alterada, eu pudesse alterar o projeto inteiro facilmente alterando a classe FoodBankDB.
E esta é a minha camada de lógica de negócios:
public List<Distribution> getAllScheduledDistribution()
{
List<Distribution> allDistribution = new List<Distribution>();
Distribution distributionDAL = new Distribution();
allDistribution = distributionDAL.getDistributionAll();
return allDistribution;
}
E por último mas não menos importante, minha camada de apresentação:
List<Distribution> scheduledList = new List<Distribution>();
scheduledList = packBLL.getAllScheduledDistribution();
ddlScheduleList.DataSource = scheduledList;
ddlScheduleList.DataTextField = "address";
ddlScheduleList.DataValueField = "address";
ddlScheduleList.DataBind();
Ele estava funcionando bem se eu não dividir a camada de acesso a dados e a classe de string de conexão. Alguém sabe como resolver esse erro?
Desde já, obrigado.
Porção atualizada
public static string GetConnectionString()
{
return connectionString;
}