使用 select 以日期时间作为参数的查询会抛出 InvalidCastException
Using select query with datetime as parameter throws 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 而崩溃。
我做错了什么?
啊,我知道我做错了什么了。
当然还有一个cast,就是ExecuteScalarAsync
函数前面的(int)
。
这 returns 一个对象,显然不是一个 int!
使用 Convert.ToInt32
即可。
我想统计某个时间段之间的记录数
我使用 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 而崩溃。
我做错了什么?
啊,我知道我做错了什么了。
当然还有一个cast,就是ExecuteScalarAsync
函数前面的(int)
。
这 returns 一个对象,显然不是一个 int!
使用 Convert.ToInt32
即可。