跳至页脚内容
.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";
$vbLabelText   $csharpLabel

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

定义 Employee 模型

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

public class Employee
{
    public int Id { get; set; } // Automatically becomes the primary key
    public string LastName { get; set; }
}
public class Employee
{
    public int Id { get; set; } // Automatically becomes the primary key
    public string LastName { get; set; }
}
$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; set; } // 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; set; } // 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");
    }
}
$vbLabelText   $csharpLabel
  • DbSet 属性:**公共数据库集员工 { 获取; set; } 声明一组 Employee** 实体,这些实体映射到 PostgreSQL 数据库中的员工表。

  • OnConfiguring 方法:此方法使用必要的数据库连接字符串配置DbContext 。 在此示例中,我们显式指定表名,尽管如果表名与 DbSet 属性名称匹配则为可选。

  • 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}");
            }
        }
    }
}
$vbLabelText   $csharpLabel

上述代码检查数据库是否存在,如果不存在则创建它及其模式。 程序查询 Employees 表中姓氏为"Software"的条目并将其详细信息输出到控制台。 C# PostgreSQL(开发人员如何使用):图 2 - 输出 该程序查询 Employees 表中姓氏为 "Software" 的条目,并将其详细信息打印到控制台。

输出

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

C# PostgreSQL(开发者开启的一扇窗):图 2 - 输出

而它是 PgAdmin 中的表数据:

C# PostgreSQL(开发者开启的一扇窗):图 3 - 表输出

IronPDF简介

探索 IronPDF 库的能力 以了解这个全面的 C# 库如何使开发者能够在 .NET 应用程序中创建、编辑和操作 PDF 文档。 这个强大的工具简化了 从 HTML 生成 PDF、URL 和图像。 IronPDF 提供将HTML 无缝转换为 PDF的功能,同时保持布局和样式不变。 此功能是从基于网络的内容(如报告、发票和文档)生成 PDF 的理想选择。

IronPDF 提供将 HTML 转换为 PDF 的能力,同时保持布局和样式不变。 这可能包括从 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");
    }
}
$vbLabelText   $csharpLabel

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

安装 IronPDF。

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

Install-Package IronPdf

从 PostgreSQL 数据生成 PDF

在这个例子中,讓我們生成一個简单的 PDF 报告,列出我们 PostgreSQL 数据库中的员工。 我们假设您已按照前面的章节设置了 AppDbContextEmployee 模型。

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

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}");
        }
    }
}
$vbLabelText   $csharpLabel

输出

当您运行代码时,此控制台输出将显示:

C# PostgreSQL (开发者如何工作): 图 4 - 控制台输出

生成的 PDF 如下:

C# PostgreSQL (开发者如何工作): 图 5 - PDF 输出

结论

您刚刚迈出了进入 C# 和 PostgreSQL 数据库管理世界的重要第一步。 按照本教程中的说明,您已学习如何在 Visual Studio 中设置项目,安装必要的包,并执行基本的数据库操作。 随着您对这些概念的熟悉,您将发现将 C# 与最重要的关系数据库系统之一结合的强大和灵活性。 此试用特别有助于评估 IronPDF 在生成、编辑和转换 .NET 应用程序中的 PDF 文档方面的功能是否符合您的项目需求。

IronPDF 提供 IronPDF 功能的免费试用,允许开发人员在没有任何初始投资的情况下探索其功能和能力。 IronPDF 的许可从 $799 开始,提供适合不同开发需求的一系列功能和支持选项。 试用期结束后或生产使用时,必须获得许可证。 IronPdf 的授权起价为 $799,提供一系列适合不同开发需求的功能和支持选项。

常见问题解答

如何将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服务器正在运行,并检查是否存在可能阻止连接的防火墙或网络问题。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,是 C# PDF 技术的先锋工程师。作为 Iron Software 核心代码库的原始开发者,自公司成立以来,他就塑造了公司的产品架构,并与首席执行官 Cameron Rimington 一起将其转变成一家公司,拥有50多人,服务于 NASA、特斯拉和全球政府机构。

Jacob 拥有曼彻斯特大学 (1998-2001) 的一级荣誉土木工程学士学位。1999 年在伦敦创办了自己的第一家软件公司,并于 2005 年创建了他的第一个 .NET 组件后,他专注于解决微软生态系统中的复杂问题。

他的旗舰 IronPDF 和 Iron Suite .NET 库在全球已获得超过 3000 万次的 NuGet 安装,其基础代码继续为全球使用的开发者工具提供支持。拥有 25 年商业经验和 41 年编程经验的 Jacob 仍专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。