Vb.net 我的预订系统应用程序中避免重复预订的问题

Vb.net 我的预订系统应用程序中避免重复预订的问题,vb.net,datetime,Vb.net,Datetime,如果2011年12月27日下午5:00在数据库中存在一个预订,持续2小时,并且我试图在2011年12月27日下午5点到7点之间进行新预订,则我的代码会生成一条错误消息。即使我尝试在下午4:00预订2个小时,也会生成一条错误消息,因为第2个小时将与5:00到7:00之间已经预订的时间重叠 现在问题来了。当日期发生变化时,它不会生成错误消息,即,如果预订在2011年12月27日晚上11:00,持续3小时,则在2011年12月28日凌晨2:00之前不允许新预订,但当我尝试在2011年12月28日凌晨1

如果2011年12月27日下午5:00在数据库中存在一个预订,持续2小时,并且我试图在2011年12月27日下午5点到7点之间进行新预订,则我的代码会生成一条错误消息。即使我尝试在下午4:00预订2个小时,也会生成一条错误消息,因为第2个小时将与5:00到7:00之间已经预订的时间重叠

现在问题来了。当日期发生变化时,它不会生成错误消息,即,如果预订在2011年12月27日晚上11:00,持续3小时,则在2011年12月28日凌晨2:00之前不允许新预订,但当我尝试在2011年12月28日凌晨1:00预订时,它会将其保存在数据库中,并且不会生成错误消息。我希望在这种情况下生成一条错误消息

我在数据库中使用两个单独的字段,一个用于时间,一个用于日期。它们都有DateTime数据类型

新时间指的是我尝试进行新预订的时间

addednewtime指将持续时间添加到我尝试进行新预订的时间之后的时间

addeddbtime只包含从数据库中存储的datetime字段中提取的时间值(在数据库中添加预订持续时间后)

newdate指的是下一个日期,因为该日期在上午12:00更改,所以如果数据库预订时间为2011年12月12日晚上11:00,则新日期将包含2011年12月13日

问题在于If条件的最后一部分,当一个预订跨越两天时,If条件检查重叠预订

这是我的密码:

Dim newtime, addednewtime, addeddbtime, changetime, newdate As DateTime 'defines variables
addeddbtime = dbonlytime.AddHours(dbdur)
newtime = TxtBookTime.Text
addednewtime = newtime.AddHours(TxtBookDur.Text)



changetime = "12:00:00 AM"
newdate = dbdate.AddDays(1)

If TxtBookDate.Text = dbdate And TxtPoolNo.Text = dbpoolno And TxtCrtNo.Text = dbcrtno And TxtTblNo.Text = dbtblno And CmboGame.SelectedItem = dbgame And ((newtime > dbonlytime And newtime < addeddbtime) Or (addednewtime > dbonlytime And addednewtime < addeddbtime) Or (newtime < dbonlytime And addeddbtime > changetime And addednewtime < dbonlytime And addednewtime <= addeddbtime And TxtBookDate.Text = newdate)) Then
MessageBox.Show("The date and time you have entered has already been booked " & vbCrLf & " Try Again!", "Bookings Overlapped", MessageBoxButtons.OK, MessageBoxIcon.Stop)

Exit Sub

End If
Dim newtime、addednewtime、addeddbtime、changetime、newdate As DateTime'定义变量
addeddbtime=dbonlytime.AddHours(dbdur)
newtime=TxtBookTime.Text
addednewtime=newtime.AddHours(TxtBookDur.Text)
changetime=“12:00:00 AM”
newdate=dbdate.AddDays(1)

如果TxtBookDate.Text=dbdate和TxtPoolNo.Text=dbpoolno和TxtCrtNo.Text=dbcrtno和TxtTblNo.Text=dbtblno和CmboGame.SelectedItem=dbgame和((newtime>dbonlytime和newtimedbonlytime和addednewtimechangetime和addednewtime
  • 当前预订日期
  • 现有预订名单
  • 假设您有一个名为Booking的类,它有开始和结束日期时间(不需要为日期和时间设置单独的字段,DateTime对象同时包含这两个字段)

    您可以有这样一个例行程序,检查是否与现有预订重叠:

    Private Function BookingOverlapping(ByVal booking As Booking, ByVal existingBookings As IEnumerable(Of Booking)) As Boolean
        For Each existingBooking In existingBookings
            If booking.BeginDate < existingBooking.EndDate AndAlso booking.EndDate > existingBooking.BeginDate Then
                Return True
            End If
        Next
        Return False
    End Function
    
    Private Function BookingOverlapping(ByVal booking As Booking, ByVal existingBookings As IEnumerable(Of Booking)) As Boolean
        For Each existingBooking In existingBookings
            If booking.BeginDate < existingBooking.EndDate AndAlso booking.EndDate > existingBooking.BeginDate Then
                Return True
            End If
        Next
        Return False
    End Function
    
    ' Figure out begin and end DateTimes from user input, 
    ' then create a booking object.
    Dim currentBooking As New Booking(beginDate, endDate)
    
    ' The GetExistingBookings method would retrieve bookings from the database 
    ' and add new Booking objects to a list.
    Dim existingBookings As List(Of Booking) = GetExistingBookings()
    
    If BookingOverlapping(currentBooking, existingBookings)
        MessageBox.Show("The date and time you have entered has already been booked " & vbCrLf & " Try Again!", "Bookings Overlapped", MessageBoxButtons.OK, MessageBoxIcon.Stop)
    End If