.NET 帮助

C# PostgreSQL(对开发人员的工作原理)

发布 2024年四月3日
分享:

欢迎阅读本教程,本教程专为有兴趣将 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"
VB   C#

localhostyourpasswordmydatabase 替换为 PostgreSQL 服务器的详细信息。

定义员工模型

我们定义了一个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; }
}
Public Class Employee
	Public Property Id() As Integer ' -  Automatically becomes the primary key
	Public Property LastName() As String
End Class
VB   C#

以下代码片段定义了一个简单的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");
    }
}
Public Class AppDbContext
	Inherits DbContext

	Public Property Employees() As DbSet(Of Employee) ' -  Represents the Employees table
	Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder)
		Dim connectionString As String = "Host=localhost; Port=5432; Username=postgres; Password=your_password; Database=your_database"
		optionsBuilder.UseNpgsql(connectionString)
	End Sub
	Protected Overrides Sub OnModelCreating(ByVal modelBuilder As ModelBuilder)
		modelBuilder.Entity(Of Employee)().ToTable("Employees")
	End Sub
End Class
VB   C#

DbSet 属性公共 DbSet员工 {获取; 设置; }声明了一组Employee实体,并将其映射到PostgreSQL数据库中的employee表。

OnConfiguring 方法:此方法使用必要的数据库连接字符串配置 DbContext。 将 your_passwordyour_database 替换为您实际的 PostgreSQL 服务器详细信息。

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

主程序逻辑

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

class Program
{
    static void Main(string [] args)
    {
        using (var context = new AppDbContext())
        {
            context.Database.EnsureCreated();
            if (!context.Employees.Any())
            {
                context.Employees.Add(new Employee { LastName = "Software" });
                context.SaveChanges();
            }
            var employees = context.Employees.Where(e => e.LastName == "Doe").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();
            if (!context.Employees.Any())
            {
                context.Employees.Add(new Employee { LastName = "Software" });
                context.SaveChanges();
            }
            var employees = context.Employees.Where(e => e.LastName == "Doe").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()
			If Not context.Employees.Any() Then
				context.Employees.Add(New Employee With {.LastName = "Software"})
				context.SaveChanges()
			End If
			Dim employees = context.Employees.Where(Function(e) e.LastName = "Doe").ToList()
			For Each employee In employees
				Console.WriteLine($"Employee ID: {employee.Id}, Last Name: {employee.LastName}")
			Next employee
		End Using
	End Sub
End Class
VB   C#

上面的代码检查数据库是否存在,并在不存在时创建数据库及其架构。 这是一种在开发过程中轻松启动新数据库的方法。 该SQL语句检查Employees表是否为空,程序如果为空则添加一个姓为“Software”的新Employee,并将更改保存到数据库。 程序查询 Employees 表中姓氏为 "Software" 的条目,并将其详细信息打印到控制台。 我们可以添加一个SQL查询来删除Postgres数据库中的表。 我们还可以为我们的数据库添加一个 .NET 数据提供程序。

输出

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

C# PostgreSQL(如何为开发人员工作):图 2 - 输出

这是PgAdmin中的表数据:

C# PostgreSQL(如何为开发人员工作):图 3 - 表输出

IronPDF 简介

探索 IronPDF 库的功能译者的目的是了解这个 C# 综合库如何使开发人员能够在 .NET 应用程序中创建、编辑和处理 PDF 文档。 这个强大的工具简化了从 HTML 生成 PDF, URLs 和图片。 它还提供了基本的PDF操作,例如编辑文字和图像,以及添加加密和数字签名等安全功能。 IronPDF以其易用性脱颖而出,开发人员只需少量代码即可实现复杂的PDF功能。

IronPDF 提供转换功能毫不费力地将 HTML 转换为 PDF保持布局和样式不变。 此功能非常适合从基于网络的内容生成PDF文件,例如报告、发票和文档。 它将 HTML 文件、URLs 和 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
VB   C#

将IronPDF集成到PostgreSQL数据库中,在需要基于存储在数据库中的动态数据生成PDF报告或文档的情况下,可能会非常有用。 这可能包括从保存在PostgreSQL数据库中的数据直接生成发票、报告、客户对账单等。

安装 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}");
        }
    }
}
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
VB   C#

输出

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

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

此PDF已生成:

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

结论

你刚刚踏入了使用C#和PostgreSQL进行数据库管理的世界的第一步。 通过按照本教程中的说明操作,您已学会如何在 Visual Studio 中设置项目,安装必要的软件包,并执行基本的数据库操作。 当您更加熟悉这些概念时,您会发现将C#与最重要的关系数据库系统之一相结合的强大功能和灵活性。 继续尝试不同的查询和实体配置,以加深你对C#如何与PostgreSQL交互的理解。

IronPDF 提供了一个免费试用 IronPDF 功能使开发人员能够在没有任何初期投资的情况下探索其功能和特性。 这个试用版本特别适用于评估IronPDF在.NET应用程序中生成、编辑和转换PDF文档的能力是否满足项目需求。 在试用期结束后或用于生产环境时,必须获取许可证。 IronPDF的授权费用从$749起,提供了一系列适合不同开发需求的功能和支持选项。

< 前一页
NativeUI C#(开发者指南)
下一步 >
C# 参数(开发人员了解其工作原理)

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >