检查房间是否可用

本文关键字:是否 房间 检查 | 更新日期: 2023-09-27 18:02:25

如果用户在7:00AM-12:00NN向该房间添加一个事件,则代码如下:所以在那个时候应该是不可用的,但是我的代码只读取开始时间和结束时间,有什么建议吗?

public bool checkSched(string start, string endtime, string room, string day)
{
    myCon.Open();
    SqlDataReader dr;
    bool found = false;
    SqlCommand cmd = new SqlCommand("SELECT * FROM Subject WHERE (Starting_Time=@start OR Ending_Time = @endtime) AND (Room = @room) AND (Day=@day)", myCon);
    cmd.Parameters.Add("@start", SqlDbType.NVarChar).Value = start;
    cmd.Parameters.Add("@room", SqlDbType.NVarChar).Value = room;
    cmd.Parameters.Add("@day", SqlDbType.NVarChar).Value = day;
    cmd.Parameters.Add("@endtime", SqlDbType.NVarChar).Value = endtime;
    dr = cmd.ExecuteReader();
    found = dr.HasRows;
    myCon.Close();
    return found;
}

检查房间是否可用

不确定,如果我正确理解你的意图,但是如果你想检查@start@endtime之间是否有任何事件重叠,你应该使用BETWEEN:

SELECT * FROM Subject WHERE (
(Starting_Time BETWEEN @start AND @endtime) 
OR 
(Ending_Time BETWEEN @start AND @endtime)
) AND (Room = @room) AND (Day=@day)

参见MSDN上的BETWEEN了解BETWEEN

首先需要将开始和结束时间的sql结果字符串转换为DateTime类型。

 //start and end time from the room stored in the DB
 DateTime startTimeDB;
 DateTime endTimeDB;
 DateTime.TryParse(dateString, out startTime)
 DateTime.TryParse(dateString, out endTime)

查看此链接以获取更多信息:MSDN日期时间。TryParse

你也使用字符串在你的方法参数的开始和结束时间,是否有可能使用DateTime类型那里?否则,您还需要将参数字符串解析为DateTime对象:

 //start and end time for your new event
 DateTime startTimeNew;
 DateTime endTimeNew;
 DateTime.TryParse(start, out startTimeNew)
 DateTime.TryParse(endtime, out endTimeNew)

之后尝试这样做:

if (startTimeNew.Ticks > startTime.Ticks && endTimeNew.Ticks < endTime.Ticks)
{
    return false;
}
return true

您想要一个在开始时间和结束时间之间被占用的房间。最简单的方法是检查起始时间是否在Starting_Time和Ending_Time之间。

Starting_Time < @start AND Ending_Time > @start

但这只是一半的工作。您还希望预订的房间在@start和@end之间结束(甚至更晚)。我想你可以算出这个额外的情况。

注意:在你的数据库中设置Starting_Time和Ending_Time日期