У меня возникла очень сложная проблема. Я пытаюсь создать функцию, которая при задании даты/времени начала и даты/времени окончания определяет, перекрывается ли какая-либо из них с другой датой/временем в базе данных SQLite, и возвращает true или false в зависимости от результата. После много возни, это было лучшее, что мне удалось придумать:
Код: Выделить всё
public static async Task DetermineOverlap(DateTime start, DateTime end)
{
await Init();
// Convert DateTime to string in the format that SQLite understands
string startFormatted = start.ToString("yyyy-MM-dd HH:mm:ss");
string endFormatted = end.ToString("yyyy-MM-dd HH:mm:ss");
// Raw SQL query to check if the time ranges overlap
string query = @"
SELECT COUNT(*)
FROM Appointment
WHERE
(StartDateTime < @end AND EndDateTime > @start) OR
(@start < EndDateTime AND @end > StartDateTime);";
var count = await _db.ExecuteScalarAsync(query, new object[] { startFormatted, endFormatted });
// Check if any record exists in the result, indicating an overlap
return count > 0;
}
Теперь у меня есть отдельная функция, которая в качестве теста получает существующие записи StartDateTime и EndDateTime из базы данных. Я точно знаю, что это 2025-01-23 01:00:00 и 2025-01-23 01:15:00 соответственно. Теперь параметры, которые я передаю в DefinityOverlap, — это DateTime, состоящий из 23 января 2025 года 1:00:00 и 23 января 2025 года 1:45:00 (поэтому я конвертирую строковый формат)... последний из них явно перекрывается с 1:15 ночи. Проблема в том, что, несмотря ни на что, функция всегда возвращает False. Я экспериментировал с множеством разных способов сделать это, но безрезультатно. Я упускаю что-то очень очевидное? Спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... ing-sqlite