首页 > 解决方案 > 无法从存储过程中获取结果

问题描述

我有一个名为的存储过程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(). 如果我在 PGAdmin 中执行上面的 SQL,我会看到结果返回(尽管默认视图是消息选项卡)。唯一没有返回结果的情况是当我以这种方式调用该过程时。我在调用其他使用IN/OUT变量执行的过程以及对ExecuteScalarAsync(). 我尝试使用同步调用ExecuteReader()仍然没有运气。

标签: npgsql

解决方案


PostgreSQL 存储过程不返回数据——您可能希望创建一个函数。本文很好地总结了过程和函数之间的差异。


推荐阅读