跳至頁尾內容
.NET幫助

Npgsql C#(對於開發者的運行原理)

Npgsql 是一項關鍵技術,可讓 .NET 應用程式與 PostgreSQL 資料庫之間順暢溝通,因為開發人員正在尋找強大的資料庫工作方式。 適用於 PostgreSQL 伺服器的 .NET 資料提供者,或稱 Npgsql,是資料庫連結性領域中創造力、有效性和適應性的象徵。 它允許 C#、Visual Basic 和 F# 使用者存取資料庫。 EF Core 使用者也可使用傳統的實體框架 6.x。

在 C# 和 VB.NET 程式中,有一個很受歡迎的 .NET 函式庫,叫做 IronPDF ,用來產生、修改和顯示 PDF 文件。 除了執行複雜的工作,例如合併數個 PDF、加入水印,以及從預先存在的 PDF 檔案中擷取文字或圖片之外,它還能讓開發人員從各種來源建立 PDF 檔案,包括 HTML、照片和原始文字。

透過本教學,您將學會如何在 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# (How It Works For Developers):圖 1 - 使用管理 NuGet Package for Solution 安裝 Npgsql,方法是在 NuGet Package Manager 的搜尋列中搜尋 Npgsql,然後選擇專案並點選安裝按鈕。

1.2.2 在 Windows 主控台和表單中實作 Npgsql

Windows 窗體 (WinForms) 和 Windows 控制台等多種 C# 應用程式類型都可以使用 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# (How It Works For Developers):圖 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

當 Npgsql 和 IronPDF 在 C# 專案中一起使用時,會產生令人興奮的可能性。 雖然 Npgsql 是使用 PostgreSQL 的絕佳工具,但 IronPDF 是將這些內容轉換成 PDF 的絕佳工具。 由於這種連線性,程式設計師可以設計能與資料庫溝通的應用程式,並有能力將這些內容轉換成 PDF。

3.2 使用 IronPDF 獲取 PostgreSQL 資料。

使用者可以透過建立使用 Npgsql 的 Windows 主控台應用程式,在您的應用程式中與資料庫互動。 先將資料庫存取加入您的應用程式。主控台上應該有足夠的空間放置此控制項,並為 DB 互動留出充足的空間。 同時包含資料類型對應和大量作業。

安裝 IronPDF

  • 在 Visual Studio 中啟動專案。
  • 選擇"工具">"NuGet Package Manager">"Package Manager Console"。

    • 在套件管理員控制台輸入下列指令,然後按 Enter:
    Install-Package IronPdf
  • 另外,您也可以使用 NuGet Package Manager for Solutions 安裝 IronPDF。
    • 在搜尋結果中找到 IronPDF 套件,選取該套件,然後按一下"安裝"按鈕。 Visual Studio 會自動處理下載與安裝。

Npgsql C# (How It Works For Developers):圖 3 - 使用 Manage NuGet Package for Solution 安裝 IronPDF,方法是在 NuGet Package Manager 的搜尋列中搜尋 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。 HTML 字串可使用 HtmlToPdf 類格式化為 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# (How It Works For Developers):圖 4 - 使用 Npgsql PostgreSQL 資料庫和 IronPDF 的資料所產生的 PDF 輸出

結論

透過 IronPDF 的 PDF 生成功能Npgsql PostgreSQL 資料庫連結性的絕佳整合,開發人員可以設計適應性強且穩健的解決方案,以製作符合其獨特需求的動態 PDF 文件。

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

IronPDF 還提供 全面的說明文件,以及積極維護的 PDF 產生與處理的程式碼範例,以利用 IronPDF 的各種功能。

常見問題

如何將 C# 應用程序連接到 PostgreSQL 數據庫?

要將 C# 應用程序連接到 PostgreSQL 數據庫,您可以使用 Npgsql,它是 PostgreSQL 的 .NET 資料提供者。首先,通過 Visual Studio 中的 NuGet 套件管理器安裝 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 從 PostgreSQL 數據中生成 PDF 報告。首先,使用 Npgsql 從 PostgreSQL 數據庫查詢和檢索數據。然後,根據需要格式化數據並使用 IronPDF 將其轉換為 PDF 文檔。

設置 Npgsql 在 C# 項目中包含哪些步驟?

要在 C# 項目中設置 Npgsql,首先使用 NuGet Package Manager 安裝 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)及全球政府機構。

雅各布於曼徹斯特大學(1998–2001)取得土木工程一等榮譽工程學士學位(BEng)。他在 1999 年於倫敦創立首家軟體公司,並於 2005 年開發出首批 .NET 元件,此後專注於解決微軟生態系統中的複雜問題。

其旗艦產品 IronPDF 與 Iron Suite .NET 函式庫在全球已累積超過 3,000 萬次 NuGet 安裝,其基礎程式碼持續驅動著全球廣泛使用的開發者工具。憑藉 25 年商業經驗與 41 年程式設計專業,雅各持續致力於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領導者。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我