簡體   English   中英

ASP.Net core中如何獲取PostgreSQL function的數據

[英]How to get data from PostgreSQL function in ASP.Net core

我是 asp.net 核心的初學者。 我的 posgres 中有一個名為“GetDriverStatusReport”的工作 function 將返回一些數據。 我想在我的 Asp.Net 核心應用程序中檢索這些值。 我嘗試對此進行研究,但找不到合適的解決方案。 有人可以告訴我在 Asp.net Core 中調用存儲過程的正確性嗎? 提前致謝

這是我的 Function

CREATE OR REPLACE FUNCTION GetDriverStatusReport(ref refcursor) RETURNS refcursor AS $$
BEGIN
  OPEN ref FOR (WITH union_tbl AS(
SELECT
   DR."DriverId" AS "Driver Id",
   DR."DriverName" As "Driver Name",                
   0 as "RiderIncome",
   0 as "Payable To Rider",
   0 as "Recievable Balance",
   DR."Amount" as "Amount Paid"
FROM "DriverPaymentReferences" as DR            
UNION ALL
SELECT
   DF."DriverId" AS "Driver Id",
   DF."DriverName" As "Driver Name",
   DF."RiderIncome" as "RiderIncome",
   0 as "Payable To Rider",
   0 as "Recievable Balance",
   0 as "Amount Paid"
FROM "DeliveryFinances" as DF 
UNION ALL
SELECT
   TF."DriverId" AS "Driver Id",
   TF."DriverName" As "Driver Name",
   0 as "RiderIncome",
   TF."PayableToRider" as "Payable To Rider",
   TF."RecievableBalance" as "Recievable Balance",
   0 as "Amount Paid"
FROM "TaxiFinances" as TF)
Select 
   "Driver Id", 
   "Driver Name",
   case when 
     ((Sum("Recievable Balance") - SUM("Payable To Rider")) -Sum("RiderIncome")- 
   SUM("Amount Paid")) > 0
   then 'CR'
   else 'DR' end as "Cash/Debit",
   ((Sum("Recievable Balance") - SUM("Payable To Rider")) -Sum("RiderIncome")- 
   SUM("Amount Paid")) AS "Amount"
FROM union_tbl
GROUP BY "Driver Id","Driver Name" );
  RETURN ref;                                                      
END;
$$ LANGUAGE plpgsql;

這是我在 PgAdmin4 中調用上述函數后得到的數據

嗯,你可以試試這個方法,

假設我有一個像這樣的名為SP_GetAllMSManager的存儲過程

編號 SQL

CREATE OR REPLACE FUNCTION GetWSManager() 
AS $$

BEGIN
      SELECT DISTINCT  WSManager FROM WsEmployee ORDER BY WSManager 
      COMMIT;      
END;
$$ LANGUAGE plpgsql;

C# ASP.NET 核心:

NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;User Id=postgres;Password=pwd;Database=postgres;");

conn.Open();

// Passing PostGre SQL Function Name
NpgsqlCommand command = new NpgsqlCommand("EXE GetEmployeePrintInfo", conn);

// Execute the query and obtain a result set
NpgsqlDataReader reader = command.ExecuteReader();

// Reading from the database rows
List<string> listOfManager = new List<string>();

while (reader.Read())
{
    string WSManager = reader["WSManager"].ToString(); // Remember Type Casting is required here it has to be according to database column data type
    listOfManager.Add(WSManager);
}
reader.Close();

command.Dispose();
conn.Close();

OUTPUT:

在此處輸入圖像描述

如果上下文相同:

如果你想使用相同的上下文,那么你可以嘗試這種方式:

C# ASP.NET 核心:

  var printJobList =  _context.PrinterJobs
                     .FromSql("EXECUTE GetEmployeePrintInfo")
                     .ToList();

注意:這屬於_context.PrinterJobs表示store procedure僅從PrinterJobs表中獲取數據。 所以我可以按照上面的方式做。 但是,如果您的存儲過程包含來自 join 的其他實體數據,那么第一種方法會很方便。 你可以在這里查看官方文檔

PG SQL:

CREATE OR REPLACE FUNCTION GetEmployeePrintInfo() 
AS $$
BEGIN
       SELECT DISTINCT PrinterId ,PrinterName,PrintedBy,TotalPrint FROM PrintJob 
       COMMIT;     
END;
$$ LANGUAGE plpgsql;

希望它能相應地幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM