All Products
Search
Document Center

PolarDB:.NET

Last Updated:Mar 29, 2026

ADO.NET Data Provider untuk PolarDB for PostgreSQL (Compatible with Oracle)—juga dikenal sebagai PolarDB .NET—memungkinkan Anda menghubungkan aplikasi C#, Visual Basic, dan F# ke database PolarDB for PostgreSQL (Compatible with Oracle). Driver ini mendukung Entity Framework Core dan Entity Framework 6.x, sehingga Anda dapat memanfaatkan object-relational mapping (ORM) bersama Language-Integrated Query (LINQ) untuk mempercepat pengembangan aplikasi backend.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Mulai cepat

Contoh berikut menunjukkan cara terhubung ke database PolarDB, menjalankan kueri SELECT, dan mencetak hasilnya.

using System;
using PolarDB.PolarDBClient;

namespace PolarDBClientTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // Ganti nilai-nilai berikut dengan titik akhir kluster, port, kredensial, dan nama database Anda
            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();
            }
        }
    }
}

Ganti placeholder berikut:

PlaceholderDeskripsiContoh
<your-endpoint>Titik akhir kluster. Lihat Lihat atau ajukan titik akhir.pc-xxx.polardb.rds.aliyuncs.com
<your-username>Username akun databasepolaruser
<your-password>Password untuk akun tersebut
<your-database>Nama database tujuansampledb

Kompatibilitas

PolarDB .NET menggunakan protokol PostgreSQL versi 3.0. Driver ini kompatibel dengan:

  • .NET Framework 2.0, 4.0, dan 4.5

  • .NET Core 2.0

Migrasi nama kelas: Pada versi driver sebelumnya, nama kelas diawali dengan POLARDB. Versi terbaru menggunakan PolarDB. Ganti semua kemunculan POLARDB dengan PolarDB di seluruh kode Anda. Logika driver tidak berubah, sehingga layanan tetap berjalan normal setelah upgrade.

Entity Framework

PolarDB .NET menyediakan file .dll untuk Entity Framework 5 (EF5) dan Entity Framework 6 (EF6), yang berlaku untuk PolarDB for PostgreSQL (Compatible with Oracle). Hal ini mempermudah integrasi Entity Framework ke dalam aplikasi PolarDB Anda.

Untuk informasi lebih lanjut tentang Entity Framework, lihat dokumentasi resmi Entity Framework.

Instal driver PolarDB .NET

  1. Unduh paket driver PolarDB .NET.

  2. Ekstrak paket tersebut.

    unzip polardb_oracle_.net.zip
  3. Impor driver ke dalam proyek Visual Studio Anda.

    1. Pada panel navigasi kiri, klik kanan Projects dan pilih Add Reference.

    2. Pada kotak dialog Reference Manager, klik Browse di panel kiri, lalu klik Browse....

    3. Pada kotak dialog Select the files to reference, pilih file driver dan klik Add.

    4. Klik OK.

    Visual Studio-1

    Visual Studio-2

Jalankan kode contoh

Paket driver mencakup direktori Samples yang berisi file PolarDBSample.sql dan beberapa file proyek contoh.

  1. Hubungkan ke kluster Anda.

  2. Buat database uji coba.

    CREATE DATABASE sampledb;
  3. Impor tabel contoh, data, dan fungsi ke dalam sampledb.

    \i ${your path}/PolarDBSample.sql
  4. Jalankan kode contoh C# yang ditampilkan pada bagian berikut.

Semua contoh menggunakan kelas dari namespace PolarDB.PolarDBClient dan objek koneksi conn.

Kueri data

Gunakan PolarDBCommand dan PolarDBDataReader untuk menjalankan pernyataan SELECT dan membaca setiap baris.

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

                // Kueri — baca catatan karyawan
                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();
            }
        }
    }
}

Memasukkan data

Gunakan ExecuteScalar() untuk menjalankan pernyataan INSERT.

// Insert — tambahkan baris karyawan baru
PolarDBCommand insertCmd = new PolarDBCommand(
    "INSERT INTO EMP(EMPNO,ENAME) VALUES((SELECT COUNT(EMPNO) FROM EMP),'JACKSON')", conn);
insertCmd.ExecuteScalar();
Console.WriteLine("Record inserted");

Memperbarui data

Gunakan ExecuteNonQuery() untuk menjalankan pernyataan UPDATE.

// Update — ganti nama karyawan dengan EMPNO < 100
PolarDBCommand updateCmd = new PolarDBCommand(
    "UPDATE EMP SET ENAME='DOTNET' WHERE EMPNO < 100", conn);
updateCmd.ExecuteNonQuery();
Console.WriteLine("Record has been updated");

Menghapus data

Gunakan ExecuteScalar() untuk menjalankan pernyataan DELETE.

// Delete — hapus karyawan dengan EMPNO < 100
PolarDBCommand deleteCmd = new PolarDBCommand(
    "DELETE FROM EMP WHERE EMPNO < 100", conn);
deleteCmd.CommandType = CommandType.Text;
deleteCmd.ExecuteScalar();
Console.WriteLine("Record deleted");

Panggil prosedur tersimpan

Atur CommandType ke StoredProcedure dan bind parameter dengan PolarDBParameter. Kode error 01403 (data tidak ditemukan) dan 01422 (beberapa baris dikembalikan) ditangani dalam blok catch.

// Panggilan prosedur tersimpan — kueri detail karyawan
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("No data found");
    else if (exp.ErrorCode.Equals("01422"))
        Console.WriteLine("More than one rows were returned by the query");
    else
    {
        Console.WriteLine("There was an error Calling the procedure. \nRoot Cause:\n");
        Console.WriteLine(exp.Message.ToString());
    }
}
Catatan: Jika Anda menggunakan driver .NET 2.0, sesuaikan blok catch sesuai kebutuhan.

Gunakan prepared statement

Kueri berparameter melindungi dari SQL injection dan meningkatkan performa melalui penggunaan ulang pernyataan. Gunakan parameter bernama (:Name, :ID) dengan PolarDBParameter.

// Prepared statement — perbarui nama karyawan berdasarkan 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("Record Updated...");

Parameter string koneksi

String koneksi mengikuti format keyword1=value; keyword2=value; dan tidak peka huruf besar/kecil. Bungkus nilai yang mengandung karakter khusus seperti titik koma (;) dengan tanda kutip ganda (").

Koneksi dasar

ParameterDeskripsiBawaan
HostTitik akhir kluster. Lihat Lihat atau ajukan titik akhir.Wajib
PortPort kluster.1521
DatabaseNama database yang akan dihubungi.Wajib
UsernameUsername akun.Wajib
PasswordPassword akun.Wajib

Kolam koneksi

ParameterDeskripsiBawaan
PoolingMengaktifkan atau menonaktifkan kolam koneksi.true
Minimum Pool SizeJumlah minimum koneksi dalam kolam.0
Maximum Pool SizeJumlah maksimum koneksi dalam kolam.100
Connection Idle LifetimeWaktu dalam detik sebelum koneksi idle ditutup ketika ukuran kolam melebihi Minimum Pool Size.300
Connection Pruning IntervalInterval dalam detik antara proses pembersihan koneksi idle.10

Pengaturan sesi dan aplikasi

ParameterDeskripsiBawaan
application_nameNama aplikasi.
search_pathPath pencarian untuk skema.
client_encodingPengkodean karakter klien.
timezoneZona waktu sesi.