У меня есть Неверная попытка вызова Чтение, когда ошибка чтения закрыта, когда я выполняю проект на 3 уровня на языке C#. То, что я пытаюсь сделать, это получить столбцы данных адреса путем объединения двух таблиц вместе и отображения в выпадающем списке. Вот мой уровень доступа к данным:C# Неверная попытка вызова Чтение, когда читатель закрыт
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;
}
И это мой 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;
}
Я отделил их на два класса так, что всякий раз, когда моя строка соединения изменяется, я могу изменить весь проект легко, изменив класс FoodBankDB.
И это мой бизнес-логики:
public List<Distribution> getAllScheduledDistribution()
{
List<Distribution> allDistribution = new List<Distribution>();
Distribution distributionDAL = new Distribution();
allDistribution = distributionDAL.getDistributionAll();
return allDistribution;
}
И последнее, но не менее, мой уровень представления:
List<Distribution> scheduledList = new List<Distribution>();
scheduledList = packBLL.getAllScheduledDistribution();
ddlScheduleList.DataSource = scheduledList;
ddlScheduleList.DataTextField = "address";
ddlScheduleList.DataValueField = "address";
ddlScheduleList.DataBind();
Это работает хорошо, если бы я не расколоть слой доступа к данным и класс строки подключения. Кто-нибудь знает, как решить эту ошибку?
Заранее спасибо.
Обновленный участок
public static string GetConnectionString()
{
return connectionString;
}
бы вы ум, чтобы показать мне пример о том, как это решить? Потому что я немного смущен –
См. Пример выше. Я надеюсь, что нет никаких небольших ошибок, поскольку я не могу запустить код сейчас. – Szymon
Я должен закодировать GetConnectionString() как обновленную часть? Или я делаю не так? –