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:
Akun database untuk kluster PolarDB Anda. Lihat Buat akun database.
Alamat IP host aplikasi Anda telah ditambahkan ke daftar putih kluster. Lihat Konfigurasikan daftar putih untuk kluster.
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:
| Placeholder | Deskripsi | Contoh |
|---|---|---|
<your-endpoint> | Titik akhir kluster. Lihat Lihat atau ajukan titik akhir. | pc-xxx.polardb.rds.aliyuncs.com |
<your-username> | Username akun database | polaruser |
<your-password> | Password untuk akun tersebut | — |
<your-database> | Nama database tujuan | sampledb |
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
Unduh paket driver PolarDB .NET.
Ekstrak paket tersebut.
unzip polardb_oracle_.net.zipImpor driver ke dalam proyek Visual Studio Anda.
Pada panel navigasi kiri, klik kanan Projects dan pilih Add Reference.
Pada kotak dialog Reference Manager, klik Browse di panel kiri, lalu klik Browse....
Pada kotak dialog Select the files to reference, pilih file driver dan klik Add.
Klik OK.


Jalankan kode contoh
Paket driver mencakup direktori Samples yang berisi file PolarDBSample.sql dan beberapa file proyek contoh.
Buat database uji coba.
CREATE DATABASE sampledb;Impor tabel contoh, data, dan fungsi ke dalam
sampledb.\i ${your path}/PolarDBSample.sqlJalankan 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
| Parameter | Deskripsi | Bawaan |
|---|---|---|
Host | Titik akhir kluster. Lihat Lihat atau ajukan titik akhir. | Wajib |
Port | Port kluster. | 1521 |
Database | Nama database yang akan dihubungi. | Wajib |
Username | Username akun. | Wajib |
Password | Password akun. | Wajib |
Kolam koneksi
| Parameter | Deskripsi | Bawaan |
|---|---|---|
Pooling | Mengaktifkan atau menonaktifkan kolam koneksi. | true |
Minimum Pool Size | Jumlah minimum koneksi dalam kolam. | 0 |
Maximum Pool Size | Jumlah maksimum koneksi dalam kolam. | 100 |
Connection Idle Lifetime | Waktu dalam detik sebelum koneksi idle ditutup ketika ukuran kolam melebihi Minimum Pool Size. | 300 |
Connection Pruning Interval | Interval dalam detik antara proses pembersihan koneksi idle. | 10 |
Pengaturan sesi dan aplikasi
| Parameter | Deskripsi | Bawaan |
|---|---|---|
application_name | Nama aplikasi. | — |
search_path | Path pencarian untuk skema. | — |
client_encoding | Pengkodean karakter klien. | — |
timezone | Zona waktu sesi. | — |