Почему SQL-запрос не возвращает результатов?

Я использую базу данных SQL Server Compact для хранения данных датчика, собранных через последовательный порт, в приложении С#. Я использую следующий запрос для получения данных, и он отлично работает:

public List<Record> GetData(DateTime startDatetime, DateTime endDatetime, string sensor)
{
        dataTable = new DataTable();

        using (connection = new SqlCeConnection(connectionString))
        {
            connection.Open();
            dataAdapter = new SqlCeDataAdapter("SELECT * FROM data WHERE sensor = @sensor AND dt BETWEEN @startDatetime AND @endDatetime", connection);
            dataAdapter.SelectCommand.Parameters.AddWithValue("@startDatetime", startDatetime);
            dataAdapter.SelectCommand.Parameters.AddWithValue("@endDatetime", endDatetime);
            dataAdapter.SelectCommand.Parameters.AddWithValue("@sensor", sensor);

            dataAdapter.Fill(dataTable);
            connection.Close();
        }

        List<Record> records = new List<Record>();

        foreach (DataRow row in dataTable.Rows)
        {
            records.Add(new Record
            {
                Id = (int)row["Id"],
                dt = (DateTime)row["dt"],
                sensor = row["sensor"].ToString(),
                port = (int)row["port"],
                measuredValue = row["measuredValue"].ToString(),
                value = (double)row["value"],
                unit = row["unit"].ToString()
            });
        }

        return records;
}

Проблема в том, что если я удалю все записи в базе и подождите, пока база данных будет заполнена несколькими записями, запрос не вернет результатов!

Это запрос на удаление:

public void DeleteAllData()
{
        using (connection = new SqlCeConnection(connectionString))
        {
            connection.Open();

            using (SqlCeCommand command = new SqlCeCommand("DELETE FROM data", connection))
            {
                command.ExecuteNonQuery();
            }

            connection.Close();
        }
}

Работает только если перезапустить приложение.

Кто-нибудь знает, почему я не могу получить какие-либо записи после использования запроса на удаление? Я подтверждаю, что база данных содержит записи.

startDatetime и endDatetime фильтруют результат — вы меняете их после запроса на удаление или они меняются только после перезапуска приложения?
Lanorkin 19.03.2019 14:37

Я считаю, что дата/время, которые вы предоставляете, не обновляются перед вызовом запроса.

Neil 19.03.2019 14:37

У вас могут возникнуть проблемы с обеими функциями, использующими одно и то же соединение и работающими одновременно. Возможно, вы получаете исключение, о котором не сообщается.

jdweng 19.03.2019 14:40

@Lanorkin Спасибо, что заметили это. Действительно, две даты и времени были одинаковыми, и все записи после удаления БД имели дату и время выше, чем endDatetime. Это решено сейчас. Еще раз спасибо! Вы можете опубликовать это предложение, чтобы я мог отметить его как ответ.

Cristian M 19.03.2019 14:42

@CristianM Я рад слышать, что это помогло, но я не думаю, что это действительно ценный ответ для сообщества; Я голосую за оффтоп, так как этот «был вызван проблемой, которую больше нельзя воспроизвести, или простой типографской ошибкой. Хотя подобные вопросы могут быть здесь по теме, этот был решен способом, который вряд ли поможет будущим читателям».

Lanorkin 19.03.2019 14:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
371
0

Другие вопросы по теме