本文将介绍如何在C#应用中使用PolarDB .NET驱动连接PolarDB PostgreSQL版(兼容Oracle)数据库。
前提条件
背景信息
.NET(发音为"dot net")是一个由微软开发的软件框架,它提供了一种广泛的计算机编程环境。.NET框架的首个版本发布于2002年,旨在提供一套统一的编程模型,并支持多种编程语言,这样开发人员可以创建面向Windows平台的应用程序。随着时间的发展,.NET框架已经扩展到跨多种平台,包括Linux和macOS。
PolarDB提供了.net 2.0、.net 3.5、 .net 4.0、 .net 5.0、 .net 6.0、 .net 7.0、.net 8.0、netcoreapp3.1、netstandard2.0、netstandard2.1版本的.NET程序。
版本软件包
由于Npgsql与PolarDB存在着较复杂的对应关系,因此PolarDB目前支持以下版本的Npgsql,分别是v2.2.7、v5.0.10、v7.0.6.1和v8.0.4.1。同时,也维护了EntityFrameworkCore的一个版本,即v5.0.10,这提供了从.NET 2.0到7.0各个版本的平台支持。
程序名 | v2.2.7 | v.5.0.10 | v7.0.6.1 | v8.0.4.1 |
.net2.0 | ||||
.net3.5 | ||||
.net4.0 | ||||
.net5.0 | ||||
.net6.0 | ||||
.net7.0 | ||||
.net8.0 | ||||
netcoreapp3.1 | ||||
netstandard2.0 | ||||
netstandard2.1 |
连接串参数
当您连接数据库时,应用程序需要提供连接字符串,字符串包含主机、用户名、密码等参数。
连接字符串的形式为keyword1=value; keyword2=value;
,不区分大小写,包含特殊字符(例如分号)的值可以使用双引号("")。
以下是该驱动支持的连接字符串参数。
参数 | 示例 | 说明 |
Host |
| PolarDB集群的连接地址,如何查看连接地址请参见查看或申请连接地址。 |
Port |
| PolarDB集群的端口,默认为1521。 |
Database |
| 需要连接的数据库名称。 |
Username |
| PolarDB集群的用户名。 |
Password |
| PolarDB集群用户名对应的密码。 |
Pooling |
| 是否启用连接池。 |
Minimum Pool Size | 0 | 连接池的最小大小。 |
Maximum Pool Size | 100 | 连接池的最大大小。 |
Connection Idle Lifetime | 300 | 当连接数量超出Minimum Pool Size时,关闭多余闲置连接的超时时间(秒)。 |
Connection Pruning Interval | 10 | 清理闲置连接的间隔(秒)。 |
示例
示例如下所示:
using Npgsql;
var connString = "Host=xxxx;Port=xxxx;Username=xxx;Password=xxx;Database=xxxx";
await using var conn = new NpgsqlConnection(connString);
await conn.OpenAsync();
// Retrieve all rows
await using (var cmd = new NpgsqlCommand("SELECT sysdate FROM dual", conn))
await using (var reader = await cmd.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
Console.WriteLine(reader.GetDateTime(0));
}
结果如下所示:
常见问题
Q:在Oracle上的表名都是大写,切换到PolarDB后,配置的表名找不到了该怎么处理?
A:Nulget下载
EFCore.NamingConventions
,在项目配置连接串的位置添加UseSnakeCaseNamingConvention()
,可以解决所有非注解下,表名、列名自动的大小写问题。protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .UseNpgsql(...) .UseSnakeCaseNamingConvention();
Q:项目有一些自定义的类型转换使用了Date类型,使用PolarDB的包后出现报错。
A:如果在底层的类型使用过NpgsqlDbType.Date类型,可以替换成NpgsqlDbType.Sysdate。
例如:
case OracleDbType.Date: return NpgsqlDbType.Date;
可以替换为:
case OracleDbType.Date: return NpgsqlDbType.Sysdate;
版本更新日志
V8.0.4.1更新日志(2024-09-18)
新增功能:支持V8.0.4.1版本,兼容
.NET 6.0
,.NET 7.0
,.NET 8.0
版本。
V7.0.6.1更新日志(2024-08-23)
新增功能:支持不带
$$
符号执行PL/SQL存储过程。问题修复:
修复了元信息中关于DBMS内置对象识别的相关问题。
修正了因
ROWID
导致的类型读取错误。
V7.0.6更新日志(2024-06-19)
新增功能:新增对Oracle语法兼容 2.0中64位日期格式的识别支持。
专家面对面
关于.NET,如果您在使用过程中有任何问题,请进钉钉群咨询。
您可用钉钉扫描如下二维码,或搜索群号:78895009155