NpgSQL 抛出异常
NpgSQL Throwing Exception
我目前正在开发具有 PostgreSQL 后端的 .Net 应用程序。我正在使用 NpgSQL 来连接两者。当我尝试进行简单的数据检索时,NpgSQL returns 出现以下错误:
42601: syntax error at or near "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()
您成功执行的SQL是:
select get_all_reviews()
当你从 C# 运行 它时,你 运行 不同 SQL:
get_all_reviews
因此,解决方案是在 C# 中也使用有效的 SQL:
var command = new NpgsqlCommand("select get_all_reviews()", postgresqlConnection);
这是必要的,因为 FUNCTION returns a TABLE,您正在从中选择。
我目前正在开发具有 PostgreSQL 后端的 .Net 应用程序。我正在使用 NpgSQL 来连接两者。当我尝试进行简单的数据检索时,NpgSQL returns 出现以下错误:
42601: syntax error at or near "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()
您成功执行的SQL是:
select get_all_reviews()
当你从 C# 运行 它时,你 运行 不同 SQL:
get_all_reviews
因此,解决方案是在 C# 中也使用有效的 SQL:
var command = new NpgsqlCommand("select get_all_reviews()", postgresqlConnection);
这是必要的,因为 FUNCTION returns a TABLE,您正在从中选择。