我在网上预订房间时遇到了问题。
我有3张如下表:
表Room
:
表BookingHeader
:
表BookingItem
:
我对此代码有疑问。这没有错,但房间不能预订其他预订。当房间与booking_id
保留时,日期永远不会返回。
for (int countt = 1; countt <= totalcc; countt++)
{
DataTable dtRoom = new DataTable();
string Sql = ("SELECT TOP 1 rooms.Room_ID FROM TB_MAS_Room rooms
WHERE rooms.Room_ID NOT IN(SELECT t1.Room_ID FROM TB_TRA_BookingItem t1
INNER JOIN TB_TRA_BookingItem t2 ON t1.Room_ID = t2.Room_ID
INNER JOIN TB_TRA_BookingHeader t3 ON t2.Booking_ID = t3.Booking_ID
WHERE not ([DateOut] < t3.DateIn or [DateIn] > t3.DateOut))");//new
SqlCommand sqlCom = new SqlCommand(Sql,con);
con.Open();
SqlDataAdapter da = new SqlDataAdapter(sqlCom);
da.Fill(dtRoom);
if(dtRoom.Rows.Count>0)
{
SqlCommand sc = new SqlCommand("INSERT INTO TB_TRA_BookingItem
([Booking_ID],[BookingItemID],[Room_ID])
VALUES('"+ id +"','"+ countt +"','"+ dtRoom.Rows[0]["Room_ID"].ToString() +"')",con);
sc.ExecuteNonQuery();
}
else
{
//if room not avialable
}
con.Close();
}
那么,我该怎么办?
请解释我在代码中遗漏的内容。
答案 0 :(得分:0)
为什么你没有更新那个房间的状态到#34;预订&#34;或1-0
你应该在表室添加一个列
RoomStatus Bit,
当您通过简单查询插入新的预订更新此行时 更新TableName设置RoomStatus = 1其中Room_ID = Get_Room_ID_FromBooking
执行此操作后,您将能够检查房间是否已预订