跳至页脚内容
.NET 帮助

Npgsql C#(开发人员如何使用)

Npgsql is a key technology that enables smooth communication between .NET applications and PostgreSQL 数据库之间的顺畅通信。 .NET Data Provider for PostgreSQL server,即 Npgsql,是数据库连接领域创造力、有效性和适应性的象征。 它允许 C#、Visual Basic 和 F# 用户访问数据库。 EF Core 用户还可以使用传统的实体框架 6.x。

一种广受欢迎的 .NET 库,名为 IronPDF,用于 C# 和 VB.NET 程序中生成、修改和显示 PDF 文档。 除了执行合并多个 PDF 文件、添加水印以及从现有 PDF 文件中提取文本或图像等复杂任务,IronPDF 还使开发人员能够从各种来源(包括 HTML、图片和原始文本)创建 PDF 文件。

You will learn how to integrate IronPDF and NPGSQL in a C# application by following this tutorial. 我们将研究从简单设置到复杂功能,这些工具如何结合使用以改善您的应用程序的功能。

如何使用 Npgsql

  1. 创建一个新的 C# 项目
  2. 安装 Npgsql 库。
  3. 连接到 Npgsql 数据库。
  4. 执行查询并获取结果。
  5. 处理结果并关闭连接。

1. Npgsql 简介

从根本上讲,Npgsql 是 .NET 开发人员与 PostgreSQL(一个以稳定性、可扩展性和可扩展性著称的开源关系数据库管理系统)之间的联系。 Npgsql 通过提供丰富的功能集,使开发人员能够方便有效地处理事务、执行查询、检索数据以及简化数据库操作。

1.1 使用 Npgsql 的优势

性能:Npgsql 的速度和效率是内置的。 为了保证使用 PostgreSQL 数据库时的最佳速度,Npgsql 利用批处理命令、异步输入/输出和优化数据类型等功能。

完整的 PostgreSQL 支持: Npgsql 的目标是对所有 PostgreSQL 功能(如数组、JSONB、高级数据类型和用户定义类型)提供完整支持。这意味着程序员可以在他们的 .NET 应用程序中充分利用 PostgreSQL 的潜力。

1.2 Npgsql 入门

1.2.1 在 C# 项目中设置 Npgsql

将 Npgsql 集成到 C# 项目中是简单的。 添加 Npgsql 需要使用微软的 .NET 包管理器 NuGet。 该库提供了与您的项目中集成 PostgreSQL 数据库和 Npgsql 所需的工具和库。

Npgsql C#(它如何为开发人员工作):图1 - 使用解决方案的 NuGet 包管理器通过在 NuGet 包管理器的搜索栏中搜索“Npgsql”,然后选择项目并单击“安装”按钮来安装 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 - 控制台输出,使用 Npgsql 包在 .NET 项目中从 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 控制台应用程序,让用户可以在应用程序中与数据库交互。 首先将数据库访问添加到您的应用程序中。为此控件提供足够的控制台空间,并留出大量空间用于数据库交互。 还包括数据类型映射和批量操作。

安装IronPDF

  • 在 Visual Studio 中启动该项目。
  • 选择“工具”>“NuGet包管理器”>“包管理器控制台”。

    • 在包管理器控制台中输入以下命令并按下 Enter 键:
    Install-Package IronPdf
  • 或者,您也可以通过使用解决方案的 NuGet 包管理器安装 IronPDF。
    • 在搜索结果中找到 IronPDF 包,选择它,然后单击“安装”按钮。 ### 4.2 使用NuGet包管理器控制台安装

Npgsql C#(它如何为开发人员工作):图3 - 使用解决方案的 NuGet 包管理器,通过在 NuGet 包管理器的搜索栏中搜索“IronPdf”,然后选择项目并单击“安装”按钮来安装 IronPDF。

  • NuGet 将下载并安装 IronPDF 包以及您的项目所需的任何依赖项。
  • 安装后,您可以开始在项目中使用 IronPDF。

通过NuGet网站安装

有关 IronPDF 的更多信息,包括功能、兼容性和其他下载选项,请访问 NuGet 上的 IronPDF 包 网站。

使用DLL安装

作为替代,您可以使用IronPDF的DLL文件将其直接集成到您的项目中。 使用此 IronPDF ZIP 包 链接下载包含 DLL 的 ZIP 文件。 解压缩后,将 DLL 添加到您的项目中。

实施逻辑

当我们开始运行应用程序时,它将使用 Npgsql .NET 库从数据库中获取数据。 借助 IronPDF,我们可以将数据库内容转换为 PDF 文档。

  1. 获取数据:当用户开始转换时,从 Npgsql .NET 提供程序获取最新内容。
  2. 使用 IronPDF 生成 PDF:使用 IronPDF 将 Npgsql 数据库中的数据转换为 PDF。 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。

结论

Through the great integration of IronPDF's PDF generation capabilities and Npgsql PostgreSQL database connectivity, developers may design adaptable and robust solutions for producing dynamic PDF documents that meet their unique needs.

$799 Lite 套餐包括永久许可证和一年的软件支持,以及升级选项。 IronPDF 提供免费许可选项。 欲了解更多关于 Iron Software 的其他产品,请访问其 产品页面

IronPDF also offers comprehensive documentation and actively maintained code examples for PDF generation and manipulation to utilize the various features of 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 成为使用 PostgreSQL 数据库的 .NET 开发人员的强大工具。

如何在C#中从PostgreSQL数据生成PDF报告?

您可以通过使用 IronPDF 从 PostgreSQL 数据生成 PDF 报告。首先,使用 Npgsql 从 PostgreSQL 数据库查询和检索数据。然后根据需要格式化数据,并使用 IronPDF 将其转换为 PDF 文档。

设置 Npgsql 在 C# 项目中涉及哪些步骤?

要在 C# 项目中设置 Npgsql,首先通过使用 NuGet 包管理器安装 Npgsql。接下来,为您的 PostgreSQL 数据库创建连接字符串。使用 NpgsqlConnection 类连接到数据库并根据需要执行查询。

如何以 PDF 格式记录数据库查询结果?

要以 PDF 格式记录数据库查询结果,使用 Npgsql 执行查询并从 PostgreSQL 数据库检索结果。然后,使用 IronPDF 将数据转换为格式良好的 PDF 文档,可以根据需要保存或共享。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。