すべてのプロダクト
Search
ドキュメントセンター

PolarDB:.NET

最終更新日:Mar 29, 2026

PolarDB for PostgreSQL (Compatible with Oracle) 向け ADO.NET データプロバイダー(別名 PolarDB .NET)を使用すると、C#、Visual Basic、および F# アプリケーションを PolarDB for PostgreSQL (Compatible with Oracle) データベースに接続できます。このドライバーは Entity Framework Core および Entity Framework 6.x をサポートしているため、オブジェクト関係マッピング(ORM)と言語統合クエリ(LINQ)を併用して、バックエンドアプリケーションの開発を迅速化できます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

クイックスタート

以下の例では、PolarDB データベースに接続し、SELECT クエリを実行して結果を出力します。

using System;
using PolarDB.PolarDBClient;

namespace PolarDBClientTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // クラスターエンドポイント、ポート、認証情報、およびデータベース名を実際の値に置き換えてください
            var conn = new PolarDBConnection(
                "Server=<your-endpoint>;Port=5432;User Id=<your-username>;Password=<your-password>;Database=<your-database>");
            try
            {
                conn.Open();

                var cmd = new PolarDBCommand("SELECT EMPNO, ENAME FROM EMP", conn);
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine($"EmpNo: {reader.GetInt32(0)}, Name: {reader.GetString(1)}");
                }
                reader.Close();
            }
            catch (PolarDBException ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                conn.Close();
            }
        }
    }
}

以下のプレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
<your-endpoint>クラスターエンドポイント。詳細については、「エンドポイントの表示または申請」をご参照ください。pc-xxx.polardb.rds.aliyuncs.com
<your-username>データベースアカウントのユーザー名polaruser
<your-password>アカウントのパスワード
<your-database>対象データベースの名前sampledb

互換性

PolarDB .NET は PostgreSQL プロトコルのバージョン 3.0 を使用します。以下の環境と互換があります。

  • .NET Framework 2.0、4.0、および 4.5

  • .NET Core 2.0

クラス名の移行: 以前のドライバーバージョンでは、クラス名の先頭が POLARDB で始まります。最新バージョンでは、クラス名の先頭が PolarDB で始まります。コード内のすべての POLARDBPolarDB に置き換えてください。ドライバーのロジックは変更されていないため、アップグレード後もサービスへの影響はありません。

Entity Framework

PolarDB .NET は、PolarDB for PostgreSQL (Compatible with Oracle) に対応した Entity Framework 5(EF5)および Entity Framework 6(EF6)向けの .dll ファイルを提供します。これにより、PolarDB アプリケーションで Entity Framework を簡単に利用できます。

Entity Framework について詳しくは、「公式 Entity Framework ドキュメント」をご参照ください。

PolarDB .NET ドライバーのインストール

  1. PolarDB .NET ドライバーパッケージをダウンロードします。

  2. パッケージを展開します。

    unzip polardb_oracle_.net.zip
  3. ドライバーを Visual Studio プロジェクトにインポートします。

    1. 左側のナビゲーションウィンドウで、プロジェクト を右クリックし、参照の追加 を選択します。

    2. 参照マネージャー ダイアログボックスで、左ペインの 参照 をクリックし、次に 参照... をクリックします。

    3. 参照するファイルの選択 ダイアログボックスで、ドライバーファイルを選択し、追加 をクリックします。

    4. OK をクリックします。

    Visual Studio-1

    Visual Studio-2

サンプルコードの実行

ドライバーパッケージには、Samples ディレクトリが含まれており、その中に PolarDBSample.sql ファイルおよびいくつかのサンプルプロジェクトファイルが格納されています。

  1. クラスターへの接続を行います。

  2. テスト用データベースを作成します。

    CREATE DATABASE sampledb;
  3. sampledb にサンプルテーブル、サンプルデータ、およびサンプル関数をインポートします。

    \i ${your path}/PolarDBSample.sql
  4. 以降のセクションで示す C# サンプルコードを実行します。

すべてのサンプルでは、PolarDB.PolarDBClient 名前空間のクラスと共有接続 conn を使用します。

データのクエリ

