c# - “输入末尾的语法错误”- 尝试从数据库启动存储过程时

标签 c# postgresql asp.net-core

我正在用 .net 核心编写并尝试从数据库 (Postgresql) 启动存储过程。

我收到一条错误消息,提示“输入末尾存在语法错误”。 连接字符串正确(调试时发现)。问题在于 .FromSql() 方法语法。

代码如下:

List<ActivePackageForOpenBillingPeriod> activeUserPackagesForOpenBillingPeriod =null;

        using(var conn = new NpgsqlConnection("Host=localhost;Port=xxx;Database=postgres;Username=xxx;Password=xxx;TrustServerCertificate=xxx;ApplicationName=xxx;"))
        {

            var s = "create function \"GetActiveUserPackagesForOpenBillingPeriod({0})\"";
            activeUserPackagesForOpenBillingPeriod = context.ActivePackageForOpenBillingPeriods.FromSql(s,DateTime.Now).ToList();
        }

这是我要调用的存储过程

    create function "GetActiveUserPackagesForOpenBillingPeriod"(date 
timestamp without time zone) returns TABLE("Amount" numeric, "Package" 
character varying, "User" text,"Account" int, "AcceptanceActID" int, 
"HasChangedPackage" boolean)
    language plpgsql
as
$$
DECLARE
    BEGIN
      RETURN QUERY
        SELECT
            a."ID" AS "AccountId",
            u."ID" AS "UserId",
            up."PackageID",
            up."TotalAmount",
            CASE
                  WHEN count(DISTINCT tl."PackageID") IN (0,1)  THEN false
                  ELSE true
            END AS "HasChangedPackage"

        FROM public."Accounts" as a
            LEFT JOIN billing."TransactionHeaders" AS th ON th."AccountID" = a."ID"
            INNER JOIN security."Users" AS u ON u."AccountID"= a."ID"
            INNER JOIN billing."UserPackages" AS up ON up."UserID"=u."ID" AND COALESCE(th."Date", date) BETWEEN up."StartDate" AND COALESCE(up."EndDate", date)
            LEFT JOIN billing."TransactionLines" AS tl ON th."Id" = tl."TransactionHeaderID"

        WHERE th."AcceptanceActID" IS NULL AND a."StatusID"!=4 AND a."StatusID"!=3 AND up."StatusID"=1


        GROUP BY a."ID", u."ID", up."PackageID", up."TotalAmount";

END;
$$;

最佳答案

您正在运行的查询是错误的。它混合了函数创建语句和获取结果的调用。

只有函数名应该被双引号,而不是参数

将查询更改为

var s = "SELECT * FROM \"GetActiveUserPackagesForOpenBillingPeriod\"({0})";

关于c# - “输入末尾的语法错误”- 尝试从数据库启动存储过程时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56462479/

相关文章:

sql - 计算每个多边形中的点数

sql - 在 Postgres 中使用动态基础进行累积添加

c# - Blazor 更改验证默认 CSS 类名称

asp.net-mvc - 尝试将 AutoMapper 添加到 Asp.net Core 2?

c# - 无法在 Rider 中使用 .NET Standard 2.0 Lib 加载 Xamarin Forms 项目

c# - 文本框两次触发 TextChanged 事件并两次回发,第一次回发状态中止

php - 存储/检索 PGP 私钥和密码的安全方法?

HTML 输入文件连接被重置错误

c# - 在 C# 中使一个函数或一组语句线程安全的最佳方法是什么?

c# - C#中另一种计算立方根的方法