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

#c# #database #sql-server-ce #sql-delete

#c# #База данных #sql-server-ce #sql-удалить

Вопрос:

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

 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();
        }
}
  

Это работает, только если я перезапущу приложение.

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

Комментарии:

1. startDatetime amp; endDatetime фильтрует результат — вы меняете их после удаления запроса или они меняются только после перезапуска приложения?

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

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

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

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