C# PostgreSQL 教程
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 项目中。
、NpgsqlConnection
、NpgsqlCommand
、 NpgsqlDataReader
和是 .NET 数据提供者模型的核心元素DataSet
。 创建与特定数据源的连接NpgsqlDataProvider
。NpgsqlConnection
该NpgsqlCommand
对象针对数据源执行 SQL 语句。从NpgsqlDataReader
数据源读取数据流。
该DataSet
对象用于处理大量数据的离线工作。它是一种不连贯的数据表示,可以保存来自各种不同来源的数据。两者NpgsqlDataReader
都DataSet
用于处理数据;它们在不同的情况下使用。如果我们只需要读取查询的结果,那NpgsqlDataReader
是更好的选择。如果我们需要更广泛的数据处理,或者我们想要将 Winforms 控件绑定到数据库表,DataSet
则首选。
C# PostgreSQL 版本
如果下面的程序我们检查PostgreSQL服务器的版本。
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 创建表
在下面的示例中,我们创建一个数据库表并用数据填充它。
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 DROP
、INSERT
或DELETE
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 准备好的语句
准备好的语句提高了安全性和性能。当我们编写准备好的语句时,我们使用占位符而不是直接将值写入语句。
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 注入攻击。@name
and是占位符,@price
稍后会填充。
cmd.Parameters.AddWithValue("name", "BMW");
cmd.Parameters.AddWithValue("price", 36600);
cmd.Prepare();
使用该方法将值绑定到占位符AddWithValue
。
cmd.ExecuteNonQuery();
准备好的语句被执行。当我们不期望返回任何数据时, 我们使用对象的ExecuteNonQuery
方法。NpgsqlCommand
C# NpgsqlDataReader
NpgsqlDataReader
是用于从数据库中检索数据的对象 。它提供对查询结果的快速、只进、只读访问。这是从表中检索数据的最有效方式。
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 列标题
在以下示例中,我们使用数据库表中的数据打印列标题。
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}");
我们使用GetName
reader 的方法获取列的名称。
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 教程相关推荐
- PostgreSQL 教程
序言 整理下~整理下~PostgreSQL 心情不顺就学习,就整理文献cuiyaonan2000@163.com 整体看了下api总的来说就是多了一个schema,其它的差不了多少~~~ 参考资料: ...
- linux 安装postgresql教程
linux 安装postgresql教程 下载软件 pgsql官网地址:https://www.postgresql.org/,进入后点击download就来到下载页,这里点击Linux下面的Othe ...
- Windows 10 安装配置连接PostgreSQL教程
Windows 10 安装配置连接PostgreSQL教程 1.1 PostgreSQL 下载 1.2 配置环境变量 1.3 PostgreSQL 初始化 1.4 创建postgres用户 1.5 启 ...
- PostGreSQL教程_postgis教程
PostgreSQL IP地址访问配置 PostGIS常用函数介绍 PostgreSQL表间复制语句 postgis之Polygon/MultiPolygon in a single column:面 ...
- 阿里云 Centos7 安装PostgreSQL教程
阿里云 Centos7 安装PostgreSQL教程 1.选择版本 2. 选择平台 3. 选择架构 4. 安装repository RPM 5. 安装客户端包 6. 可选的服务端安装包 7. 可选的初 ...
- PostgreSQL教程(二):SQL语言
本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权. 2.1. 引言 本章提供一个如何使用SQL执行简单操作的概述.本教程的目的只是给你一个介绍,并非完整的SQL教程.有许多关 ...
- PostgreSQL教程--Ubuntu下PostgreSQL 安装教程
1.环境信息 [背景]项目中使用到PostgreSQL,所以在家安装PostgreSQL数据库进行学习. [环境]宿主机windows.虚拟机Ubuntu PostgreSQL 12.4 :Ubun ...
- CentOS 7 安装 PostgreSQL 教程
CentOS的源中自带有PostgreSQL,可以通过 yum list | grep postgresql 查看系统自带的版本,我这边看到的是9.2版本,个人还是比较建议安装更新的版本. 1.安装 ...
- PostgreSQL教程:PostgreSQL 10入门
多年来,PostgreSQL一直是企业软件和开放源代码中保存最好的秘密之一,它是一个功能强大,健壮且经过专家维护的关系数据库. MySQL可能更广为人知,但PostgreSQL提供了MySQL刚开始提 ...
最新文章
- 隔空操作之隔空下象棋
- 页面导航的基础与深入
- ABAP-获取用户的组织结构权限
- calcite连接mysql_使用Calcite做Sql语法解析
- Varnish Glossary(varnish术语)
- 计算机系统应用技术课程,基于protégé的课程内容本体的构建-计算机系统应用.pdf...
- ECMAScript 6细说转码的常见的几种方案
- android权限名及其用途
- 我爱你 php代码怎么打,微信翻译代码我爱你怎么写?微信翻译表白代码介绍大全...
- WebSphere安装配置文档
- Android桥方法设置GPS信号,android-GPS更新间隔更快,信号良好?
- 逻辑回归——乳腺癌分类
- 苹果手机代数_讲知识:苹果手机已十年 命名规则多幻变
- 怎么用Python批量添加zabbix-host主机
- 【搜狐号购买】c#的问题
- java实现图片上插入文字并保存
- div+css实现水平/垂直/水平垂直居中超详解
- smurf分布式攻击(DDOS)
- linux+卸载node+和npm,ubuntu卸载node和npm
- [异常检测]EXPLAINABLE DEEP ONE-CLASS CLASSIFICATION
热门文章
- web课程设计——仿小米商城(10个页面)html css javascript web前端课程设计 web前端课程设计代码 web课程设计 HTML网页制作代码
- 科研学习过程中的收获
- URL原理、URL编码、URL特殊字符
- I服了U 报表软件等同于BI软件吗?
- 《Excel 职场手册:260招菜鸟变达人》一第 21 招 怎样在单元格中添加项目符号...
- 【PAT】1001. A+B Format
- Android蓝牙连接uuid,通过蓝牙UUID连接到android设备时遇到麻烦
- 比亚迪、理想冒头背后,混动完胜纯电动?
- 听课感悟——计算机网络
- 尚硅谷_HTML5 核心 实战 笔记