Не удается получить результаты из хранимой процедуры

#npgsql

#npgsql

Вопрос:

У меня есть хранимая процедура с именем get_all_buildings() с телом, определенным как таковой:

 SELECT * FROM building;
  

Я вызываю процедуру следующим образом:

 using var connection = new NpgsqlConnection(connectionString);
await connection.OpenAsync();
var sql = "CALL get_all_buildings();";
using var cmd = new NpgsqlCommand(sql, connection);
using var reader = await cmd.ExecuteReaderAsync();
while(reader.Read())
{
    doSomething();
}
  

Я никогда не достигну вызова doSomething() . Если я заменю текст запроса определением хранимой процедуры, я смогу перейти к строке, которая вызывает doSomething() . Если я выполняю SQL выше в pgAdmin, я вижу, что результаты возвращаются (хотя по умолчанию отображается вкладка «Сообщения»). Единственный сценарий, в котором результаты не возвращаются, — это когда я вызываю процедуру таким образом. У меня не было проблем с вызовом других процедур, которые выполняются с IN/OUT переменной и соответствующим вызовом ExecuteScalarAsync() . Я пытался использовать синхронный вызов ExecuteReader() , но безуспешно.

Ответ №1:

Хранимые процедуры PostgreSQL не возвращают данные — вы, вероятно, хотите вместо этого создать функцию. В этой статье достаточно хорошо описаны различия между процедурами и функциями.