首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Npgsql 7执行函数

使用Npgsql 7执行函数
EN

Stack Overflow用户
提问于 2022-11-19 18:22:40
回答 1查看 38关注 0票数 0

我正在运行PostgreSQL 15,并将Dapper和NpgSQL7.0添加到我的项目中。我需要运行以下函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION get_all_posts(
    start_date date default null,
    end_date date default null,
    user_id integer default null,
    take_rows integer default 10,
    skip_rows integer default 0)
 RETURNS SETOF post_info
 LANGUAGE plpgsql
AS $function$
BEGIN
    RETURN QUERY SELECT .....
END;
$function$
;

然后,我尝试使用下面的C#代码来执行这个查询并返回结果集:

代码语言:javascript
复制
using (var reader = await connection.ExecuteReaderAsync("get_all_posts", 
                   new
                   {
                       start_date = postRequest.StartDate as object ?? DBNull.Value,
                       end_date = postRequest.EndDate as object ?? DBNull.Value,
                       user_id = postRequest.UserId as object ?? DBNull.Value,
                       take_rows = take,
                       skip_rows = skip,
                   }, commandType: CommandType.StoredProcedure))
{
// ...
}

这会导致错误,说明get_all_posts不是一个过程(NpgSQL7.0停止接受函数的CommandType.StoredProcedure )。

然后尝试使用以下SELECT语句:

代码语言:javascript
复制
using (var reader = await connection.ExecuteReaderAsync("SELECT * FROM get_all_posts($1, $2, $3, $4, $5)", 
                   new
                   {
                       start_date = postRequest.StartDate as object ?? DBNull.Value,
                       end_date = postRequest.EndDate as object ?? DBNull.Value,
                       user_id = postRequest.UserId as object ?? DBNull.Value,
                       take_rows = take,
                       skip_rows = skip,
                   }, commandType: CommandType.Text))
{
// ...
}

但在这种情况下,错误是bind message supplies 0 parameters, but prepared statement "" requires

如何让Npgsql和Dapper正确地执行PostgreSQL函数?

EN

回答 1

Stack Overflow用户

发布于 2022-11-19 21:58:24

CommandType.StoredProcedure已更改为调用NpgSQL7.0中的存储过程,请参阅发布说明

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74502536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档