Проверьте, пересекается ли временной диапазон в C #

1

В настоящее время я разрабатываю простую систему регистрации на С#, и я думаю, что есть простой способ проверить, пересекается ли определенный временной диапазон (From-To) моего входного сеанса с диапазоном времени в базе данных.

Сценарий выглядит следующим образом:

У меня есть таблица в моей базе данных с именем tblSessionList которая хранит разные сеансы для каждого объекта, и я хочу проверять каждый раз, когда пользователь добавляет новый сеанс, если конкретный Room занят уже в этом конкретном временном диапазоне. Технически, я хочу проверить, не выбран ли выбранный временной диапазон для сеансов в tblSessionList.

Изображение 174551

tblSessionList

 | Subject Code |   Venue    |   Room   |        Date             |  From   |   To    |
 |              |            |          |                         |         |         |
 |   CRGOV401   |  GT Tower  | Room 3D  | Thursday, June 19, 2014 | 8:00 AM |10:00 AM |
 |   CRGOV401   |  GT Tower  | Room 59  | Sunday, June 29, 2014   | 1:00 PM |3:00  PM |
 |   GNBNK201   | Main Plaza | HR Hall  | Monday, June 30, 2014   | 9:00 AM |11:00 AM |
 |   GNBNK201   | Main Plaza | HR Hall  | Monday, June 30, 2014   | 1:00 PM |3:00     |

Я попытался сделать следующее:

 private void btnAddSession_Click(object sender, EventArgs e)
    {
        bool proceedCopy = true;

        DataTable timeHolder = new DataTable();
        SqlDataAdapter selectTime = new SqlDataAdapter("select [From],[To] from tblSessionList where [Venue] = @venue and [Room] = @room", Connection.conn);
        selectTime.SelectCommand.Parameters.AddWithValue("@venue", venue.Text);
        selectTime.SelectCommand.Parameters.AddWithValue("@room", room.Text);

        selectTime.Fill(timeHolder);


        for(int i = 0; i < timeHolder.Rows.Count; i++)
       {

        if(timeHolder[i][0].toString() == From.Text) //checks if the 'From' of the query is the same with the 'From' of the new entry
              {
                MessageBox.Show("The room is already occupied on that time range");
                proceedCopy = false;
                break;
              }

        else if(timeHolder[i][1].toString() == To.Text) //checks if the 'To' of the query is the same with the 'To' of the new entry.
              {
                 MessageBox.Show("The room is already occupied on that time range");
                 proceedCopy = false;
                 break;
              }
        }
       if(proceedCopy == true)
           //insert code to insert new session to database here
    }

Это жестко запрограммированная проверка, и это проверяет только конечные точки временного диапазона, а не сам временной диапазон. Я думаю, если есть функция в С#, которую я мог бы использовать как Time, а не DateTime.

Примечание. Каждый столбец в моей базе данных является varchar. Мои извинения за наличие грязного кода для этого - моя первая система.

Любая помощь приветствуется.

  • 5
    Это то, что вы ищете? stackoverflow.com/questions/13513932/...
  • 0
    Обычно вы передаете это в базу данных как часть вашего запроса. Совет: используйте EXISTS вместо COUNT в запросе.
Показать ещё 2 комментария
Теги:
algorithm
winforms
visual-studio-2012

1 ответ

0

Вы можете использовать дерево интервалов для поиска в базе данных. Дерево интервалов хранит диапазон (a, b) и строит BST из него с использованием сравнения между двумя интервалами и решает, идет ли он влево или вправо. Поиск по дереву интервалов может быть выполнен в O (logn).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню