跳過到頁腳內容
.NET HELP

Npgsql C# (How It Works For Developers)

Npgsql是一項關鍵技術,它能夠實現 .NET 應用程式和PostgreSQL資料庫之間的順暢通信,因為開發人員正在尋找與資料庫互動的強大方法。 .NET PostgreSQL 伺服器資料提供者(Npgsql)是資料庫連接領域創造力、效率和適應性的象徵。 它允許 C#、Visual Basic 和 F# 使用者存取資料庫。 同時,EF Core 使用者也可以使用舊版 Entity Framework 6.x。

廣受歡迎的 .NET 函式庫IronPDF在 C# 和 VB.NET 程式中用於產生、修改和顯示 PDF 文件。 除了執行諸如合併多個 PDF、添加浮水印以及從現有 PDF 文件中提取文字或圖像等複雜任務外,它還使開發人員能夠從各種來源(包括 HTML、照片和原始文字)建立 PDF 文件。

透過本教程,您將學習如何在 C# 應用程式中整合IronPDFNPGSQL 。 我們將研究如何將這些工具結合起來,以提高應用程式的功能,從簡單的設定到複雜的功能。

如何使用 Npgsql

  1. 建立一個新的 C# 項目
  2. 安裝 Npgsql 函式庫。
  3. 連接到 Npgsql 資料庫。
  4. 執行查詢並取得結果。
  5. 處理結果並關閉連線。

1. Npgsql簡介

從根本上講, Npgsql充當 .NET 開發人員和 PostgreSQL 之間的橋樑,PostgreSQL 是一個開源關聯式資料庫管理系統,以其穩定性、可擴展性和可擴展性而聞名。 Npgsql 提供了一套豐富的功能集,使開發人員能夠以無與倫比的便利性和效率處理事務、執行查詢、檢索資料並簡化資料庫操作。

1.1 使用 Npgsql 的優勢

效能: Npgsql 的速度和效率是內建的。 為了確保在使用 PostgreSQL 資料庫時達到最佳速度,它利用了批次命令、非同步輸入/輸出和最佳化資料類型等功能。

完整的 PostgreSQL 支援: Npgsql 的目標是提供對 PostgreSQL 所有功能的完整支持,例如陣列、JSONB、進階資料類型和使用者自訂類型。這意味著程式設計師可以在其 .NET 應用程式中充分利用 PostgreSQL 的全部潛力。

1.2 Npgsql入門

1.2.1 在 C# 專案中設定 Npgsql

將 Npgsql 整合到 C# 專案中非常簡單。 新增 Npgsql 需要使用 Microsoft 的 .NET 套件管理工具 NuGet。 該程式庫提供了將 PostgreSQL 資料庫與 Npgsql 整合到您的專案中所需的工具和庫。

! Npgsql C#(開發人員的使用方法):圖 1 - 使用 NuGet 套件管理器的搜尋列中搜尋"Npgsql",然後選擇專案並點擊"安裝"按鈕,即可透過"管理解決方案的 NuGet 套件"安裝 Npgsql。

1.2.2 在 Windows 控制台和窗體中實作 Npgsql

多種 C# 應用程式類型,例如 Windows 窗體 (WinForms) 和 Windows 控制台,都可以使用 Npgsql。 雖然每個框架的實作方式各不相同,但基本想法始終相同:Npgsql 充當應用程式內部資料庫的容器。

1.2.3 從 Npgsql 取得資料的基本範例

在操作 PostgreSQL 資料庫之前,請先建立與 Npgsql 的連線。 然後,執行 SQL 查詢從 PostgreSQL 中取得資料。 NpgsqlCommand 是用來執行 SQL 查詢的工具。

