我目前正在开发一个具有.Net后端的PostgreSQL应用程序。我用NpgSQL将两者连接起来。当我尝试进行简单的数据检索时,NpgSQL返回以下错误:
42601:"get_all_reviews“或其附近的语法错误
正在调用PostgreSQL函数:
create or replace function public.get_all_reviews()
returns TABLE(review_text text, review_sentiment integer) as $$
begin
return query select rec.review_text, rec.review_sentiment from reviews as rec;
end;
$$ language plpgsql;
ALTER FUNCTION public.get_all_reviews()
OWNER TO postgres;C#/NpgSQL:
public List<Review> GetReviews()
{
var reviews = new List<Review>();
var postgresqlConnection = new NpgsqlConnection("Server=localhost;Port=5432;User Id=user;Password=password;Database=db;");
postgresqlConnection.Open();
var command = new NpgsqlCommand("get_all_reviews", postgresqlConnection);
try
{
var dataReader = command.ExecuteReader();
...do stuff
postgresqlConnection.Close();
}
catch(Exception ex)
{
throw ex;
}
return reviews;
}异常发生在command.ExecuteReader()上。但是,如果我在pgAdmin4中运行以下查询,则从上述函数获得所需的结果:
select get_all_reviews()发布于 2019-06-03 03:12:35
您成功执行的SQL是:
select get_all_reviews()但是,当您从C#运行它时,您运行的是不同的SQL:
get_all_reviews因此,解决方案也是在C#中使用工作SQL:
var command = new NpgsqlCommand("select get_all_reviews()", postgresqlConnection);这是必要的,因为函数返回一个表,您是从该表返回的。
https://stackoverflow.com/questions/56420591
复制相似问题