用 C# 连接 PostgreSQL 最常用、最推荐的方式就是使用 Npgsql —— 它是专为 .NET 设计的开源、高性能、完全兼容的 PostgreSQL 数据库驱动,支持 .NET 5/6/7/8、.NET Framework 4.6.1+ 和 .NET Standard 2.0+。
安装 Npgsql 包
在项目中引入 Npgsql,推荐用 NuGet 包管理器(Visual Studio 或命令行):
Visual Studio:右键项目 → “管理 NuGet 包” → 搜索 Npgsql → 安装最新稳定版(如 8.x) 命令行(.NET CLI):dotnet add package Npgsql若需 Entity Framework Core 支持,额外安装:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
配置连接字符串
PostgreSQL 连接字符串格式如下(关键参数要填对):
Host=localhost;Port=5432;Database=mydb;Username=postgres;Password=mypassword; Host:数据库服务器地址,本地可写localhost或
127.0.0.1;远程需填实际 IP 或域名 Port:默认是
5432,若修改过 PostgreSQL 的
postgresql.conf需同步更新 Database:目标数据库名(需已存在) Username/Password:数据库用户凭据,建议不用超级用户(如 postgres),而用最小权限账号 可选增强:加
Pooling=true;(默认开启,提高性能)、
SSL Mode=Require;(启用 SSL)
基础连接与查询示例
以下是最简可用的同步代码(控制台程序为例):
using Npgsql;
<p>string connString = "Host=localhost;Port=5432;Database=testdb;Username=appuser;Password=123456;";
using var conn = new NpgsqlConnection(connString);
conn.Open();</p><p>using var cmd = new NpgsqlCommand("SELECT version();", conn);
var version = cmd.ExecuteScalar();
Console.WriteLine($"PostgreSQL 版本: {version}");
务必用 using确保连接和命令对象被正确释放 执行查询优先用
ExecuteScalar()(单值)、
ExecuteReader()(多行结果)、
ExecuteNonQuery()(INSERT/UPDATE/DELETE) 涉及用户输入时,**必须使用参数化查询**防止 SQL 注入,例如:
cmd.Parameters.AddWithValue("@name", name);
常见问题快速排查
连不上?先检查这几项:
PostgreSQL 服务是否运行?在终端执行sudo systemctl status postgresql(Linux)或查看 Windows 服务 用户是否有连接权限?确认
pg_hba.conf中有对应 host 类型的访问规则(如
host all all 127.0.0.1/32 md5) 防火墙是否放行 5432 端口?特别是云服务器(阿里云/腾讯云等)要检查安全组 密码错误或数据库不存在会直接抛
NpgsqlException,捕获后打印
ex.Message很有帮助 .NET 6+ 项目若报“找不到引用”,检查是否遗漏
using Npgsql;或目标框架是否兼容(Npgsql 8 要求 .NET 6+)
基本上就这些。Npgsql 上手快、文档全、社区活跃,搭配 Dapper 或 EF Core 可进一步提升开发效率。不复杂但容易忽略细节——尤其连接字符串和权限配置。
