检查房间供应情况

时间:2013-03-06 10:08:08

标签: c# sql sql-server logic

如果用户在上午7:00-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;
}

3 个答案:

答案 0 :(得分:3)

不确定,如果我正确地表达了您的意图,但如果您想检查@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)

请参阅BETWEEN on MSDN了解BETWEEN

答案 1 :(得分:2)

首先,您需要将开始和结束时间的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 DateTime.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

答案 2 :(得分:1)

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

Starting_Time < @start AND Ending_Time > @start

但那只是半职业。您还需要预订的房间,并在@start和@end(甚至更晚)之间结束。我想你可以找出额外的案例。

注意:在数据库中创建Starting_Time和Ending_Time日期。