C# 带参数的Dapper Postgres存储过程

C# 带参数的Dapper Postgres存储过程,c#,postgresql,dapper,C#,Postgresql,Dapper,这是错误的。这里的问题似乎不是整洁。要在postgresql中使用参数执行存储过程,应 SELECT * FROM "GetChildBank"("bankId" := $1) 要创建一个返回行集的函数并从select调用,需要使用create函数 using (var connection = new NpgsqlConnection("Host=localhost;Username=postgres;Password=root;Database=sample")) { conne

这是错误的。

这里的问题似乎不是整洁。要在postgresql中使用参数执行存储过程,应

SELECT * 
FROM "GetChildBank"("bankId" := $1)
要创建一个返回行集的函数并从select调用,需要使用create函数

using (var connection = new NpgsqlConnection("Host=localhost;Username=postgres;Password=root;Database=sample"))
{
    connection.Open();
    var sql = "CALL \"GetChildBank\"(@bankId)";
    var p = new DynamicParameters();
    p.Add("@bankId", 11);
    var res = connection.Execute(sql, p);
}
CREATE或REPLACE函数“GetChildBank”(“bankId”整数)将cte集返回为$$
从cte中选择*,其中“ParentBank”不为空,“Id”$1;
$$语言sql;

这里的问题似乎不是Dapper。要在postgresql中使用参数执行存储过程,应该

SELECT * 
FROM "GetChildBank"("bankId" := $1)
要创建一个返回行集的函数并从select调用,需要使用create函数

using (var connection = new NpgsqlConnection("Host=localhost;Username=postgres;Password=root;Database=sample"))
{
    connection.Open();
    var sql = "CALL \"GetChildBank\"(@bankId)";
    var p = new DynamicParameters();
    p.Add("@bankId", 11);
    var res = connection.Execute(sql, p);
}
CREATE或REPLACE函数“GetChildBank”(“bankId”整数)将cte集返回为$$
从cte中选择*,其中“ParentBank”不为空,“Id”$1;
$$语言sql;

“但它总是出错”-什么错误?在这里,
param
看起来像什么;大概
sql
是存储过程的名称,在这种情况下:它定义了什么参数?请回答您的问题(通过单击下面的链接),并根据需要添加存储过程(或函数)的代码,以详细说明-我几乎可以肯定地在这里提供帮助(我是主要的整洁作者/维护者),但是:我不是通灵者。你必须在这里帮助我,至少告诉我原始信息所说的内容。任何额外的细节都是有用的,但是
orig.Message
是我在这里获得机会的绝对最低要求(在一个完美的世界中:
orig.GetType().Name
也会很好,关于
sql
param
是什么的一些信息-也许关于
T
也是什么的)@MarcGravel sql是存储过程名称,param是存储过程的参数。请编辑:
它将语句SELECT*从“GetChildBank”(“bankId”):=$1转换为sql,这是错误的
-不,dapper根本不这么做。它不能把任何东西转换成任何东西。所以让我们后退一步:什么是<代码> SQL <代码>?大概
sql
“GetChildBank”
?大概
param
看起来像
new{bankId=130134}
?现在:到底发生了什么?什么是原始消息?“但它总是出错”-什么错误?在这里,
param
看起来像什么;大概
sql
是存储过程的名称,在这种情况下:它定义了什么参数?请回答您的问题(通过单击下面的链接),并根据需要添加存储过程(或函数)的代码,以详细说明-我几乎可以肯定地在这里提供帮助(我是主要的整洁作者/维护者),但是:我不是通灵者。你必须在这里帮助我,至少告诉我原始信息所说的内容。任何额外的细节都是有用的,但是
orig.Message
是我在这里获得机会的绝对最低要求(在一个完美的世界中:
orig.GetType().Name
也会很好,关于
sql
param
是什么的一些信息-也许关于
T
也是什么的)@MarcGravel sql是存储过程名称,param是存储过程的参数。请编辑:
它将语句SELECT*从“GetChildBank”(“bankId”):=$1转换为sql,这是错误的
-不,dapper根本不这么做。它不能把任何东西转换成任何东西。所以让我们后退一步:什么是<代码> SQL <代码>?大概
sql
“GetChildBank”
?大概
param
看起来像
new{bankId=130134}
?现在:到底发生了什么?什么是原始消息?
CREATE OR REPLACE FUNCTION ""GetChildBank"("bankId" integer) RETURNS SETOF cte AS $$
SELECT * FROM cte where "ParentBank" IS NOT NULL AND "Id" <> $1;
$$ LANGUAGE sql;