我正在做一个小组项目,试图建立一个简单的会议室预订系统,但是我找不到一种方法来进行验证,以防止人们在同一时间预订同一房间。
下面的代码仅阻止人们在同一时间预订,如果一个人在上午8点至上午10点预订房间,则该代码可以阻止其他用户同时预订同一房间。但是另一位用户将可以在同一天的上午9点至上午11点预订同一房间。
Dim theQuery As String = "Select * from Reservation where VenueID = @VenueID and ReserveStartTime = @ReserveStartTime or ReserveStartTime = @ReserveEndTime and ReserveEndTime = @ReserveEndTime or ReserveEndTime= @ReserveStartTime"
Dim check As SqlCommand = New SqlCommand(theQuery, Conn)
check.Parameters.AddWithValue("@ReserveEndTime", DateTime.Parse(cboEndTime.Text).ToShortTimeString)
check.Parameters.AddWithValue("@ReserveStartTime", DateTime.Parse(cboStartTime.Text).ToShortTimeString)
check.Parameters.AddWithValue("@VenueID", Integer.Parse(grdVenueReservation.SelectedCells(0).Value.ToString))
'to prevent the users from booking venue at the same time
Dim reader2 As SqlDataReader = check.ExecuteReader
If reader2.HasRows Then
MsgBox("Venue is already booked by other staff on the same time and date")
Else
我认为您需要在select语句中使用BETWEEN运算符。
请检查:
Select data from date range between two dates
问候
然后,请确保您以与数据库字段相同的格式传递DateTime参数。检查:SqlDbType.Date,SqlDbType.DateTime和SqlDbType.DateTime2。