C# PostgreSQL 教程展示了如何在 C# 中对 PostgreSQL 进行编程。它涵盖了使用 C# 进行 PostgreSQL 编程的基础知识。 C# 教程是关于 C# 语言的综合教程。

PostgreSQL

PostgreSQL 是一个功能强大的开源对象关系数据库系统。它是一个多用户数据库管理系统。它可以在多个平台上运行,包括 Linux、FreeBSD、Solaris、Microsoft Windows 和 Mac OS X。PostgreSQL 由 PostgreSQL Global Development Group 开发。

PostgreSQL 具有复杂的功能,例如多版本并发控制 (MVCC)、时间点恢复、表空间、异步复制、嵌套事务(保存点)、在线/热备份、复杂的查询计划器/优化器以及用于容错的预写日志记录. 它支持国际字符集、多字节字符编码、Unicode,并且它对排序、区分大小写和格式化具有区域感知能力。

ADO.NET

ADO.NET是 .NET 框架的重要组成部分。它是一种统一对关系数据库、XML 文件和其他应用程序数据的访问的规范。 Npgsql是 PostgreSQL 数据库的 ADO.NET 规范的实现。它是用 C# 语言编写的驱动程序,适用于所有 .NET 语言。

$ dotnet add package Npgsql

我们将包包含到我们的 .NET Core 项目中。

NpgsqlConnectionNpgsqlCommand、 NpgsqlDataReader和是 .NET 数据提供者模型的核心元素DataSet。 创建与特定数据源的连接NpgsqlDataProviderNpgsqlConnectionNpgsqlCommand对象针对数据源执行 SQL 语句。从NpgsqlDataReader数据源读取数据流。

DataSet对象用于处理大量数据的离线工作。它是一种不连贯的数据表示,可以保存来自各种不同来源的数据。两者NpgsqlDataReaderDataSet 用于处理数据;它们在不同的情况下使用。如果我们只需要读取查询的结果,那NpgsqlDataReader是更好的选择。如果我们需要更广泛的数据处理,或者我们想要将 Winforms 控件绑定到数据库表,DataSet则首选。

C# PostgreSQL 版本

如果下面的程序我们检查PostgreSQL服务器的版本。

程序.cs
using Npgsql;var cs = "Host=localhost;Username=postgres;Password=s$cret;Database=testdb";using var con = new NpgsqlConnection(cs);
con.Open();var sql = "SELECT version()";using var cmd = new NpgsqlCommand(sql, con);var version = cmd.ExecuteScalar().ToString();
Console.WriteLine($"PostgreSQL version: {version}");

我们连接到数据库并获取有关 PostgreSQL 服务器的一些信息。

using Npgsql;

我们导入 PostgreSQL 数据提供者的元素。

var cs = "Host=localhost;Username=postgres;Password=s$cret;Database=testdb";

这是连接字符串。数据提供者使用它来建立与数据库的连接。我们指定主机名、用户名、密码和数据库名。

using var con = new NpgsqlConnection(cs);

创建了一个NpgsqlConnection对象。此对象用于打开与数据库的连接。using当变量超出范围时, 该语句释放数据库连接资源。

con.Open();

此行打开数据库连接。

var sql = "SELECT version()";

这是 SQL SELECT 语句。它返回数据库的版本。这 version是一个内置的 PostgreSQL 函数。

using var cmd = new NpgsqlCommand(sql, con);

NpgsqlCommand是一个用于在数据库上执行查询的对象。参数是 SQL 语句和连接对象。

var version = cmd.ExecuteScalar().ToString();

有些查询只返回一个标量值。在我们的例子中,我们需要一个简单的字符串来指定数据库的版本。在这种 ExecuteScalar情况下使用。

Console.WriteLine($"PostgreSQL version: {version}");

我们将 PostgreSQL 的版本打印到控制台。

$ dotnet run
PostgreSQL version: PostgreSQL 11.1, compiled by Visual C++ build 1914, 64-bit

C# PostgreSQL 创建表

在下面的示例中,我们创建一个数据库表并用数据填充它。

程序.cs
using Npgsql;var cs = "Host=localhost;Username=postgres;Password=s$cret;Database=testdb";using var con = new NpgsqlConnection(cs);
con.Open();using var cmd = new NpgsqlCommand();
cmd.Connection = con;cmd.CommandText = "DROP TABLE IF EXISTS cars";
cmd.ExecuteNonQuery();cmd.CommandText = @"CREATE TABLE cars(id SERIAL PRIMARY KEY, name VARCHAR(255), price INT)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Audi',52642)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Mercedes',57127)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Skoda',9000)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Volvo',29000)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Bentley',350000)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Citroen',21000)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Hummer',41400)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Volkswagen',21600)";
cmd.ExecuteNonQuery();Console.WriteLine("Table cars created");

在示例中,我们创建了一个cars包含八行的表。

cmd.CommandText = "DROP TABLE IF EXISTS cars";
cmd.ExecuteNonQuery();

首先,如果表已经存在,我们将其删除。ExecuteNonQuery如果我们不想要结果集,例如 for DROPINSERTDELETE statements ,我们将使用该 方法。

