全部產品
Search
文件中心

PolarDB:.NET

更新時間:Sep 26, 2024

本文將介紹如何在C#應用中使用PolarDB .NET驅動串連PolarDB PostgreSQL版(相容Oracle)資料庫。

前提條件

  • 已經在PolarDB叢集建立使用者,如何建立使用者請參見建立資料庫帳號

  • 已經將需要訪問PolarDB叢集的主機IP地址添加到白名單,如何添加白名單請參見設定叢集白名單

背景資訊

.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

Mono.Security.dll

Npgsql.dll

.net3.5

Mono.Security.dll

Npgsql.dll

.net4.0

Mono.Security.dll

Npgsql.dll

.net5.0

Npgsql.dll

Npgsql.dll

.net6.0

Npgsql.dll

Npgsql.dll

.net7.0

Npgsql.dll

Npgsql.dll

.net8.0

Npgsql.dll

netcoreapp3.1

Npgsql.dll

Npgsql.dll

netstandard2.0

Npgsql.dll

Npgsql.dll

Npgsql.dll

netstandard2.1

Npgsql.dll

Npgsql.EntityFrameworkCore.PostgreSQL.dll

Npgsql.dll

Npgsql.dll

串連串參數

當您串連資料庫時,應用程式需要提供連接字串,字串包含主機、使用者名稱、密碼等參數。

連接字串的形式為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.0中64位日期格式的識別支援。