PolarDBCommand および PolarDBDataReader を使用して SELECT 文を実行し、各行を読み取ります。

using System;
using System.Data;
using PolarDB.PolarDBClient;

namespace PolarDBClientTest
{
    class SAMPLE_TEST
    {
        static void Main(string[] args)
        {
            PolarDBConnection conn = new PolarDBConnection(
                "Server=localhost;Port=5432;User Id=polaruser;Password=password;Database=sampledb");
            try
            {
                conn.Open();

                // クエリ — 従業員レコードの読み取り
                PolarDBCommand selectCmd = new PolarDBCommand(
                    "SELECT EMPNO,ENAME,JOB,MGR,HIREDATE FROM EMP", conn);
                PolarDBDataReader reader = selectCmd.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine("Emp No" + " " + reader.GetInt32(0));
                    Console.WriteLine("Emp Name" + " " + reader.GetString(1));
                    if (reader.IsDBNull(2) == false)
                        Console.WriteLine("Job" + " " + reader.GetString(2));
                    else
                        Console.WriteLine("Job" + " null ");
                    if (reader.IsDBNull(3) == false)
                        Console.WriteLine("Mgr" + " " + reader.GetInt32(3));
                    else
                        Console.WriteLine("Mgr" + "null");
                    if (reader.IsDBNull(4) == false)
                        Console.WriteLine("Hire Date" + " " + reader.GetDateTime(4));
                    else
                        Console.WriteLine("Hire Date" + " null");
                    Console.WriteLine("---------------------------------");
                }
                reader.Close();
            }
            catch (PolarDBException exp)
            {
                Console.WriteLine(exp.ToString());
            }
            finally
            {
                conn.Close();
            }
        }
    }
}

データの挿入

ExecuteScalar() を使用して INSERT 文を実行します。

// 挿入 — 新しい従業員レコードの追加
PolarDBCommand insertCmd = new PolarDBCommand(
    "INSERT INTO EMP(EMPNO,ENAME) VALUES((SELECT COUNT(EMPNO) FROM EMP),'JACKSON')", conn);
insertCmd.ExecuteScalar();
Console.WriteLine("レコードが挿入されました");

データの更新

ExecuteNonQuery() を使用して UPDATE 文を実行します。

// 更新 — EMPNO < 100 の従業員の名前の変更
PolarDBCommand updateCmd = new PolarDBCommand(
    "UPDATE EMP SET ENAME='DOTNET' WHERE EMPNO < 100", conn);
updateCmd.ExecuteNonQuery();
Console.WriteLine("レコードが更新されました");

データの削除

ExecuteScalar() を使用して DELETE 文を実行します。

// 削除 — EMPNO < 100 の従業員レコードの削除
PolarDBCommand deleteCmd = new PolarDBCommand(
    "DELETE FROM EMP WHERE EMPNO < 100", conn);
deleteCmd.CommandType = CommandType.Text;
deleteCmd.ExecuteScalar();
Console.WriteLine("レコードが削除されました");

ストアドプロシージャの呼び出し

CommandTypeStoredProcedure に設定し、PolarDBParameter を使用してパラメーターをバインドします。エラーコード 01403(データなし)および 01422(複数行返却)は、catch ブロック内で処理されます。

