[英]How to check if an element is available in a database?
我已经启动了一个 C# 控制台(.net 框架),我想在数据库中插入一个新的预订,但首先我必须检查我要租的汽车是否存在并且可用(它不在出租)。 可用是指我想租车的时间间隔应该是免费的。 这是我的问题。 如何通过开始时间和结束时间来检查它? 对此有特殊查询吗?
例如,如果我想在 2020 年 5 月 12 日至 13 日之间租车,查询将类似于?
Select StartDate, EndDate
from Reservations
where (StartDate < 'startDate = 12/05/2020' and EndDate > 'startDate = 12/05/2020') or (StartDate < 'endDate = 13/05/2020' and EndDate > 'endDate = 13/05/2020')
这是我对汽车存在的尝试:
public bool validateCartRentData(CartRent rent)
{
bool validation = true;
using (databaseConnection = new SqlConnection())
{
try
{
setDatabaseConection();
databaseConnection.Open();
string query = "SELECT COUNT(*) FROM [Cars] WHERE ([Plate] = @Plate)";
SqlCommand checkCarModel = new SqlCommand(query, databaseConnection);
checkCarModel.Parameters.AddWithValue("@Plate", rent.car.plate);
int carExists = (int)checkCarModel.ExecuteScalar();
Console.WriteLine(carExists);
if (carExists < 0)
{
return validation;
}
}
catch (SqlException e)
{
Console.WriteLine(e);
}
return false;
}
}
这是我的数据库 model:
我是第一次使用数据库,所以请不要对我太苛刻! 谢谢!
Select StartDate, EndDate from Reservations where (StartDate < 'startDate = 12/05/2020' and EndDate > 'startDate = 12/05/2020') or (StartDate < 'endDate = 13/05/2020' and EndDate > 'endDate = 13/05/2020')
首先,如果开始和结束日期是我们的输入,我们会想要 output 别的东西,可能像carID
查看日期时,我们需要在新预订开始之前结束预订,或者在旧预订结束后开始新预订。 这里有一个假设,即预订在开始之前永远不会结束,我希望这是安全的。 ;)
NewStart
和NewEnd
是我们要检查的新预订日期。
SELECT carID
FROM Reservations
WHERE (StartDate > NewEnd) OR (EndDate < NewStart)
这将为我们提供所有与我们的新租赁不重叠的租赁汽车的列表。 然而,这可能包括一辆有另一辆出租汽车的汽车。 如果我们否定WHERE
语句,我们可以得到一个carID
的列表,该列表具有无效的保留。 然后我们只需要一个不在该列表中的carID
列表:
SELECT DISTINCT carID /*Available Cars*/
FROM Reservations /*Could also take this from a cars table*/
WHERE carID NOT IN
(SELECT carID /*Unavailable Cars*/
FROM Reservations
WHERE NOT((StartDate > '2020-05-16') OR (EndDate < '2020-05-14')))
有效预订在我们的新预订之后或之前结束。 获取所有预订无效的汽车的列表。 获取不在上一个列表中的所有汽车的列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.