C# 使用.netCore将多个参数传递给存储过程

C# 使用.netCore将多个参数传递给存储过程,c#,C#,我不确定我做得是否正确,或者没有将多个参数传递给我的SP,因为这会给我一个错误,即该函数不存在,以下是我在postgressql中的函数: SELECT wpv.avail_pro_failedbattry_error_powerconv( <date>, <date>, <character varying>, <character varying>, <character varying> )

我不确定我做得是否正确,或者没有将多个参数传递给我的SP,因为这会给我一个错误,即该函数不存在,以下是我在postgressql中的函数:

SELECT wpv.avail_pro_failedbattry_error_powerconv(
    <date>,
    <date>,
    <character varying>,
    <character varying>,
    <character varying>
);

这样传递参数是正确的方法?

您可以通过简单的字符串插值传递参数,例如:

var x = _db.dataInGlance.FromSqlRaw($@"
SELECT * from wpv.avail_pro_failedbattry_error_powerconv(
'{dtFrom.ToString(""yyyy-MM-dd HH:mm:ss.fff"")}',
'{dtTo.ToString(""yyyy-MM-dd HH:mm:ss.fff"")}',
'{regionalManager}',
'{service_under}',
'{supervisor}')
...
您可能需要为您的languageCulture设置日期变量的特殊格式

要发送参数,必须使用指定为第一个参数的名称,如
@drfrom
,“@dtto”等

还有一个选项可以像这样发送

\set p1 @drfrom
\set p2 @dtto
\set p3 @regionalmanager
\set p4 @serviceunder
\set p5 @supervisor

var x = _db.dataInGlance.FromSqlRaw(@"
SELECT * from wpv.avail_pro_failedbattry_error_powerconv(
:p1, :p2, :p3, :p4, :p5)
...

这种方法和ngpsql参数之间有什么区别?如果我想使用npgsql参数,我应该如何传递?我相信你确实可以使用字符串插值和EF Core,让它自动参数化你的查询。但是,如果您想避免暴露自己遭受SQL注入攻击,显然存在一些问题
var x = _db.dataInGlance.FromSqlRaw(@"
SELECT * from wpv.avail_pro_failedbattry_error_powerconv(
@drfrom,
@dtto,
@regionalmanager,
@serviceunder,
@supervisor)
...
\set p1 @drfrom
\set p2 @dtto
\set p3 @regionalmanager
\set p4 @serviceunder
\set p5 @supervisor

var x = _db.dataInGlance.FromSqlRaw(@"
SELECT * from wpv.avail_pro_failedbattry_error_powerconv(
:p1, :p2, :p3, :p4, :p5)
...