// ストアドプロシージャの呼び出し — 従業員詳細のクエリ
try
{
    PolarDBCommand callCmd = new PolarDBCommand(
        "emp_query(:p_deptno,:p_empno,:p_ename,:p_job,:p_hiredate,:p_sal)", conn);
    callCmd.CommandType = CommandType.StoredProcedure;

    callCmd.Parameters.Add(new PolarDBParameter("p_deptno",  PolarDBTypes.PolarDBDbType.Numeric, 10, "p_deptno",  ParameterDirection.Input,       false, 2, 2, System.Data.DataRowVersion.Current, 20));
    callCmd.Parameters.Add(new PolarDBParameter("p_empno",   PolarDBTypes.PolarDBDbType.Numeric, 10, "p_empno",   ParameterDirection.InputOutput,  false, 2, 2, System.Data.DataRowVersion.Current, 7369));
    callCmd.Parameters.Add(new PolarDBParameter("p_ename",   PolarDBTypes.PolarDBDbType.Varchar, 10, "p_ename",   ParameterDirection.InputOutput,  false, 2, 2, System.Data.DataRowVersion.Current, "SMITH"));
    callCmd.Parameters.Add(new PolarDBParameter("p_job",     PolarDBTypes.PolarDBDbType.Varchar, 10, "p_job",     ParameterDirection.Output,       false, 2, 2, System.Data.DataRowVersion.Current, null));
    callCmd.Parameters.Add(new PolarDBParameter("p_hiredate",PolarDBTypes.PolarDBDbType.Date,   200, "p_hiredate",ParameterDirection.Output,       false, 2, 2, System.Data.DataRowVersion.Current, null));
    callCmd.Parameters.Add(new PolarDBParameter("p_sal",     PolarDBTypes.PolarDBDbType.Numeric,200, "p_sal",     ParameterDirection.Output,       false, 2, 2, System.Data.DataRowVersion.Current, null));

    callCmd.Prepare();
    callCmd.Parameters[0].Value = 20;
    callCmd.Parameters[1].Value = 7369;

    PolarDBDataReader result = callCmd.ExecuteReader();
    int fc = result.FieldCount;
    for (int i = 0; i < fc; i++)
        Console.WriteLine("RESULT[" + i + "]=" + Convert.ToString(callCmd.Parameters[i].Value));
    result.Close();
}
catch (PolarDBException exp)
{
    if (exp.ErrorCode.Equals("01403"))
        Console.WriteLine("データが見つかりません");
    else if (exp.ErrorCode.Equals("01422"))
        Console.WriteLine("クエリによって複数の行が返されました");
    else
    {
        Console.WriteLine("プロシージャの呼び出し中にエラーが発生しました。\n根本原因:\n");
        Console.WriteLine(exp.Message.ToString());
    }
}
注: .NET 2.0 ドライバーを使用している場合は、必要に応じて catch ブロックを修正してください。

プリペアドステートメントの使用

パラメーター化されたクエリは、SQL インジェクション攻撃から保護し、ステートメントの再利用によるパフォーマンス向上を実現します。:Name:ID のような名前付きパラメーターと PolarDBParameter を使用します。

// プリペアドステートメント — ID による従業員名の更新
string updateQuery = "update emp set ename = :Name where empno = :ID";
PolarDBCommand preparedCmd = new PolarDBCommand(updateQuery, conn);
preparedCmd.CommandType = CommandType.Text;

preparedCmd.Parameters.Add(new PolarDBParameter("ID",   PolarDBTypes.PolarDBDbType.Integer));
preparedCmd.Parameters.Add(new PolarDBParameter("Name", PolarDBTypes.PolarDBDbType.Text));
preparedCmd.Prepare();

preparedCmd.Parameters[0].Value = 7369;
preparedCmd.Parameters[1].Value = "Mark";
preparedCmd.ExecuteNonQuery();
Console.WriteLine("レコードが更新されました...");

接続文字列のパラメーター

接続文字列は キーワード1=値; キーワード2=値; の形式に従い、大文字小文字を区別しません。セミコロン(;)などの特殊文字を含む値は、二重引用符(")で囲んでください。

基本接続

パラメーター説明デフォルト値
Hostクラスターエンドポイント。詳細については、「エンドポイントの表示または申請」をご参照ください。必須
Portクラスターポート。1521
Database接続先データベースの名前。必須
Usernameアカウントのユーザー名。必須
Passwordアカウントのパスワード。必須

接続プール

パラメーター説明デフォルト値
Pooling接続プールの有効/無効を設定します。true
Minimum Pool Size接続プール内の最小接続数。0
Maximum Pool Size接続プール内の最大接続数。100
Connection Idle LifetimeMinimum Pool Size を超える場合に、アイドル状態の接続を閉じるまでの秒数。300
Connection Pruning Intervalアイドル接続のクリーンアップ処理を実行する間隔(秒単位)。10

セッションおよびアプリケーション設定

パラメーター説明デフォルト値
application_nameアプリケーションの名前。
search_pathスキーマ検索パス。
client_encodingクライアントの文字コード。
timezoneセッションのタイムゾーン。