2013-03-06 71 views
1

如果用户在7:00 AM-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 ([email protected] OR Ending_Time = @endtime) AND (Room = @room) AND ([email protected])", 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; 
} 
+0

它可在8:00 AM - 11:00 PM。 – 2013-03-06 10:09:10

+3

http://www.sqlservercentral.com/Forums/Topic1054236-338-1.aspx – spender 2013-03-06 10:10:27

+2

小提示:你想知道哪个房间可用_开始时间和结束时间。 – RvdK 2013-03-06 10:10:33

回答

1

您希望在开始时间和结束时间之间占用一个房间。最简单的方法是检查启动时间是否在任何Starting_Time和Ending_Time之间。

Starting_Time < @start AND Ending_Time > @start 

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

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

3

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

SELECT * FROM Subject WHERE (
(Starting_Time BETWEEN @start AND @endtime) 
OR 
(Ending_Time BETWEEN @start AND @endtime) 
) AND (Room = @room) AND ([email protected]) 

的理解BETWEENBETWEEN on MSDN

+0

嘿,它的工作原理,我是新来的SQL,我有吨做。感谢您的回答。 – 2013-03-06 10:27:14

+0

+1,用于考虑在请求的插槽期间*结束的现有时间跨度的情况。如果我可以指向BETWEEN,我会投票两次:) – 2013-03-06 10:28:07

+0

Jan DarrenNoroña:我很高兴它有帮助,请仔细看看BETWEEN如何处理边缘条件(当开始时间完全相同时参数),如果这种处理方式与您的意图一致)。顺便说一句,标记答案已被接受,所以具有相同问题的人会看到解决方案。 – Isantipov 2013-03-06 11:19:48

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