Ваш запрос:
Select * from rpt.cst_data_integration_individuals(zone_id, period_start, period_end, is_child)
Предполагает, что zone_id и т. Д. Являются доступными полями.Если бы это было в хранимой процедуре, а это были переменные, это, вероятно, сработало бы, но, поскольку оно соответствует вашему запросу, это даже не имеет смысла.
Вам нужно вызывать параметры в вашем фактическом childrenQuery
слибо символ ':', либо символ '@'.
Select * from rpt.cst_data_integration_individuals(:zone_id, :period_start, :period_end, :is_child)
Кроме того, чтобы помочь с отладкой, объявите ваши параметры явно с типами данных.
cmd.Parameters.Add(new NpgsqlParameter("zone_id", NpgsqlTypes.NpgsqlDbType.Integer));
cmd.Parameters.Add(new NpgsqlParameter("period_start", NpgsqlTypes.NpgsqlDbType.TimestampTz));
cmd.Parameters.Add(new NpgsqlParameter("period_end", NpgsqlTypes.NpgsqlDbType.TimestampTz));
cmd.Parameters.Add(new NpgsqlParameter("is_child", NpgsqlTypes.NpgsqlDbType.Boolean));
cmd.Parameters[0].Value = zoneId;
cmd.Parameters[1].Value = fromDate;
cmd.Parameters[2].Value = toDate;
cmd.Parameters[3].Value = true;
(Существуют версии для игры в гольфвыше, но я никогда не беспокоюсь - мне нравится читабельность)
Если вы используете более раннюю версию Npgsql, они, вероятно, будут прощать.Если вы используете последнюю версию, она выдаст вам довольно четкую ошибку о том, где вы ошиблись.Если zoneId
является целым числом (а true
явно соответствует логическому типу данных), то мой думаю, будет иметь место несоответствие с тем, как .NET отправил тип данных DateTime
- возможно, он предполагал, что этобыла метка времени без часового пояса.
В любом случае, явные объявления параметров помогут, тогда как AddWithValue
в основном просит его принять правильное предположение.
Может быть, пока что избежать AddWithValue
.Я не собираюсь лгать, я использую его время от времени, но вы действительно должны ограничить его использование.