cmd.CommandText = @"CREATE TABLE cars(id SERIAL PRIMARY KEY, name VARCHAR(255), price INT)";
cmd.ExecuteNonQuery();

cars已创建。该SERIAL 关键字使列在 PostgreSQL 中自动递增。

cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Audi',52642)";
cmd.ExecuteNonQuery();cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Mercedes',57127)";
cmd.ExecuteNonQuery();
...

这里我们在表中插入两行。

$ dotnet run
Table cars created

我们运行程序。

$ psql -U postgres testdb
psql (11.1)
Type "help" for help.

psql我们使用该工具 连接到 PostgreSQL 服务器。

testdb=# SELECT * FROM cars;
id |    name    | price
----+------------+--------
1  | Audi       |  52642
2  | Mercedes   |  57127
3  | Skoda      |   9000
4  | Volvo      |  29000
5  | Bentley    | 350000
6  | Citroen    |  21000
7  | Hummer     |  41400
8  | Volkswagen |  21600
(10 rows)

我们验证数据。表cars已成功创建。

C# PostgreSQL 准备好的语句

准备好的语句提高了安全性和性能。当我们编写准备好的语句时,我们使用占位符而不是直接将值写入语句。

程序.cs
using Npgsql;var cs = "Host=localhost;Username=postgres;Password=s$cret;Database=testdb";using var con = new NpgsqlConnection(cs);
con.Open();var sql = "INSERT INTO cars(name, price) VALUES(@name, @price)";
using var cmd = new NpgsqlCommand(sql, con);cmd.Parameters.AddWithValue("name", "BMW");
cmd.Parameters.AddWithValue("price", 36600);
cmd.Prepare();cmd.ExecuteNonQuery();Console.WriteLine("row inserted");

cars我们在桌子上 添加了一辆新车。我们使用参数化命令。

var sql = "INSERT INTO cars(name, price) VALUES(@name, @price)";
using var cmd = new NpgsqlCommand(sql, con);

当我们编写准备好的语句时,我们使用占位符而不是直接将值写入语句。准备好的语句速度更快,可以防止 SQL 注入攻击。@nameand是占位符,@price 稍后会填充。

cmd.Parameters.AddWithValue("name", "BMW");
cmd.Parameters.AddWithValue("price", 36600);
cmd.Prepare();

使用该方法将值绑定到占位符AddWithValue

cmd.ExecuteNonQuery();

准备好的语句被执行。当我们不期望返回任何数据时, 我们使用对象的ExecuteNonQuery 方法。NpgsqlCommand

C# NpgsqlDataReader

NpgsqlDataReader是用于从数据库中检索数据的对象 。它提供对查询结果的快速、只进、只读访问。这是从表中检索数据的最有效方式。

程序.cs
using Npgsql;var cs = "Host=localhost;Username=postgres;Password=s$cret;Database=testdb";using var con = new NpgsqlConnection(cs);
con.Open();string sql = "SELECT * FROM cars";
using var cmd = new NpgsqlCommand(sql, con);using NpgsqlDataReader rdr = cmd.ExecuteReader();while (rdr.Read())
{Console.WriteLine("{0} {1} {2}", rdr.GetInt32(0), rdr.GetString(1),rdr.GetInt32(2));
}

我们从cars表中获取所有行并将它们打印到控制台。

using NpgsqlDataReader rdr = cmd.ExecuteReader();

要创建NpgsqlDataReader,我们调用对象的 ExecuteReader方法NpgsqlCommand

while (rdr.Read())
{Console.WriteLine("{0} {1} {2}", rdr.GetInt32(0), rdr.GetString(1), rdr.GetInt32(2));
}

Read方法使数据读取器前进到下一条记录。true如果有更多行,则返回;否则false。我们可以使用数组索引表示法检索值,或使用特定方法访问其本机数据类型中的列值。后者效率更高。

$ dotnet run
1 Audi 52642
2 Mercedes 57127
3 Skoda 9000
4 Volvo 29000
5 Bentley 350000
6 Citroen 21000
7 Hummer 41400
8 Volkswagen 21600
9 BMW 36600

C# PostgreSQL 列标题

在以下示例中,我们使用数据库表中的数据打印列标题。

程序.cs
using Npgsql;var cs = "Host=localhost;Username=postgres;Password=s$cret;Database=testdb";using var con = new NpgsqlConnection(cs);
con.Open();var sql = "SELECT * FROM cars";using var cmd = new NpgsqlCommand(sql, con);using NpgsqlDataReader rdr = cmd.ExecuteReader();
Console.WriteLine($"{rdr.GetName(0),-4} {rdr.GetName(1),-10} {rdr.GetName(2),10}");while (rdr.Read())
{Console.WriteLine($"{rdr.GetInt32(0),-4} {rdr.GetString(1),-10} {rdr.GetInt32(2),10}");
}

在示例中,我们从cars表中选择所有行及其列名。

Console.WriteLine($"{rdr.GetName(0),-4} {rdr.GetName(1),-10} {rdr.GetName(2),10}");

