C# SQL选定日期之间的可用仪器

C# SQL选定日期之间的可用仪器,c#,sql,C#,Sql,我有一个仪器预订系统,我想找到可用的仪器 当仪器在所选日期之间不在租赁表中时,我想选择所有仪器信息 我使用下面的代码,但它没有返回任何结果,应该有5个可用的 public List<Instrument> availableInstruments(DateTime startDate, DateTime returnDate) { //string startDate1 = startDate.ToString("yyyy-MM-dd HH:mm:ss.fff

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

当仪器在所选日期之间不在租赁表中时,我想选择所有仪器信息

我使用下面的代码,但它没有返回任何结果,应该有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;
    }
我使用了两个表一个仪器表和一个租赁表,dateout和returndate在租赁表中

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


欢迎您提供任何帮助。

在您的选择中尝试此功能

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

表结构+示例数据+预期输出plz。不要让我们猜测我试图添加一个图像,但由于某些原因我不被允许。很抱歉谢谢你的回复,我将尝试用更多信息编辑帖子。谢谢你,我使用了你的回复,并在其中添加了一些我的回复,以后会进行更广泛的测试。我无法添加最终代码,因为@symbols抱歉。非常感谢。