Использование запроса выбора с датой и временем в качестве параметра создает исключение 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 сделает свое дело.

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