本文將介紹如何在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位日期格式的識別支援。