跳至页脚内容
.NET 帮助

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

欢迎来到为有兴趣将 C# 应用程序与PostgreSQL集成的新手设计的本教程。 PostgreSQL 是全球使用最广泛的关系数据库之一,以其可靠性和与包括 C# 在内的大量编程环境的兼容性而闻名。 本指南将带您了解如何将 C# 应用程序连接到 PostgreSQL 数据库、执行 SQL 语句查询以及处理数据的基础知识。 我们将使用 Visual Studio、NuGet 包管理器和 Npgsql 数据提供程序等工具来创建与 PostgreSQL 服务器通信的简单项目。 我们还将了解集成 PostgreSQL 时的 IronPDF 库。

设置您的环境

在深入编码之前,请确保您在计算机上安装了 Visual Studio。 Visual Studio 是一个流行的集成开发环境 (IDE),支持 C# 以及其他编程语言。 对于数据库管理,请在本地机器上安装 PostgreSQL,或在 Azure Database 等云环境中设置 PostgreSQL 数据库。

在设置 Visual Studio 和 PostgreSQL 服务器后,创建一个新的 C# 项目。 您可以通过打开 Visual Studio,进入文件菜单,选择新建,然后选择项目来进行此操作。 选择控制台应用程序 (.NET Core) 作为项目类型,以保持简单。

将 PostgreSQL 与 C# 集成

要将 C# 应用程序连接到 PostgreSQL 数据库,您需要 Npgsql 数据提供程序。 Npgsql 充当 C# 应用程序与 PostgreSQL 数据库之间的桥梁,使您的代码能够执行 SQL 命令并管理数据。

安装 Npgsql

在 Visual Studio 中打开您新创建的项目。 右键单击解决方案资源管理器中的项目,选择“管理 NuGet 包”,然后搜索 Npgsql 包。 通过点击包名称旁边的安装按钮来安装它。 此操作将在项目中添加 Npgsql 数据提供程序,使您的应用程序能够与 PostgreSQL 通信。 您也可以使用包管理器控制台进行安装。

C# PostgreSQL(开发人员如何使用):图 1 - Npgsql

配置数据库连接

从 C# 与 PostgreSQL 数据库交互的第一步是建立连接。 这需要一个连接字符串,包括服务器名称、端口、用户名和密码等详细信息。 这是 PostgreSQL 连接字符串的基本模板:

string connectionString = "Host=localhost; Port=5432; Username=postgres; Password=yourpassword; Database=mydatabase";
string connectionString = "Host=localhost; Port=5432; Username=postgres; Password=yourpassword; Database=mydatabase";
Dim connectionString As String = "Host=localhost; Port=5432; Username=postgres; Password=yourpassword; Database=mydatabase"
$vbLabelText   $csharpLabel

用您的 PostgreSQL 服务器的详细信息替换 localhostyourpasswordmydatabase

定义 Employee 模型

我们定义一个 Employee 实体模型,它将表示我们在 PostgreSQL 数据库中的数据。 此模型包含与数据库表中的列相对应的属性。