using Npgsql;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // PostgreSQL connection string
        string connString = "Host=myServerAddress;Port=myPort;Username=myUsername;Password=myPassword;Database=myDatabase";

        // Create connection object
        using (var conn = new NpgsqlConnection(connString))
        {
            // Open the connection
            await conn.OpenAsync();

            // SQL query to execute
            string sql = "SELECT * FROM myTable";

            // Create NpgsqlCommand
            using (var cmd = new NpgsqlCommand(sql, conn))
            {
                // Execute the command and retrieve data
                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    // Loop through the retrieved data
                    while (await reader.ReadAsync())
                    {
                        // Retrieve data from the data reader
                        string name = reader["Name"].ToString();
                        int age = Convert.ToInt32(reader["Age"]);
                        // Output retrieved data to console
                        Console.WriteLine($"Name: {name}, Age: {age}");
                    }
                }
            }
            // Connection will be automatically closed here due to the 'using' block
        }
    }
}
using Npgsql;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // PostgreSQL connection string
        string connString = "Host=myServerAddress;Port=myPort;Username=myUsername;Password=myPassword;Database=myDatabase";

        // Create connection object
        using (var conn = new NpgsqlConnection(connString))
        {
            // Open the connection
            await conn.OpenAsync();

            // SQL query to execute
            string sql = "SELECT * FROM myTable";

            // Create NpgsqlCommand
            using (var cmd = new NpgsqlCommand(sql, conn))
            {
                // Execute the command and retrieve data
                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    // Loop through the retrieved data
                    while (await reader.ReadAsync())
                    {
                        // Retrieve data from the data reader
                        string name = reader["Name"].ToString();
                        int age = Convert.ToInt32(reader["Age"]);
                        // Output retrieved data to console
                        Console.WriteLine($"Name: {name}, Age: {age}");
                    }
                }
            }
            // Connection will be automatically closed here due to the 'using' block
        }
    }
}
Imports Npgsql
Imports System
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' PostgreSQL connection string
		Dim connString As String = "Host=myServerAddress;Port=myPort;Username=myUsername;Password=myPassword;Database=myDatabase"

		' Create connection object
		Using conn = New NpgsqlConnection(connString)
			' Open the connection
			Await conn.OpenAsync()

			' SQL query to execute
			Dim sql As String = "SELECT * FROM myTable"

			' Create NpgsqlCommand
			Using cmd = New NpgsqlCommand(sql, conn)
				' Execute the command and retrieve data
				Using reader = Await cmd.ExecuteReaderAsync()
					' Loop through the retrieved data
					Do While Await reader.ReadAsync()
						' Retrieve data from the data reader
						Dim name As String = reader("Name").ToString()
						Dim age As Integer = Convert.ToInt32(reader("Age"))
						' Output retrieved data to console
						Console.WriteLine($"Name: {name}, Age: {age}")
					Loop
				End Using
			End Using
			' Connection will be automatically closed here due to the 'using' block
		End Using
	End Function
End Class
$vbLabelText   $csharpLabel

在上面的程式碼片段中,我們從 Npgsql 獲取資料並將其顯示在控制台中。 下圖顯示了執行查詢的結果。

! Npgsql C#(開發人員的工作原理):圖 2 - 控制台輸出顯示使用 .NET 專案中的 Npgsql 套件從 PostgreSQL 資料庫中取得姓名和年齡。

2. 使用 PostgreSQL 進行 Npgsql 操作

2.1 使用 PostgreSQL 進行參數化查詢

由於參數化查詢能夠讓資料庫伺服器快取查詢計劃,因此可以提高查詢效能並有助於防止 SQL 注入攻擊。 Npgsql支援參數化查詢。 此外,使用參數化查詢可以更安全有效地處理動態 SQL 查詢。

2.2 使用 PostgreSQL 進行批次操作

處理海量資料集時,Npgsql 支援的批次插入、更新和刪除操作可以大幅提高速度。 由於批次操作可以在單一資料庫事務中處理多行數據,因此可以減少與資料庫伺服器多次往返的開銷。

使用 PostgreSQL 進行事務處理

Npgsql 支援事務,可以將多個資料庫操作組合成一個原子單元。 交易透過將所有變更提交到資料庫或在出錯時回滾整個事務來提供資料的一致性和完整性。

2.3 使用 PostgreSQL 進行效能優化

在使用 PostgreSQL 資料庫時,Npgsql 提供了許多效能增強功能,包括查詢計劃快取、結果流和命令批次處理,以減少延遲並提高吞吐量。 這些改進提升了應用程式的可擴展性和整體運行速度。