我们使用GetNamereader 的方法获取列的名称。

while (rdr.Read())
{Console.WriteLine($"{rdr.GetInt32(0),-4} {rdr.GetString(1),-10} {rdr.GetInt32(2),10}");
}

我们将 SQL 语句返回的数据打印到终端。

$ dotnet run
id   name            price
1    Audi            52642
2    Mercedes        57127
3    Skoda            9000
4    Volvo           29000
5    Bentley        350000
6    Citroen         21000
7    Hummer          41400
8    Volkswagen      21600
9    BMW             36600

在本教程中,我们展示了如何使用 C# 对 PostgreSQL 数据库进行编程。

C# PostgreSQL 教程相关推荐

  1. PostgreSQL 教程

    序言 整理下~整理下~PostgreSQL 心情不顺就学习,就整理文献cuiyaonan2000@163.com 整体看了下api总的来说就是多了一个schema,其它的差不了多少~~~ 参考资料: ...

  2. linux 安装postgresql教程

    linux 安装postgresql教程 下载软件 pgsql官网地址:https://www.postgresql.org/,进入后点击download就来到下载页,这里点击Linux下面的Othe ...

  3. Windows 10 安装配置连接PostgreSQL教程

    Windows 10 安装配置连接PostgreSQL教程 1.1 PostgreSQL 下载 1.2 配置环境变量 1.3 PostgreSQL 初始化 1.4 创建postgres用户 1.5 启 ...

  4. PostGreSQL教程_postgis教程

    PostgreSQL IP地址访问配置 PostGIS常用函数介绍 PostgreSQL表间复制语句 postgis之Polygon/MultiPolygon in a single column:面 ...

  5. 阿里云 Centos7 安装PostgreSQL教程

    阿里云 Centos7 安装PostgreSQL教程 1.选择版本 2. 选择平台 3. 选择架构 4. 安装repository RPM 5. 安装客户端包 6. 可选的服务端安装包 7. 可选的初 ...

  6. PostgreSQL教程(二):SQL语言

    本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权. 2.1. 引言 本章提供一个如何使用SQL执行简单操作的概述.本教程的目的只是给你一个介绍,并非完整的SQL教程.有许多关 ...

  7. PostgreSQL教程--Ubuntu下PostgreSQL 安装教程

    1.环境信息 [背景]项目中使用到PostgreSQL,所以在家安装PostgreSQL数据库进行学习. [环境]宿主机windows.虚拟机Ubuntu PostgreSQL 12.4  :Ubun ...

  8. CentOS 7 安装 PostgreSQL 教程

    CentOS的源中自带有PostgreSQL,可以通过 yum list | grep postgresql 查看系统自带的版本,我这边看到的是9.2版本,个人还是比较建议安装更新的版本. 1.安装 ...

  9. PostgreSQL教程:PostgreSQL 10入门

    多年来,PostgreSQL一直是企业软件和开放源代码中保存最好的秘密之一,它是一个功能强大,健壮且经过专家维护的关系数据库. MySQL可能更广为人知,但PostgreSQL提供了MySQL刚开始提 ...

最新文章

  1. 隔空操作之隔空下象棋
  2. 页面导航的基础与深入
  3. ABAP-获取用户的组织结构权限
  4. calcite连接mysql_使用Calcite做Sql语法解析
  5. Varnish Glossary(varnish术语)
  6. 计算机系统应用技术课程,基于protégé的课程内容本体的构建-计算机系统应用.pdf...
  7. ECMAScript 6细说转码的常见的几种方案
  8. android权限名及其用途
  9. 我爱你 php代码怎么打,微信翻译代码我爱你怎么写?微信翻译表白代码介绍大全...
  10. WebSphere安装配置文档
  11. Android桥方法设置GPS信号,android-GPS更新间隔更快,信号良好?
  12. 逻辑回归——乳腺癌分类
  13. 苹果手机代数_讲知识:苹果手机已十年 命名规则多幻变
  14. 怎么用Python批量添加zabbix-host主机
  15. 【搜狐号购买】c#的问题
  16. java实现图片上插入文字并保存
  17. div+css实现水平/垂直/水平垂直居中超详解
  18. smurf分布式攻击(DDOS)
  19. linux+卸载node+和npm,ubuntu卸载node和npm
  20. [异常检测]EXPLAINABLE DEEP ONE-CLASS CLASSIFICATION

热门文章

  1. web课程设计——仿小米商城(10个页面)html css javascript web前端课程设计 web前端课程设计代码 web课程设计 HTML网页制作代码
  2. 科研学习过程中的收获
  3. URL原理、URL编码、URL特殊字符
  4. I服了U 报表软件等同于BI软件吗?
  5. 《Excel 职场手册:260招菜鸟变达人》一第 21 招 怎样在单元格中添加项目符号...
  6. 【PAT】1001. A+B Format
  7. Android蓝牙连接uuid,通过蓝牙UUID连接到android设备时遇到麻烦
  8. 比亚迪、理想冒头背后,混动完胜纯电动?
  9. 听课感悟——计算机网络
  10. 尚硅谷_HTML5 核心 实战 笔记