public class Employee
{
    public int Id { get; - **OnConfiguring 方法**:此方法使用必要的数据库连接字符串配置 **DbContext**。 } // Automatically becomes the primary key
    public string LastName { get; - **OnConfiguring 方法**:此方法使用必要的数据库连接字符串配置 **DbContext**。 }
}
public class Employee
{
    public int Id { get; - **OnConfiguring 方法**:此方法使用必要的数据库连接字符串配置 **DbContext**。 } // Automatically becomes the primary key
    public string LastName { get; - **OnConfiguring 方法**:此方法使用必要的数据库连接字符串配置 **DbContext**。 }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此代码片段定义了一个简单的 Employee 类,具有两个属性:IdLastName。 Entity Framework Core 使用约定来推断 Id 序列主键属性应作为主键。

配置应用程序的 DbContext

AppDbContext 类扩展了 Entity Framework Core 中的 DbContext,充当您的 C# 应用程序与 PostgreSQL 数据库之间的桥梁。 它包含配置信息,如连接字符串和表示数据库表的 DbSet 属性。

public class AppDbContext : DbContext
{
    public DbSet<Employee> Employees { get; - **OnConfiguring 方法**:此方法使用必要的数据库连接字符串配置 **DbContext**。 } // Represents the Employees table

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        string connectionString = "Host=localhost; Port=5432; Username=postgres; Password=your_password; Database=your_database";
        optionsBuilder.UseNpgsql(connectionString);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>().ToTable("Employees");
    }
}
public class AppDbContext : DbContext
{
    public DbSet<Employee> Employees { get; - **OnConfiguring 方法**:此方法使用必要的数据库连接字符串配置 **DbContext**。 } // Represents the Employees table

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        string connectionString = "Host=localhost; Port=5432; Username=postgres; Password=your_password; Database=your_database";
        optionsBuilder.UseNpgsql(connectionString);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>().ToTable("Employees");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel
  • DbSet 属性public DbSet Employees { get; - OnConfiguring 方法:此方法使用必要的数据库连接字符串配置 DbContext。 } 声明了一组Employee 实体,它们映射到 PostgreSQL 数据库中的雇员表。 - OnConfiguring 方法:此方法使用必要的数据库连接字符串配置 DbContext。 用您的实际 PostgreSQL 服务器详细信息替换 your_passwordyour_database**。

