Commish13 Ответов: 2

Попытка использовать ретранслятор в условиях "while" и "if", но считыватель не работает


Я пытаюсь заставить ретранслятор отображать мои данные изнутри условия if, но по какой-то причине он не работает. Всякий раз, когда я отлаживаю свой код, он попадает внутрь условия if, потому что оно истинно и проходит через мой код идеально, но результаты неверны. Любая помощь будет оценена по достоинству.

Спасибо

Что я уже пробовал:

private void LoadSchedule()
    {
        string connString = ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(connString))
        {
            conn.Open();
            using (SqlCommand comm = new SqlCommand("GetSchedule", conn))
            {
                using (SqlDataReader reader = comm.ExecuteReader())
                {

                    while (reader.Read())
                    {
                        DateTime localDate = DateTime.Now();
                        DateTime PoolStatusActive = Convert.ToDateTime(reader["PoolActive"]);
                        DateTime PoolStatusDisabled = Convert.ToDateTime(reader["PoolDisabled"]);

                        if (localDate > PoolStatusActive && localDate < PoolStatusDisabled)
                        {
                            myRepeater.DataSource = reader;
                            myRepeater.DataBind();
                            MessageBox.Show("True");
                        }

                        else
                        {
                            MessageBox.Show("False");
                        }
                    }
                }
            }
        }
    }

Richard Deeming

MessageBox.Show("True");

Та же проблема, что и в предыдущем вопросе: это не будет работать в веб-приложении.

2 Ответов

Рейтинг:
2

OriginalGriff

Прочтите, что я сказал, Когда вы спрашивали об этом в прошлый раз: Sql открывает соединение только один раз для нескольких читателей[^]


Commish13

Я ценю вашу помощь, но я все еще не знаю, как заставить цикл и оператор if работать вместе.

Commish13

Как я могу заставить кого-то другого взглянуть на этот вопрос?

Maciej Los

Согласитесь!

Рейтинг:
1

Richard Deeming

while (reader.Read())
Продолжает выполняться до тех пор, пока не останется больше записей для чтения.
myRepeater.DataSource = reader;
myRepeater.DataBind();
Говорит ретранслятору прочитать все оставшиеся записи и отобразить их. К этим записям не будет применен никакой фильтр. Когда DataBind() возвращается, больше нет записей для чтения.

Если вы хотите отфильтровать результаты, отображаемые в ретрансляторе, то вам нужно отфильтровать источник данных. Например:
private void LoadSchedule()
{
    string connString = ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connString))
    using (SqlCommand comm = new SqlCommand("GetSchedule", conn))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(comm);
        DataTable table = new DataTable();
        adapter.Fill(table);
        
        DateTime localDate = DateTime.Now;
        
        myRepeater.DataSource = table.AsEnumerable()
            .Where(r => r.Field<DateTime>("PoolActive") < localDate)
            .Where(r => r.Field<DateTime>("PoolDisabled") > localDate);
        
        myRepeater.DataBind(); 
    }
}