使用带有datetime作为参数的select查询会抛出InvalidCastException

时间:2015-08-12 13:56:41

标签: c# postgresql npgsql

我想计算某个时间段之间的记录数。

使用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 个答案:

答案 0 :(得分:0)

啊,我弄明白我做错了什么。

当然,有一个演员,这是InputHandler函数前面的(int)。 这会返回一个对象,显然不是int!

使用ExecuteScalarAsync可以解决问题。