C#怎么操作PostgreSQL数据库

来源:IT编程作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《C#怎么操作PostgreSQL数据库》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么操作PostgreSQL数据库》有用,将其分享出去将是对创作者最好的鼓励。

在C#项目中操作PostgreSQL数据库,最常用的方式是使用官方提供的Npgsql驱动,它完全兼容PostgreSQL的特性,支持连接池、异步操作、复杂数据类型等能力,能够满足绝大多数业务场景的数据库操作需求。

C#怎么操作PostgreSQL数据库

环境准备

首先需要在项目中引入Npgsql依赖,如果你使用的是.NET Core或者.NET 5及以上版本,可以通过NuGet包管理器安装,也可以在项目文件里添加引用:

<PackageReference Include="Npgsql" Version="7.0.0" />

安装完成后,就可以在代码里使用Npgsql提供的类库进行数据库操作了。

建立数据库连接

连接PostgreSQL需要配置正确的连接字符串,连接字符串包含服务器地址、端口、数据库名称、用户名和密码等核心信息,示例代码如下:

using Npgsql;

// 配置连接字符串,localhost为数据库服务器地址,5432是PostgreSQL默认端口,mydb是数据库名,user和password为登录凭证
string connectionString = "Host=localhost;Port=5432;Database=mydb;Username=user;Password=password";
// 创建连接对象
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
    // 打开连接
    connection.Open();
    Console.WriteLine("数据库连接成功");
}

这里使用using语句包裹连接对象,能够在代码执行完成后自动释放连接资源,避免连接泄露。

执行增删改查操作

查询数据

查询操作可以使用NpgsqlCommand执行SQL语句,再通过NpgsqlDataReader读取返回的结果:

using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
    connection.Open();
    // 定义查询SQL
    string sql = "SELECT id, name, age FROM users WHERE age > @minAge";
    using (NpgsqlCommand command = new NpgsqlCommand(sql, connection))
    {
        // 添加参数,避免SQL注入
        command.Parameters.AddWithValue("minAge", 18);
        using (NpgsqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                int id = reader.GetInt32(0);
                string name = reader.GetString(1);
                int age = reader.GetInt32(2);
                Console.WriteLine($"id:{id}, 姓名:{name}, 年龄:{age}");
            }
        }
    }
}

插入数据

插入操作同样通过NpgsqlCommand执行,使用参数化方式传递插入的值:

using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
    connection.Open();
    string insertSql = "INSERT INTO users (name, age) VALUES (@name, @age)";
    using (NpgsqlCommand command = new NpgsqlCommand(insertSql, connection))
    {
        command.Parameters.AddWithValue("name", "张三");
        command.Parameters.AddWithValue("age", 25);
        // 执行插入,返回受影响的行数
        int rows = command.ExecuteNonQuery();
        Console.WriteLine($"插入成功,影响行数:{rows}");
    }
}

更新和删除数据

更新和删除操作的实现方式和插入类似,只需要修改对应的SQL语句即可:

using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
    connection.Open();
    // 更新操作示例
    string updateSql = "UPDATE users SET age = @age WHERE name = @name";
    using (NpgsqlCommand command = new NpgsqlCommand(updateSql, connection))
    {
        command.Parameters.AddWithValue("age", 26);
        command.Parameters.AddWithValue("name", "张三");
        int updateRows = command.ExecuteNonQuery();
        Console.WriteLine($"更新成功,影响行数:{updateRows}");
    }

    // 删除操作示例
    string deleteSql = "DELETE FROM users WHERE id = @id";
    using (NpgsqlCommand command = new NpgsqlCommand(deleteSql, connection))
    {
        command.Parameters.AddWithValue("id", 1);
        int deleteRows = command.ExecuteNonQuery();
        Console.WriteLine($"删除成功,影响行数:{deleteRows}");
    }
}

事务处理

当多个数据库操作需要保持原子性时,需要使用事务,要么全部成功要么全部回滚,实现代码如下:

using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
    connection.Open();
    // 开启事务
    using (NpgsqlTransaction transaction = connection.BeginTransaction())
    {
        try
        {
            string sql1 = "UPDATE accounts SET balance = balance - 100 WHERE id = 1";
            using (NpgsqlCommand command1 = new NpgsqlCommand(sql1, connection, transaction))
            {
                command1.ExecuteNonQuery();
            }

            string sql2 = "UPDATE accounts SET balance = balance + 100 WHERE id = 2";
            using (NpgsqlCommand command2 = new NpgsqlCommand(sql2, connection, transaction))
            {
                command2.ExecuteNonQuery();
            }
            // 提交事务
            transaction.Commit();
            Console.WriteLine("事务提交成功");
        }
        catch (Exception ex)
        {
            // 出现异常回滚事务
            transaction.Rollback();
            Console.WriteLine($"事务回滚,错误原因:{ex.Message}");
        }
    }
}

常见问题说明

  • 连接字符串配置错误是最常见的问题,需要确认服务器地址、端口、数据库名、用户名密码是否正确,PostgreSQL默认端口是5432。
  • 所有用户输入的参数都需要通过Parameters.AddWithValue传递,不要直接拼接SQL字符串,防止SQL注入攻击。
  • 如果操作的是大文本、二进制数据等类型,Npgsql也提供了对应的类型映射,可以直接使用对应的参数类型传递。

C#NpgsqlPostgreSQL数据库操作修改时间:2026-06-14 00:30:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。