.NET

更新时间:2024-12-02 05:19:04

本文将介绍如何在C#应用中使用PolarDB .NET驱动连接PolarDB PostgreSQL版(兼容Oracle)数据库。

前提条件

  • 已经在PolarDB集群创建用户,如何创建用户请参见创建数据库账号

  • 已经将需要访问PolarDB集群的主机IP地址添加到白名单,如何添加白名单请参见设置集群白名单

背景信息

.NET(发音为"dot net")是一个由微软开发的软件框架,它提供了一种广泛的计算机编程环境。.NET框架的首个版本发布于2002年,旨在提供一套统一的编程模型,并支持多种编程语言,这样开发人员可以创建面向Windows平台的应用程序。随着时间的发展,.NET框架已经扩展到跨多种平台,包括LinuxmacOS。

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程序。

版本软件包

由于NpgsqlPolarDB存在着较复杂的对应关系,因此PolarDB目前支持以下版本的Npgsql,分别是v2.2.7、v5.0.10、v7.0.6.1v8.0.4.1。同时,也维护了EntityFrameworkCore的一个版本,即v5.0.10,这提供了从.NET 2.07.0各个版本的平台支持。

连接串参数

当您连接数据库时,应用程序需要提供连接字符串,字符串包含主机、用户名、密码等参数。

连接字符串的形式为keyword1=value; keyword2=value;,不区分大小写,包含特殊字符(例如分号)的值可以使用双引号("")。

以下是该驱动支持的连接字符串参数。

参数

示例

说明

参数

示例

说明

Host

localhost

PolarDB集群的连接地址,如何查看连接地址请参见查看或申请连接地址

Port

1521

PolarDB集群的端口,默认为1521。

Database

sampledb

需要连接的数据库名称。

Username

polaruser

PolarDB集群的用户名。

Password

password

PolarDB集群用户名对应的密码。

Pooling

true

是否启用连接池。

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));
}

结果如下所示:

image.png

常见问题

  • 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.064位日期格式的识别支持。

专家面对面

关于.NET,如果您在使用过程中有任何问题,请进钉钉群咨询。钉钉群号:78895009155。

  • 本页导读 (1)
  • 前提条件
  • 背景信息
  • 版本软件包
  • 连接串参数
  • 示例
  • 常见问题
  • 版本更新日志
  • 专家面对面
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等