2.4 與 PostgreSQL 資料庫的連接

借助 Npgsql,只需以下幾行程式碼即可輕鬆連接 PostgreSQL 資料庫伺服器。

NpgsqlConnection conn = new NpgsqlConnection(connString);
NpgsqlConnection conn = new NpgsqlConnection(connString);
Dim conn As New NpgsqlConnection(connString)
$vbLabelText   $csharpLabel

這段基本程式碼片段可以幫助我們連接到 PostgreSQL 資料庫伺服器。

3. 將 Npgsql 與 IronPDF 集成

3.1 共同使用 Npgsql 和 IronPDF

在 C# 專案中將 Npgsql 和 IronPDF 結合使用,會產生令人興奮的可能性。 雖然 Npgsql 是一個很棒的 PostgreSQL 處理工具,但 IronPDF 是一個很棒的將這些內容轉換為 PDF 的工具。 由於這種連接性,程式設計師可以設計出能夠與資料庫通訊並將這些內容轉換為 PDF 的應用程式。

3.2 使用 IronPDF 取得 PostgreSQL 數據

用戶可以透過建立使用 Npgsql 的 Windows 控制台應用程序,在您的應用程式中與資料庫進行互動。 首先在應用程式中新增資料庫存取權限。控制台上應該有足夠的空間來放置此控件,並為資料庫互動留出充足的空間。 同時包括資料類型映射和批次操作。

安裝 IronPDF

  • 在 Visual Studio 中啟動專案。
  • 選擇"工具">"NuGet 套件管理員">"套件管理員控制台"。

    • 在軟體包管理器控制台中輸入以下命令並按 Enter 鍵:
    Install-Package IronPdf
  • 或者,您也可以使用 NuGet 解決方案套件管理器安裝 IronPDF。
    • 在搜尋結果中找到 IronPDF 軟體包,選擇它,然後按一下"安裝"按鈕。 Visual Studio 將自動處理下載和安裝。

! Npgsql C#(開發人員的使用方法):圖 3 - 使用 NuGet 套件管理器的搜尋列中搜尋"IronPdf",然後選擇專案並點擊"安裝"按鈕,即可透過"管理解決方案的 NuGet 套件"安裝 IronPDF。

  • IronPDF 套件將透過 NuGet 下載並安裝,同時也安裝專案所需的任何相依性。 安裝完成後,您即可開始在專案中使用 IronPDF。

透過 NuGet 網站安裝

有關 IronPDF 的更多信息,包括功能、相容性和其他下載選項,請訪問NuGet 網站上的 IronPDF 軟體包

利用 DLL 進行安裝

或者,您可以使用 IronPDF 的 DLL 檔案將其直接整合到您的專案中。 使用此IronPDF ZIP 套件連結下載包含 DLL 的 ZIP 檔案。 解壓縮後,將 DLL 檔案新增至您的專案。

實作邏輯

當我們開始運行該應用程式時,它將使用 Npgsql .NET 程式庫從資料庫中取得資料。 使用 IronPDF,我們可以將資料庫內容轉換為 PDF 文件。

1.取得資料:當使用者開始轉換時,從 Npgsql .NET 提供者取得最新內容。 2.使用 IronPDF 產生 PDF:要將 Npgsql 資料庫中的資料轉換為 PDF,請使用 IronPDF。 可以使用 HtmlToPdf 類別將 HTML 字串格式化為 PDF 文件。 3.儲存 PDF 並通知:將產生的 PDF 儲存到指定位置,或在控制台上留下可見訊息。 PDF 儲存後,透過終端訊息等方式通知使用者轉換成功。