  • OnModelCreating 方法:在这里,您可以使用 Fluent API 进一步配置实体行为。 在此示例中,我们显式指定表名,尽管如果表名与 DbSet 属性名称匹配则为可选。

主要程序逻辑 在 Program 类的 Main 方法中,我们确保数据库已创建,如果空则用初始数据填充数据库,然后执行查询以检索和显示员工数据。

上述代码检查数据库是否存在,如果不存在,则创建数据库并创建模式。

这是在开发期间引导新数据库的简单方法。

class Program
{
    static void Main(string[] args)
    {
        using (var context = new AppDbContext())
        {
            context.Database.EnsureCreated();  // Ensure the database and schema are created
            if (!context.Employees.Any())  // Check if the Employees table is empty
            {
                context.Employees.Add(new Employee { LastName = "Software" });
                context.SaveChanges();  // Save changes to the database
            }
            var employees = context.Employees.Where(e => e.LastName == "Software").ToList();
            foreach (var employee in employees)
            {
                Console.WriteLine($"Employee ID: {employee.Id}, Last Name: {employee.LastName}");
            }
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        using (var context = new AppDbContext())
        {
            context.Database.EnsureCreated();  // Ensure the database and schema are created
            if (!context.Employees.Any())  // Check if the Employees table is empty
            {
                context.Employees.Add(new Employee { LastName = "Software" });
                context.SaveChanges();  // Save changes to the database
            }
            var employees = context.Employees.Where(e => e.LastName == "Software").ToList();
            foreach (var employee in employees)
            {
                Console.WriteLine($"Employee ID: {employee.Id}, Last Name: {employee.LastName}");
            }
        }
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Using context = New AppDbContext()
			context.Database.EnsureCreated() ' Ensure the database and schema are created
			If Not context.Employees.Any() Then ' Check if the Employees table is empty
				context.Employees.Add(New Employee With {.LastName = "Software"})
				context.SaveChanges() ' Save changes to the database
			End If
			Dim employees = context.Employees.Where(Function(e) e.LastName = "Software").ToList()
			For Each employee In employees
				Console.WriteLine($"Employee ID: {employee.Id}, Last Name: {employee.LastName}")
			Next employee
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

此 SQL 语句检查,如果 Employees 表为空,则程序添加一个姓氏为“Software”的新 Employee 并将更改保存到数据库中。 程序查询 Employees 表中姓氏为“Software”的条目并将其详细信息输出到控制台。 C# PostgreSQL(开发人员如何使用):图 2 - 输出 这是 PgAdmin 中的表数据:

输出

这是运行程序时控制台的输出:

C# PostgreSQL(开发人员如何使用):图 3 - 表输出

探索 IronPDF 库的功能,了解这个面向 C# 的全面库如何使开发人员能够在 .NET 应用程序中创建、编辑和操作 PDF 文档。

这个强大的工具简化了从 HTML、URLs 和图像生成 PDF

IronPDF简介

它还提供必要的 PDF 操作,如编辑文本和图像,以及添加加密和数字签名等安全功能。 IronPDF 因其易用性而脱颖而出,允许开发人员用最少的代码实现复杂的 PDF 功能。 IronPDF 提供将HTML 无缝转换为 PDF的功能,同时保持布局和样式不变。 此功能是从基于网络的内容(如报告、发票和文档)生成 PDF 的理想选择。

在需要根据存储在数据库中的动态数据生成 PDF 报告或文档的情况下,将 IronPDF 与 PostgreSQL 数据库集成可能非常有用。 这可能包括从 PostgreSQL 数据库中持久化的数据直接生成发票、报告、客户报表等。 它将 HTML 文件、URL 和 HTML 字符串转换为 PDF 文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

在使用 IronPDF 之前,您必须将其添加到项目中。 这可以通过 NuGet 包管理器轻松完成:

安装 IronPDF。

从 PostgreSQL 数据生成 PDF 在此示例中,让我们生成一个简单的 PDF 报告,其中列出我们的 PostgreSQL 数据库中的员工。

Install-Package IronPdf

我们假设您已按照前面的章节所述设置了 AppDbContextEmployee 模型。

首先,确保在项目中安装了 IronPDF 库。 然后,您可以使用以下代码从 PostgreSQL 数据库中获取数据并生成 PDF 报告:

运行代码时,控制台输出将显示: C# PostgreSQL(开发人员如何使用):图 4 - 控制台输出

class Program
{
    static void Main(string[] args)
    {
        IronPdf.License.LicenseKey = "Key";
        // Initialize the database context
        using (var context = new AppDbContext())
        {
            // Fetch employees from the database
            var employees = context.Employees.ToList();
            // Generate HTML content for the PDF
            var htmlContent = "<h1>Employee Report</h1>";
            htmlContent += "<table><tr><th>ID</th><th>Last Name</th></tr>";
            foreach (var employee in employees)
            {
                htmlContent += $"<tr><td>{employee.Id}</td><td>{employee.LastName}</td></tr>";
            }
            htmlContent += "</table>";
            // Instantiate the IronPDF HtmlToPdf converter
            var renderer = new ChromePdfRenderer();
            // Generate the PDF document from the HTML content
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            // Save the generated PDF to a file
            var outputPath = "f:\\EmployeeReport.pdf";
            pdf.SaveAs(outputPath);
            Console.WriteLine($"PDF report generated: {outputPath}");
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        IronPdf.License.LicenseKey = "Key";
        // Initialize the database context
        using (var context = new AppDbContext())
        {
            // Fetch employees from the database
            var employees = context.Employees.ToList();
            // Generate HTML content for the PDF
            var htmlContent = "<h1>Employee Report</h1>";
            htmlContent += "<table><tr><th>ID</th><th>Last Name</th></tr>";
            foreach (var employee in employees)
            {
                htmlContent += $"<tr><td>{employee.Id}</td><td>{employee.LastName}</td></tr>";
            }
            htmlContent += "</table>";
            // Instantiate the IronPDF HtmlToPdf converter
            var renderer = new ChromePdfRenderer();
            // Generate the PDF document from the HTML content
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            // Save the generated PDF to a file
            var outputPath = "f:\\EmployeeReport.pdf";
            pdf.SaveAs(outputPath);
            Console.WriteLine($"PDF report generated: {outputPath}");
        }
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		IronPdf.License.LicenseKey = "Key"
		' Initialize the database context
		Using context = New AppDbContext()
			' Fetch employees from the database
			Dim employees = context.Employees.ToList()
			' Generate HTML content for the PDF
			Dim htmlContent = "<h1>Employee Report</h1>"
			htmlContent &= "<table><tr><th>ID</th><th>Last Name</th></tr>"
			For Each employee In employees
				htmlContent &= $"<tr><td>{employee.Id}</td><td>{employee.LastName}</td></tr>"
			Next employee
			htmlContent &= "</table>"
			' Instantiate the IronPDF HtmlToPdf converter
			Dim renderer = New ChromePdfRenderer()
			' Generate the PDF document from the HTML content
			Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
			' Save the generated PDF to a file
			Dim outputPath = "f:\EmployeeReport.pdf"
			pdf.SaveAs(outputPath)
			Console.WriteLine($"PDF report generated: {outputPath}")
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

输出

生成此 PDF:

C# PostgreSQL(开发人员如何使用):图 5 - PDF 输出

您刚刚迈出了使用 C# 和 PostgreSQL 进行数据库管理的重大第一步。

通过本教程中的说明,您已学习如何在 Visual Studio 中设置一个项目、安装必要的包并执行基本的数据库操作。

结论

随着您对这些概念的熟悉,您将会发现结合 C# 与最重要的关系数据库系统之一的强大功能和灵活性。 继续尝试不同的查询和实体配置,以加深您对 C# 如何与 PostgreSQL 交互的理解。 IronPDF 提供IronPDF 功能的免费试用,允许开发人员在没有任何初始投资的情况下探索其功能和能力。 此试用特别有助于评估 IronPDF 在生成、编辑和转换 .NET 应用程序中的 PDF 文档方面的功能是否符合您的项目需求。

在试用期之后或用于生产,您需要获取许可证。 IronPDF 的许可从 $799 开始,提供适合不同开发需求的一系列功能和支持选项。 After the trial period or for production use, acquiring a license is necessary. Licensing for IronPDF starts at $799, offering a range of features and support options suitable for different development needs.

常见问题解答

如何将C#应用程序连接到PostgreSQL数据库?

要将C#应用程序连接到PostgreSQL数据库,您需要使用Npgsql数据提供程序,可以通过Visual Studio中的NuGet包管理器安装。您还需要一个正确配置的连接字符串,其中包括服务器名、端口、用户名、密码和数据库名。

设置一个与PostgreSQL的C#项目需要哪些步骤?

首先,在您的机器上安装Visual Studio和PostgreSQL。然后,创建一个新的C#项目并使用NuGet包管理器安装Npgsql数据提供程序。配置您的连接字符串,并确保您的PostgreSQL服务器正在运行。

如何在C#应用程序中执行SQL命令?

您可以使用Npgsql数据提供程序在C#应用程序中执行SQL命令。在与PostgreSQL数据库建立连接后,您可以使用NpgsqlCommand运行SQL查询,如SELECT、INSERT、UPDATE和DELETE。

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

IronPDF允许您在C#中从PostgreSQL数据生成PDF报告。您可以从数据库中检索数据,并使用IronPDF的功能创建PDF文档,包括将HTML内容转换为PDF或编辑现有的PDF。

在C#中使用Npgsql数据提供程序的目的是什么?

Npgsql数据提供程序用于C#中,以便与PostgreSQL数据库进行通信。它允许您的应用程序执行SQL查询、管理数据并无缝地与数据库互动。

如何使用C#创建和填充数据库?

在C#中,您可以使用context.Database.EnsureCreated()方法创建数据库,该方法检查数据库是否存在,如果不存在则创建。您可以通过向上下文中添加数据并使用context.SaveChanges()来保存初始数据。

在.NET应用程序中使用IronPDF有哪些好处?

IronPDF在.NET应用程序中提供了强大的创建、编辑和操作PDF文档功能。它支持将HTML转换为PDF、编辑文本和图像,并添加诸如加密等安全功能。

如何在C#中为PostgreSQL表定义数据模型?

您可以通过创建一个对应于PostgreSQL表结构的类在C#中定义数据模型。类中的每个属性应匹配表中的一列,以便实体框架正确映射数据。

如何排除C#与PostgreSQL之间的连接问题?

要排除连接问题,请确保您的连接字符串配置正确,验证您的PostgreSQL服务器正在运行,并检查是否存在可能阻止连接的防火墙或网络问题。

Curtis Chau
技术作家

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

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