Использование запроса выбора с датой и временем в качестве параметра создает исключение InvalidCastException
Я хочу посчитать количество записей между определенным периодом времени.
Используя Npgsql, я готовлю запрос и позже добавляю переменные части (по соображениям безопасности):
lCommand.CommandText =
"select count(*) from eggs where machineserial = :p1 and timestamp > :p2 and timestamp < :p3;";
lCommand.Parameters.AddWithValue("p1", mId);
lCommand.Parameters.Add("p2", NpgsqlTypes.NpgsqlDbType.Timestamp);
lCommand.Parameters["p2"].Value = aStartDate;
lCommand.Parameters.Add("p3", NpgsqlTypes.NpgsqlDbType.Timestamp);
lCommand.Parameters["p3"].Value = aEndDate ;
int lNumberEggs = 0;
try
{
lNumberEggs = (int)await lCommand.ExecuteScalarAsync();
}
finally
{
Helpers.clsDatabaseHelper.FinishCommand(lCommand);
}
При выполнении запроса он завершается с InvalidCastException.
Что я делаю неправильно?
1 ответ
Решение
Ах, я понял, что я сделал не так.
Конечно, есть актерский состав, который является (int)
напротив ExecuteScalarAsync
функция. Это возвращает объект, и, очевидно, не является int!
С помощью Convert.ToInt32
сделает свое дело.