嗨我正在研究ASP.NET中的酒店预订项目。我想制作一个过滤器,以便可以按日期搜索可用房间(例如6月1日至6月5日之间),之后预订该房间。如何将该房间的状态更改为“不可用”期间,以便有人希望在15月15日至30日之间预留该房间可以做到这一点。房间的状态是我的数据库中的布尔值。更改某些日期范围的布尔值
到目前为止,我显示所有房间与状态可用。但是当我介绍database.But房间我不知道如何改变现状的状态设置,如果它是可以设置的状态一个房间在一段时间内为真,然后在另一个时段为假
嗨我正在研究ASP.NET中的酒店预订项目。我想制作一个过滤器,以便可以按日期搜索可用房间(例如6月1日至6月5日之间),之后预订该房间。如何将该房间的状态更改为“不可用”期间,以便有人希望在15月15日至30日之间预留该房间可以做到这一点。房间的状态是我的数据库中的布尔值。更改某些日期范围的布尔值
到目前为止,我显示所有房间与状态可用。但是当我介绍database.But房间我不知道如何改变现状的状态设置,如果它是可以设置的状态一个房间在一段时间内为真,然后在另一个时段为假
不需要你请求的数据库结构的变化,并支持MarkP3rry描述的超时功能,你只需要在预订表中添加一个字段:BookingDate DATETIME
。您应该使用预订表来检查可用性。如果没有针对与提供的开始和结束日期重叠的房间进行预订,则该房间可用于该期间,除非预订已被取消。
要确定哪个房间是两个日期间,将使用以下查询:
SELECT r.*
FROM Room r LEFT JOIN Reservation v ON r.RoomID = v.RoomID
AND NOT (@StartDate >= Date_Check_Out OR @EndDate <= Date_Check_In)
AND v.cancel = 0
WHERE v.ReservationID IS NULL
这会给你所有这一切都毫无保留的反对则@EndDate
之间@StartDate
和房间。您当然可以通过房间状态,房间类型等进一步过滤此查询。假设在提供的日期进行了验证,即@StartDate < @EndDate
和Reservation.Check_In_Date < Reservation.Check_Out_Date
。该加入将返回所有房间,并且只有其日期与提供的开始和结束日期重叠的预订。添加AND v.cancel = 0
仅包含尚未取消的预订。然后,我们筛选出包含任何预订数据的结果,剩下的是两个日期之间的可用房间。
谢谢你,这就是我正在寻找的。现在我会尝试实现它,但我需要将它转换为LINQ并不知道如何,但我会以某种方式解决它。 – jonny
首先,您的数据库结构不正确。您必须在预订表中具有状态字段,以便您可以明智地了解过渡历史。
因为在您目前的情况下,您的房间可能全天有空,或整天都会关闭。您应该创建一个房间状态表,在该表中您应该有每日状态记录并根据该表格验证您的房间选择。
使状态的默认值为true。因此,默认情况下,每个房间默认都可以预订。
@ianco斯洛伐克,我真的觉得你必须改变你的数据库结构。
我真的不明白我在roomstatus表中保存了什么? ReservationID,RoomID,状态和一些日期? – jonny
准确地说,您需要在roomstatus表中填写所有这些字段,并且此表格每天必须为每个房间设置一个条目。 –
只是为了让大家都明白 - 您是否想要像Ticketmaster那样做某些事情,当某人正在通过预订流程时,它可以阻止预订房间(也可能会说'您有两分钟时间预订这个房间“)? – markp3rry
就是这样。我预留了一段时间的房间,之后该房间将不再提供该时段的预订。 – jonny
ianco,查看我的描述 –