Я разрабатываю приложение WPF, которое сохраняет пользовательские регистры и даты в базе данных Access. У меня не было проблем с вставкой дат, но теперь я хочу получить с помощью DataReader некоторые даты с определенным условием (например, все даты за текущий месяц). Когда я пытаюсь прочитать его через приложение, DataReader не возвращает строк. Но когда я пытаюсь выполнить тот же запрос в DBeaver, он возвращает данные.
Эта проблема чтения возникает только тогда, когда я пытаюсь прочитать даты с определенным условием, как я уже говорил ранее, поскольку, если я пытаюсь прочитать все даты, проблем нет.
Я попытался использовать параметризованную команду, а также напрямую вставить условие с помощью String.Format()
.
У меня есть эта функция (которая пытается вычислить, сколько дней вмесяц остается, если мы не считаем дни, сохраненные в БД):
public static int CalculateDaysLeftInMonth()
{
int days = 0;
List<DateTime> dates = new List<DateTime>();
try
{
if (dbConnection.State != ConnectionState.Open)
dbConnection.Open();
OleDbCommand dbCommandQuery = new OleDbCommand {
CommandText = "SELECT * FROM DatesTable WHERE Date LIKE @Condition"
}
dbCommandQuery.Parameters.AddWithValue("@Condition", String.Format("{0:yyyy-MM}-%", DateTime.Now));
OleDbDataReader dbReader = dbCommandQuery.ExecuteReader();
if (!dbReader.HasRows)
return -1;
while (dbReader.Read())
{
dates.Add(new FechaFestivo(dbReader.GetDateTime(0).Date));
}
dbConnection.Close();
DateTime startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1),
endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
if (!dates.Any(ff => ff.Date == date.Date))
{
days++;
}
}
}
catch (OleDbException ex)
{
dbConnection.Close();
return -1;
}
return days;
}
Это параметризованная версия. Я также пытался использовать:
dbCommandQuery.CommandText = String.Format("SELECT * FROM DatesTable WHERE Date " +
"LIKE '{0:yyyy-MM}-%'", DateTime.Now);
Я ожидаю получить список таких дат, поэтому я могу перебирать их:
(CalendarioLaboral
будет DatesTable
и FechaFestivo
будет Dates
)
Заранее спасибо.