Topik ini menjelaskan cara menggunakan Penyedia Data ADO.NET untuk PolarDB for PostgreSQL (Kompatibel dengan Oracle) (PolarDB .NET) driver untuk menghubungkan aplikasi C# ke database PolarDB for PostgreSQL (Kompatibel dengan Oracle).
Prasyarat
Seorang pengguna telah dibuat di kluster PolarDB. Untuk informasi tentang cara membuat pengguna, lihat Buat akun database.
Alamat IP dari host yang digunakan untuk mengakses kluster PolarDB telah ditambahkan ke daftar putih kluster. Untuk informasi tentang cara menambahkan alamat IP ke daftar putih kluster, lihat Konfigurasikan daftar putih untuk kluster.
Informasi latar belakang
PolarDB .NET adalah driver yang memungkinkan Anda menggunakan bahasa pemrograman seperti C#, Visual Basic, dan F# untuk terhubung ke database PolarDB for PostgreSQL (Kompatibel dengan Oracle). Driver PolarDB .NET kompatibel dengan Entity Framework Core dan Entity Framework 6.x. Anda dapat menggunakan PolarDB .NET bersama dengan Entity Framework untuk mengembangkan aplikasi dengan cepat.
Driver PolarDB .NET menggunakan versi 3.0 protokol PostgreSQL. Driver ini kompatibel dengan .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, dan .NET Core 2.0.
Pada versi sebelumnya dari driver PolarDB .NET, sebagian besar nama kelas dimulai dengan POLARDB. Pada versi terbaru, nama kelas dimulai dengan PolarDB. Oleh karena itu, Anda harus mengganti POLARDB dengan PolarDB dalam kode Anda. Logika dalam driver tidak dimodifikasi, sehingga layanan tidak terpengaruh setelah Anda memperbarui driver dan mengubah kode Anda.
Ikhtisar Entity Framework
Entity Framework adalah kerangka kerja pemetaan objek-relasional (ORM) yang banyak digunakan di platform .NET. Entity Framework dan teknologi Language-Integrated Query (LINQ) menyediakan metode cepat bagi Anda untuk mengembangkan aplikasi backend C#.
Driver PolarDB .NET menyediakan file .dll dari Entity Framework 5 (EF5) dan Entity Framework 6 (EF6), yang berlaku untuk PolarDB for PostgreSQL (Kompatibel dengan Oracle). Ini membantu Anda menggunakan Entity Framework.
Untuk informasi lebih lanjut tentang Entity Framework, kunjungi situs resmi Entity Framework.
Instal driver PolarDB .NET
- Unduh paket PolarDB .NET driver.
- Ekstrak paket driver PolarDB .NET.
unzip polardb_oracle_.net.zip - Impor driver ke proyek Visual Studio.
- Di panel navigasi sisi kiri pada antarmuka pengguna grafis (GUI) Visual Studio, klik kanan Proyek dan pilih Add Reference.
- Dalam kotak dialog Reference Manager, klik Browse di panel navigasi sisi kiri, lalu klik tombol Browse....

- Dalam kotak dialog Select the files to reference, pilih driver dan klik Add.

