Topik ini menjelaskan cara menggunakan driver PolarDB .NET untuk menghubungkan aplikasi C# Anda ke database PolarDB for PostgreSQL (Compatible with Oracle).
Prasyarat
-
Anda telah membuat akun database di kluster PolarDB. Untuk informasi selengkapnya, lihat Create a database account.
-
Alamat IP host yang perlu mengakses kluster PolarDB telah ditambahkan ke daftar putih. Untuk informasi selengkapnya, lihat Set a cluster whitelist.
Informasi latar belakang
PolarDB .NET, juga dikenal sebagai ADO.NET Data Provider for PolarDB, adalah driver yang memungkinkan aplikasi yang ditulis dalam C#, Visual Basic, atau F# untuk mengakses PolarDB. Driver ini kompatibel dengan Entity Framework Core dan Entity Framework 6.x, sehingga mendukung pengembangan aplikasi yang cepat menggunakan Entity Framework.
Driver ini menggunakan protokol PostgreSQL 3.0 dan kompatibel dengan .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, serta .NET Core 2.0.
Pada versi sebelumnya driver PolarDB .NET, banyak tipe dalam driver menggunakan awalan POLARDB. Kini, tipe-tipe tersebut telah diubah menjadi PolarDB. Untuk memperbarui kode Anda, cukup lakukan penggantian teks. Logika dasar driver tidak berubah, sehingga Anda dapat melakukan upgrade dengan percaya diri.
Entity Framework
Entity Framework adalah framework object-relational mapping (ORM) populer untuk platform .NET. Saat Anda mengembangkan aplikasi back-end dalam C#, Entity Framework dan Language-Integrated Query (LINQ) dapat mempercepat proses pengembangan secara signifikan.
Driver PolarDB .NET menyediakan file DLL yang mendukung Entity Framework 5 (EF5) dan Entity Framework 6 (EF6).
Untuk informasi selengkapnya tentang Entity Framework, kunjungi situs resmi Entity Framework.
Instal driver .NET
-
Unduh driver .NET.
-
Ekstrak paket driver .NET.
unzip polardb_oracle_.net.zip -
Impor driver ke proyek Visual Studio Anda.
-
Di antarmuka Visual Studio, klik kanan proyek Anda dan pilih Add Reference.
-
Di kotak dialog Reference Manager, klik Browse.
Gunakan tombol Browse... untuk memilih file yang akan direferensikan.
-
Di kotak dialog Select the files to reference, pilih versi driver yang sesuai dan klik Add.
Sebagai contoh, jika Anda menggunakan .NET Framework 4.5 (folder net45), Anda harus mereferensikan empat file DLL:
PolarDB.PolarDBClient.dll,System.Runtime.CompilerServices.Unsafe.dll,System.Threading.Tasks.Extensions.dll, danSystem.ValueTuple.dll. -
Klik OK.
-
Contoh
Ikuti langkah-langkah berikut untuk menjalankan proyek contoh.
-
Hubungkan ke kluster database. Untuk informasi selengkapnya, lihat Connect to a database cluster.
-
Jalankan perintah berikut untuk membuat database bernama
sampledb.CREATE DATABASE sampledb; -
Impor tabel, data, dan fungsi yang diperlukan untuk contoh ke dalam database
sampledb.\i ${your path}/PolarDBSample.sql -
Setelah data diimpor, Anda dapat mulai menulis kode C# Anda.
Berikut ini contoh cara melakukan kueri, pembaruan, dan pemanggilan prosedur tersimpan.
using System; using System.Data; using PolarDB.PolarDBClient; /* * Kelas ini menyediakan cara sederhana untuk melakukan operasi DML di PolarDB * * @revision 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("Emp No" + " " + SelectResult.GetInt32(0)); Console.WriteLine("Emp Name" + " " + SelectResult.GetString(1)); if (SelectResult.IsDBNull(2) == false) Console.WriteLine("Job" + " " + SelectResult.GetString(2)); else Console.WriteLine("Job" + " null "); if (SelectResult.IsDBNull(3) == false) Console.WriteLine("Mgr" + " " + SelectResult.GetInt32(3)); else Console.WriteLine("Mgr" + "null"); if (SelectResult.IsDBNull(4) == false) Console.WriteLine("Hire Date" + " " + SelectResult.GetDateTime(4)); else Console.WriteLine("Hire Date" + " 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("Record inserted"); //Update menggunakan objek PolarDBCommand PolarDBCommand PolarDBUpdateCommand = new PolarDBCommand("UPDATE EMP SET ENAME ='DOTNET' WHERE EMPNO < 100",conn); PolarDBUpdateCommand.ExecuteNonQuery(); Console.WriteLine("Record has been updated"); PolarDBCommand PolarDBDeletCommand = new PolarDBCommand("DELETE FROM EMP WHERE EMPNO < 100",conn); PolarDBDeletCommand.CommandType= CommandType.Text; PolarDBDeletCommand.ExecuteScalar(); Console.WriteLine("Record deleted"); //contoh pemanggilan 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("RESULT["+i+"]="+ Convert.ToString(callable_command.Parameters[i].Value)); result.Close(); } // Jika Anda menggunakan driver .NET 2.0, Anda mungkin perlu memodifikasi bagian ini. catch(PolarDBException exp) { if(exp.ErrorCode.Equals("01403")) Console.WriteLine("No data found"); else if(exp.ErrorCode.Equals("01422")) Console.WriteLine("More than one row was returned by the query"); else Console.WriteLine("There was an error calling the procedure. \nRoot Cause:\n"); Console.WriteLine(exp.Message.ToString()); } //Pernyataan prepared 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("Record Updated..."); } catch(PolarDBException exp) { Console.WriteLine(exp.ToString() ); } finally { conn.Close(); } } } }
Parameter string koneksi
Saat aplikasi Anda terhubung ke database, aplikasi tersebut harus menyediakan string koneksi yang berisi parameter seperti host, username, dan password.
Format string koneksi adalah keyword1=value; keyword2=value;. Kata kunci tidak peka huruf besar/kecil. Apit nilai yang mengandung karakter khusus, seperti titik koma, dengan tanda kutip ganda ("").
Driver ini mendukung parameter string koneksi berikut.
Tabel 1. Koneksi dasar
|
Parameter |
Contoh |
Deskripsi |
|
Host |
|
Titik akhir kluster PolarDB. Untuk informasi selengkapnya, lihat View or apply for an endpoint. |
|
Port |
|
Port default untuk kluster PolarDB adalah 1521. |
|
Database |
|
Nama database yang akan dihubungi. |
|
Username |
|
Username untuk kluster PolarDB. |
|
Password |
|
Password untuk username kluster PolarDB. |
Tabel 2. Kolam koneksi
|
Parameter |
Contoh |
Deskripsi |
|
Pooling |
|
Menentukan apakah kolam koneksi diaktifkan. |
|
Minimum Pool Size |
0 |
Jumlah minimum koneksi yang dipertahankan dalam kolam. |
|
Maximum Pool Size |
100 |
Jumlah maksimum koneksi yang diizinkan dalam kolam. |
|
Connection Idle Lifetime |
300 |
Timeout dalam detik. Setelah periode ini, koneksi idle akan ditutup jika ukuran kolam melebihi Minimum Pool Size. |
|
Connection Pruning Interval |
10 |
Interval dalam detik ketika koneksi idle dipangkas dari kolam. |
Tabel 3. Parameter lainnya
|
Parameter |
Deskripsi |
|
Application name |
Nama aplikasi. |
|
Search path |
Jalur pencarian skema. |
|
Client encoding |
Encoding klien. |
|
Time zone |
Zona waktu untuk sesi. |