Z.Alashoor Ответов: 1

Как забронировать номер только в доступное время без риска столкновения на сайте бронирования ( ASP.NET В. Б.)?


У меня есть страница бронирования залов на этой странице (название зала, дата бронирования и время бронирования "от и до"). Например, зал "а" был забронирован на 11.12.2018 года с 12:00 до 13:00 . Таким образом,зал не должен быть забронирован повторно в это время той же даты, за исключением случаев до 12:00 или после 1:00 вечера.

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

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

Gridview1: это для вставки данных в базу данных.

Gridview2: определяется, можно ли зарезервировать зал или нет через (запрос "где").

Protected Sub Reserv_btn_Click(sender As Object, e As EventArgs) Handles Reserv_btn.Click



       If GridView2.Rows.Count > 0 Then
           Label1.Text = "Hall can not be reserved"
       Else
           If GridView1.Rows.Count > 0 Then

           ReservationDB.InsertParameters("Cpr").DefaultValue = Session.Item("cpr")
               ReservationDB.InsertParameters("Hall_Number").DefaultValue = HallName.SelectedValue
               ReservationDB.InsertParameters("Date").DefaultValue = Datetxt.Text
               ReservationDB.InsertParameters("Start_Time").DefaultValue = Startxt.Text
               ReservationDB.InsertParameters("End_Time").DefaultValue = Endtxt.Text
               ReservationDB.InsertParameters("Event_name").DefaultValue = Eventxt.Text
               ReservationDB.InsertParameters("Comments").DefaultValue = Commtxt.Text

               ReservationDB.Insert()

               Label1.Text = "hall was booked!!"
               Datetxt.Text = ""
               Startxt.Text = ""
               Endtxt.Text = ""
               Eventxt.Text = ""
               Commtxt.Text = ""

             End If
       End If

   End Sub



Это мой код в системе Запрос это значит , что:-
([Start_Time] между 'Start.text' и 'End.text')
ОПЕРАЦИОННАЯ
([End_Time] между 'Start.text' и 'End.text'))


(Start.text):это текстовое поле для времени начала.
(End.text): это текстовое поле для конечного времени.


SELECT Event_ID, Start_Time, End_Time, [Date], Event_name, Number_of_Attendees, Cpr, Hall_Number, Comments
 FROM    Resevation_of_Halls
 WHERE  (Hall_Number = ?)
 ([Date] =? )
 (([Start_Time] BETWEEN ? AND ?)
 OR
 ([End_Time] BETWEEN ? AND ?))

1 Ответов

Рейтинг:
0

OriginalGriff

Цитата:
Нет никаких признаков неисправности или ошибки, он просто не работает так, как требуется.


Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:
Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!