#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 не возвращают данные — вы, вероятно, хотите вместо этого создать функцию. В этой статье достаточно хорошо описаны различия между процедурами и функциями.