所选日期之间的SQL可用工具

时间:2017-02-08 19:48:22

标签: c# sql

我有一个仪器预订系统,我想找到可用的仪器。

我希望在所选日期之间仪器不在租赁表中时选择所有仪器信息。

我正在使用以下代码,但它没有返回任何结果(应该有5个可用)

public List<Instrument> availableInstruments(DateTime startDate, DateTime returnDate)
    {
        //string startDate1 = startDate.ToString("yyyy-MM-dd HH:mm:ss.fff");
        //string returnDate1 = returnDate.ToString("yyyy-MM-dd HH:mm:ss.fff");
       List<Instrument> availableInstruments = new List<Instrument>();
       db.Cmd.Parameters.Add(new SqlParameter("@startDate1", startDate));
       db.Cmd.Parameters.Add(new SqlParameter("@returnDate1", returnDate));
       db.Cmd.CommandText = "SELECT * FROM InstrumentTBL WHERE InstrumentID NOT IN (SELECT InstrumentTBL.InstrumentID FROM InstrumentTBL IT JOIN RentalTBL DT ON IT.InstrumentID = DT.InstrumentID Where(DT.DateOut <= @startDate1  AND DT.ReturnDate >= @returnDate1) OR (DT.DateOut < @returnDate1 AND DT.ReturnDate >= @returnDate1) OR (@startDate1 <= DT.DateOut AND @returnDate1 >= DT.DateOut))";
       db.Rdr = db.Cmd.ExecuteReader();
       while (db.Rdr.Read())
       {
           availableInstruments.Add(getInstrumentFromReader(db.Rdr)); // store into list
       }
        db.Rdr.Close();
        return availableInstruments;
    }

我正在使用2张表,一张工具表和一张租赁表,日期和退货都在租赁表中。

我从另一个线程获得了代码,但我试图采用它,但收效甚微。

欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

在您的选择中尝试此操作

SELECT * FROM InstrumentTBL 
WHERE InstrumentID NOT 
IN (SELECT DT.InstrumentID 
    FROM RentalTBL DT 
    Where(DT.DateOut >= @startDate1  AND DT.ReturnDate <= @returnDate1))