Было бы очень полезно реально увидеть хранимую процедуру и любые соответствующие объекты .NET, поэтому большинство советов, которые я могу предложить, являются лишь условными.
В отличие от других адаптеров ADO, использующих CommandType
Свойство объекта команды, для NpgSql / PostgreSQL, вы можете просто вызвать хранимую процедуру с помощью команды select:
using (NpgsqlCommand cmd = new NpgsqlCommand("select my_stored_proc()", conn))
{
cmd.ExecuteNonQuery();
}
Если у вас есть параметры, они следуют тому же шаблону, что и любая другая команда (select, insert,обновление):
using (NpgsqlCommand cmd = new NpgsqlCommand("select my_stored_proc(:P1, :P2)", conn))
{
cmd.Parameters.AddWithValue("P1", "foo");
cmd.Parameters.AddWithValue("P2", 3.14);
cmd.ExecuteNonQuery();
}
Вы упомянули, что ваш параметр был массивом ... но я не думаю, что вы можете иметь массив смешанных типов данных Postgres, не так ли?Конечно, в C # вы можете иметь массив объектов, но я не думаю, что это переводит чисто в массив PostgreSQL.
Вот пример параметра с массивом, использующего массив целых чисел:
cmd.Parameters.Add(new NpgsqlParameter("NUMS", NpgsqlTypes.NpgsqlDbType.Array |
NpgsqlTypes.NpgsqlDbType.Integer));
cmd.Parameters[0].Value = new int[3] { 1, 2, 3};
Если вы можете добавить некоторые детали к вашему вопросу, возможно, я смогу сформулировать ответ лучше.