1

ユーザーが午前 7:00 ~ 正午 12:00 にその部屋にイベントを追加した場合のコードを次に示します。その時点では利用できないはずですが、私のコードは開始時間と終了時間のみを読み取ります。何か提案はありますか?

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;
}
4

3 に答える 3

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にMSDNを参照してくださいBETWEEN

于 2013-03-06T10:22:40.093 に答える
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
于 2013-03-06T10:32:52.510 に答える
1

開始時間と終了時間の間に占有されている部屋が必要です。最も簡単なのは、開始時刻が Starting_Time と Ending_Time の間にあるかどうかを確認することです。

Starting_Time < @start AND Ending_Time > @start

しかし、それは半分の仕事です。また、予約済みで @start と @end の間 (またはそれ以降) に終了する部屋も必要です。これの余分なケースを理解できると思います。

注: データベースで Starting_Time と Ending_Time の日付を作成します。

于 2013-03-06T10:21:28.160 に答える