using Npgsql;
using IronPdf;
using System;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // StringBuilder for HTML content
        StringBuilder sb = new StringBuilder();
        var Renderer = new ChromePdfRenderer(); // Instantiates Chrome Renderer

        sb.Append("<h1>Dynamic PDF Generated from PostgreSQL Data</h1>");

        // PostgreSQL connection setup
        string connString = "Host=myServerAddress;Port=myPort;Username=myUsername;Password=myPassword;Database=myDatabase";

        using (var conn = new NpgsqlConnection(connString))
        {
            await conn.OpenAsync();

            string sql = "SELECT * FROM myTable";
            using (var cmd = new NpgsqlCommand(sql, conn))
            {
                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        // Retrieve data from the data reader
                        string name = reader["Name"].ToString();
                        int age = Convert.ToInt32(reader["Age"]);

                        // Add data to the PDF
                        sb.Append($"<p>Name: {name}, Age: {age}</p>");
                    }
                }
            }

            // Generate and save the PDF document
            var pdf = Renderer.RenderHtmlAsPdf(sb.ToString());
            pdf.SaveAs("output.pdf");

            // Connection will be automatically closed here
        }

        Console.WriteLine("PDF generation completed. See output.pdf for results.");
    }
}
using Npgsql;
using IronPdf;
using System;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // StringBuilder for HTML content
        StringBuilder sb = new StringBuilder();
        var Renderer = new ChromePdfRenderer(); // Instantiates Chrome Renderer

        sb.Append("<h1>Dynamic PDF Generated from PostgreSQL Data</h1>");

        // PostgreSQL connection setup
        string connString = "Host=myServerAddress;Port=myPort;Username=myUsername;Password=myPassword;Database=myDatabase";

        using (var conn = new NpgsqlConnection(connString))
        {
            await conn.OpenAsync();

            string sql = "SELECT * FROM myTable";
            using (var cmd = new NpgsqlCommand(sql, conn))
            {
                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        // Retrieve data from the data reader
                        string name = reader["Name"].ToString();
                        int age = Convert.ToInt32(reader["Age"]);

                        // Add data to the PDF
                        sb.Append($"<p>Name: {name}, Age: {age}</p>");
                    }
                }
            }

            // Generate and save the PDF document
            var pdf = Renderer.RenderHtmlAsPdf(sb.ToString());
            pdf.SaveAs("output.pdf");

            // Connection will be automatically closed here
        }

        Console.WriteLine("PDF generation completed. See output.pdf for results.");
    }
}
Imports Npgsql
Imports IronPdf
Imports System
Imports System.Text
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' StringBuilder for HTML content
		Dim sb As New StringBuilder()
		Dim Renderer = New ChromePdfRenderer() ' Instantiates Chrome Renderer

		sb.Append("<h1>Dynamic PDF Generated from PostgreSQL Data</h1>")

		' PostgreSQL connection setup
		Dim connString As String = "Host=myServerAddress;Port=myPort;Username=myUsername;Password=myPassword;Database=myDatabase"

		Using conn = New NpgsqlConnection(connString)
			Await conn.OpenAsync()

			Dim sql As String = "SELECT * FROM myTable"
			Using cmd = New NpgsqlCommand(sql, conn)
				Using reader = Await cmd.ExecuteReaderAsync()
					Do While Await reader.ReadAsync()
						' Retrieve data from the data reader
						Dim name As String = reader("Name").ToString()
						Dim age As Integer = Convert.ToInt32(reader("Age"))

						' Add data to the PDF
						sb.Append($"<p>Name: {name}, Age: {age}</p>")
					Loop
				End Using
			End Using

			' Generate and save the PDF document
			Dim pdf = Renderer.RenderHtmlAsPdf(sb.ToString())
			pdf.SaveAs("output.pdf")

			' Connection will be automatically closed here
		End Using

		Console.WriteLine("PDF generation completed. See output.pdf for results.")
	End Function
End Class
$vbLabelText   $csharpLabel

以下是上述程式碼產生的運行結果。 要了解有關IronPDF 文件的更多信息,請參閱該指南。

! Npgsql C#(開發人員的工作原理):圖 4 - 使用來自 Npgsql PostgreSQL 資料庫和 IronPDF 的資料產生的輸出 PDF。

結論

透過IronPDF 的 PDF 產生功能Npgsql PostgreSQL 資料庫連接的完美集成,開發人員可以設計出適應性強、功能強大的解決方案,以產生滿足其獨特需求的動態 PDF 文件。

