Я использую базу данных 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();
}
}
Работает только если перезапустить приложение.
Кто-нибудь знает, почему я не могу получить какие-либо записи после использования запроса на удаление? Я подтверждаю, что база данных содержит записи.
Я считаю, что дата/время, которые вы предоставляете, не обновляются перед вызовом запроса.
У вас могут возникнуть проблемы с обеими функциями, использующими одно и то же соединение и работающими одновременно. Возможно, вы получаете исключение, о котором не сообщается.
@Lanorkin Спасибо, что заметили это. Действительно, две даты и времени были одинаковыми, и все записи после удаления БД имели дату и время выше, чем endDatetime. Это решено сейчас. Еще раз спасибо! Вы можете опубликовать это предложение, чтобы я мог отметить его как ответ.
@CristianM Я рад слышать, что это помогло, но я не думаю, что это действительно ценный ответ для сообщества; Я голосую за оффтоп, так как этот «был вызван проблемой, которую больше нельзя воспроизвести, или простой типографской ошибкой. Хотя подобные вопросы могут быть здесь по теме, этот был решен способом, который вряд ли поможет будущим читателям».
startDatetime
иendDatetime
фильтруют результат — вы меняете их после запроса на удаление или они меняются только после перезапуска приложения?