- Klik OK.
Contoh
Direktori Samples mencakup file PolarDBSample.sql dan beberapa file proyek contoh. Prosedur berikut menunjukkan cara menjalankan proyek contoh.
- Hubungkan ke database. Untuk informasi lebih lanjut, lihat Hubungkan ke kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle).
- Jalankan pernyataan berikut untuk membuat database bernama
sampledb.CREATE DATABASE sampledb; - Impor tabel, data, dan fungsi yang diperlukan untuk pengujian ke database
sampledb.\i ${your path}/PolarDBSample.sql - Setelah data diimpor, tulis kode C#.
Kode contoh berikut menunjukkan cara menanyakan, memperbarui, dan memanggil prosedur tersimpan dari proyek contoh.
using System; using System.Data; using PolarDB.PolarDBClient; /* * Kelas ini memberikan cara sederhana untuk melakukan operasi DML di PolarDB * * @revisi 1.0 */ 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(); //Pernyataan select sederhana menggunakan objek PolarDBCommand PolarDBCommand PolarDBSeletCommand = new PolarDBCommand("SELECT EMPNO,ENAME,JOB,MGR,HIREDATE FROM EMP",conn); PolarDBDataReader SelectResult = PolarDBSeletCommand.ExecuteReader(); while (SelectResult.Read()) { Console.WriteLine("Nomor Pegawai" + " " + SelectResult.GetInt32(0)); Console.WriteLine("Nama Pegawai" + " " + SelectResult.GetString(1)); if (SelectResult.IsDBNull(2) == false) Console.WriteLine("Pekerjaan" + " " + SelectResult.GetString(2)); else Console.WriteLine("Pekerjaan" + " null "); if (SelectResult.IsDBNull(3) == false) Console.WriteLine("Mgr" + " " + SelectResult.GetInt32(3)); else Console.WriteLine("Mgr" + "null"); if (SelectResult.IsDBNull(4) == false) Console.WriteLine("Tanggal Masuk" + " " + SelectResult.GetDateTime(4)); else Console.WriteLine("Tanggal Masuk" + " null"); Console.WriteLine("---------------------------------"); } //Pernyataan insert menggunakan objek PolarDBCommand SelectResult.Close(); PolarDBCommand PolarDBInsertCommand = new PolarDBCommand("INSERT INTO EMP(EMPNO,ENAME) VALUES((SELECT COUNT(EMPNO) FROM EMP),'JACKSON')",conn); PolarDBInsertCommand.ExecuteScalar(); Console.WriteLine("Catatan dimasukkan"); //Update menggunakan objek PolarDBCommand PolarDBCommand PolarDBUpdateCommand = new PolarDBCommand("UPDATE EMP SET ENAME ='DOTNET' WHERE EMPNO < 100",conn); PolarDBUpdateCommand.ExecuteNonQuery(); Console.WriteLine("Catatan telah diperbarui"); PolarDBCommand PolarDBDeletCommand = new PolarDBCommand("DELETE FROM EMP WHERE EMPNO < 100",conn); PolarDBDeletCommand.CommandType= CommandType.Text; PolarDBDeletCommand.ExecuteScalar(); Console.WriteLine("Catatan dihapus"); //contoh panggilan prosedur try { PolarDBCommand callable_command = new PolarDBCommand("emp_query(:p_deptno,:p_empno,:p_ename,:p_job,:p_hiredate,:p_sal)", conn); callable_command.CommandType = CommandType.StoredProcedure; callable_command.Parameters.Add(new PolarDBParameter("p_deptno",PolarDBTypes.PolarDBDbType.Numeric,10,"p_deptno",ParameterDirection.Input,false ,2,2,System.Data.DataRowVersion.Current,20)); callable_command.Parameters.Add(new PolarDBParameter("p_empno", PolarDBTypes.PolarDBDbType.Numeric,10,"p_empno",ParameterDirection.InputOutput,false ,2,2,System.Data.DataRowVersion.Current,7369)); callable_command.Parameters.Add(new PolarDBParameter("p_ename", PolarDBTypes.PolarDBDbType.Varchar,10,"p_ename",ParameterDirection.InputOutput,false ,2,2,System.Data.DataRowVersion.Current,"SMITH")); callable_command.Parameters.Add(new PolarDBParameter("p_job", PolarDBTypes.PolarDBDbType.Varchar,10,"p_job",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null)); callable_command.Parameters.Add(new PolarDBParameter("p_hiredate", PolarDBTypes.PolarDBDbType.Date,200,"p_hiredate",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null)); callable_command.Parameters.Add(new PolarDBParameter("p_sal", PolarDBTypes.PolarDBDbType.Numeric,200,"p_sal",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null)); callable_command.Prepare(); callable_command.Parameters[0].Value = 20; callable_command.Parameters[1].Value = 7369; PolarDBDataReader result = callable_command.ExecuteReader(); int fc = result.FieldCount; for(int i=0;i<fc;i++) Console.WriteLine("HASIL["+i+"]="+ Convert.ToString(callable_command.Parameters[i].Value)); result.Close(); } // Jika versi driver adalah .NET 2.0, Anda harus memodifikasi pernyataan berikut: catch(PolarDBException exp) { if(exp.ErrorCode.Equals("01403")) Console.WriteLine("Tidak ada data yang ditemukan"); else if(exp.ErrorCode.Equals("01422")) Console.WriteLine("Lebih dari satu baris dikembalikan oleh query"); else Console.WriteLine("Ada kesalahan saat memanggil prosedur. \nPenyebab Utama:\n"); Console.WriteLine(exp.Message.ToString()); } //Pernyataan siap string updateQuery = "update emp set ename = :Name where empno = :ID"; PolarDBCommand Prepared_command = new PolarDBCommand(updateQuery, conn); Prepared_command.CommandType = CommandType.Text; Prepared_command.Parameters.Add(new PolarDBParameter("ID", PolarDBTypes.PolarDBDbType.Integer)); Prepared_command.Parameters.Add(new PolarDBParameter("Name", PolarDBTypes.PolarDBDbType.Text)); Prepared_command.Prepare(); Prepared_command.Parameters[0].Value = 7369; Prepared_command.Parameters[1].Value = "Mark"; Prepared_command.ExecuteNonQuery(); Console.WriteLine("Catatan Diperbarui..."); } catch(PolarDBException exp) { Console.WriteLine(exp.ToString() ); } finally { conn.Close(); } } } }
Parameter string koneksi
Aplikasi harus menyediakan string koneksi untuk terhubung ke database. String koneksi mencakup parameter host, nama pengguna, dan kata sandi.
String koneksi berada dalam format kata kunci1=nilai; kata kunci2=nilai;, dan tidak peka huruf besar-kecil. Anda dapat menggunakan tanda kutip ganda (") untuk mengapit nilai yang mengandung karakter khusus, seperti titik koma (;).
Driver saat ini mendukung parameter string koneksi berikut.
Tabel 1. Parameter Terkait Koneksi Dasar
| Parameter | Contoh | Deskripsi |
| Host | localhost | Titik akhir dari kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle). Untuk informasi lebih lanjut tentang cara melihat titik akhir, lihat Lihat atau ajukan permohonan untuk titik akhir. |
| Port | 1521 | Port dari kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle). Nilai default: 1521. |
| Database | sampledb | Nama database yang akan dihubungkan. |
| Username | polaruser | Nama pengguna yang digunakan untuk menghubungkan ke kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle). |
| Password | password | Kata sandi untuk nama pengguna dari kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle). |
Tabel 2. Parameter Terkait Kolam Koneksi
| Parameter | Contoh | Deskripsi |
| Pooling | true | Menentukan apakah akan mengaktifkan kolam koneksi. |
| Minimum Pool Size | 0 | Ukuran minimum dari kolam koneksi. |
| Maximum Pool Size | 100 | Ukuran maksimum dari kolam koneksi. |
| Connection Idle Lifetime | 300 | Periode waktu habis. Setelah periode waktu habis berakhir, koneksi idle ditutup di kolam jika jumlah semua koneksi melebihi nilai parameter Minimum Pool Size. Unit: detik. |
| Connection Pruning Interval | 10 | Interval untuk menghapus koneksi idle. Unit: detik. |
Tabel 3. Parameter Lainnya
| Parameter | Deskripsi |
| application_name | Nama aplikasi. |
| search_path | Path pencarian skema. |
| client_encoding | Pengkodean klien. |
| timezone | Zona waktu sesi. |