$799 Lite 套餐除了永久許可證和一年的軟體支援外,還包含升級選項。 IronPDF 提供免費許可選項。 要了解 Iron Software 的其他產品,請瀏覽他們的產品頁面

IronPDF 還提供全面的文件和積極維護的程式碼範例,用於產生和操作 PDF ,以利用 IronPDF 的各種功能。

常見問題解答

如何將 C# 應用程式連接到 PostgreSQL 資料庫?

要將 C# 應用程式連接到 PostgreSQL 資料庫,您可以使用 Npgsql,這是 PostgreSQL 的 .NET 資料提供者。首先,在 Visual Studio 中通過 NuGet Package Manager 安裝 Npgsql。然後,建立連線字串,並使用 NpgsqlConnection 類與資料庫建立連線。

Npgsql 在資料庫運作中扮演什麼角色?

Npgsql 透過使 .NET 應用程式能夠與 PostgreSQL 資料庫通訊,在資料庫作業中扮演重要角色。它支援各種功能,例如指令批次和異步 I/O,這些功能可優化效能,使其成為開發人員的首選。

參數化查詢如何改善 PostgreSQL 的安全性?

參數化查詢可以防止 SQL 注入攻擊,從而提高安全性。它們可確保使用者的輸入被視為資料,而非可執行的程式碼。透過 Npgsql,您可以使用參數化查詢安全地處理 PostgreSQL 中的動態 SQL 查詢。

如何在 Windows Forms 應用程式中使用 Npgsql?

Npgsql 可用於 Windows Forms 應用程式,以管理 PostgreSQL 資料庫。透過整合 Npgsql,開發人員可以在應用程式中執行查詢和擷取資料。IronPDF 可以同時使用,從 Windows Forms 應用程式中擷取的資料產生 PDF。

Npgsql 為 .NET 開發人員提供哪些好處?

Npgsql 提供的優點包括全面的 PostgreSQL 支援,包括處理陣列和 JSONB,以及異步 I/O 和指令批次等效能功能。這使得 Npgsql 成為 .NET 開發人員使用 PostgreSQL 資料庫的強大工具。

如何使用 C# 從 PostgreSQL 資料產生 PDF 報表?

使用 IronPDF,您可以用 C# 從 PostgreSQL 資料產生 PDF 報表。首先,使用 Npgsql 從 PostgreSQL 資料庫中查詢並擷取資料。然後根據需要格式化資料,並使用 IronPDF 將資料轉換成 PDF 文件。

在 C# 專案中設定 Npgsql 涉及哪些步驟?

若要在 C# 專案中設定 Npgsql,請先使用 NuGet 套件管理員安裝 Npgsql。接下來,為您的 PostgreSQL 資料庫建立連線字串。使用 NpgsqlConnection 類來連接資料庫,並根據需要執行查詢。

如何以 PDF 格式記錄資料庫查詢結果?

若要以 PDF 格式記錄資料庫查詢結果,請使用 Npgsql 從 PostgreSQL 資料庫執行並擷取查詢結果。然後,使用 IronPDF 將資料轉換成格式良好的 PDF 文件,並可根據需要儲存或分享。

Jacob Mellor,技術長 @ Team Iron
首席技術長

Jacob Mellor 是 Iron Software 的首席技術長,也是開創 C# PDF 技術的有遠見的工程師。作為 Iron Software 核心程式碼庫背後的原始開發人員,他從公司成立之初就塑造了公司的產品架構,與首席執行官 Cameron Rimington 一起將公司轉型為一家 50 多人的公司,為 NASA、Tesla 和全球政府機構提供服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽工程學士學位 (BEng)(1998-2001 年)。

Jacob 於 1999 年在倫敦開設了他的第一家軟體公司,並於 2005 年創建了他的第一個 .NET 元件,之後,他專門解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF & Iron Suite for .NET 函式庫在全球的 NuGet 安裝量已超過 3000 萬次,他的基礎程式碼持續為全球使用的開發人員工具提供動力。Jacob 擁有 25 年的商業經驗和 41 年的編碼專業知識,他一直專注於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代的技術領導者。