Koneksi ke database PostgreSQL dengan C# di Linux
Reza Pahlava
reza.pahlava@raharja.info :: http://blog.rezapahlava.com
Abstrak
Untuk mempelajari C#, tentu diperlukan tool-tools seperti editor, compiler dan platform
.Net. Pada sistem operasi Windows, tools-tools tersebut dibundle dalam Microsoft
Visual Studio. Untuk platform Linux dibutuhkan compiler dan tools yang bernama
Mono Framework yang dikembangkan oleh Novell. Pada artikel kali ini akan dibahas
mengenai setup database PostgreSQL yang dilanjutkan dengan pembuatan program
sederhana untuk melakukan koneksi dan menampilkan data yang tersimpan di database
dengan C#.
Pendahuluan
Pada artikel kali ini akan dibahas mengenai setup database PostgreSQL yang
dilanjutkan dengan pembuatan program sederhana untuk melakukan koneksi dan
menampilkan data yang tersimpan di database dengan C#. Kenapa PostgreSQL, kok
bukan MySQL? Untuk tutorial ini alasannya sederhana, karena connector/provider
untuk koneksi ke PostgreSQL sudah tersedia dalam Mono Framework yaitu Npgsql,
sehingga untuk kali ini cukup menginstall Database Servernya saja.
Pembahasan
Ok, langsung saja ke pokok bahasan kita dan sama seperti sebelumnya, kali ini masih
menggunakan sistem operasi Ubuntu 11.10.
Untuk instalasi, cukup mudah. Berikut adalah langkah-langkah untuk instalasi, test
koneksi, membuat user dengan nama ip dan database dengan nama test (# adalah
komentar, tidak perlu diketik).
sudo apt-get install postgresql
sudo -u postgres createuser --superuser ip sudo -u postgres createdb test
sudo -u postgres psql
#berikut adalah perintah pada terminal postgres #ketik password baru yang akan diset (2x) \password ip
#keluar \q
#Koneksi lagi dengan user dan password yang baru psql -U ip -d test -W
Langkah selanjutnya adalah membuat tabel untuk keperluan tutorial ini. Masukkan
perintah SQL berikut pada terminal PostgreSQL tadi.
1 2 3 4 5 6 7 8
CREATE TABLE Pegawai (
id INT NOT NULL,
nama VARCHAR(64) NOT NULL, alamat VARCHAR(128) NOT NULL, keterangan VARCHAR(255), PRIMARY KEY(id)
);
Selanjutnya masuk ke koding C#. Kali ini akan dibuat aplikasi sederhana untuk
menambahkan, mengubah, menghapus dan menampilkan data pegawai. Buatlah file
dengan nama Postgresql.cs (pada terminal ketik: gedit Postgresql.cs &) kemudian isikan
kode berikut yang merupakan kerangka program secara keseluruhan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 using System; using System.Data; using Npgsql; namespace Database { class Postgresql { ///Objek koneksi
IDbConnection _dbcon = null;
public static void Main(string [] args) {
}
///Buka Koneksi public void Connect() {
}
///Tutup Koneksi public void Close() {
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 }
///Tampilkan data pegawai public void Select()
{ }
///Tambah data baru public void Insert() {
}
///Ubah data
public void Update() {
}
///Hapus data
public void Delete() {
} }
}
2.a Buka/tutup koneksi
Berikut adalah kode untuk membuat objek koneksi ke database dengan user: ip,
password: admin dan database: test. Sesuaikan parameter-parameter tersebut dengan
setingan database anda.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ///Buka Koneksi public void Connect() { string connectionString = "Server=localhost;" + "Database=test;" + "User ID=ip;" + "Password=admin;";
_dbcon = new NpgsqlConnection(connectionString); _dbcon.Open();
}
///Tutup Koneksi public void Close() {
if (_dbcon != null) _dbcon.Close(); _dbcon = null; }
2.b Menambahkan data baru
Berikut adalah kode untuk menambahkan data pegawai ke database. Data yang akan
ditambahkan perlu diinput oleh user. Disini kita menggunakan interface IDbCommand
mengeksekusi perintah SQL dan IDbDataParameter untuk mengisi field-field dari tabel
Pegawai. Dari segi keamanan, kemudahan, penggunaan parameter lebih dianjurkan
daripada menyambungkan nilai field pada SQL (dengan string +=).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
///Tambah data baru public void Insert() {
using(IDbCommand cmd = _dbcon.CreateCommand()) {
string [] paramNames = {"@id", "@nama", "@alamat", "@keterangan"};
string [] paramDisplay = {"Id", "Nama", "Alamat", "Keterangan"};
DbType [] dbTypes = {DbType.Int32, DbType.String, DbType.String, DbType.String};
cmd.CommandText =
"INSERT INTO Pegawai VALUES(@id, @nama, @alamat, @keterangan)";
for (int k = 0; k < paramDisplay.Length; k++) {
Console.Write(paramDisplay[k] + "?"); string val = Console.ReadLine().Trim();
IDbDataParameter param = cmd.CreateParameter(); param.ParameterName = paramNames[k]; param.DbType = dbTypes[k]; param.Value = val; cmd.Parameters.Add(param); } cmd.ExecuteNonQuery(); }
2.c Mengubah data pegawai
Kode berikut adalah kode untuk mengubah data yang sebelumnya sudah terdaftar di
database.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ///Ubah datapublic void Update() {
using(IDbCommand cmd = _dbcon.CreateCommand()) {
string [] paramNames = {"@id", "@nama", "@alamat", "@keterangan"};
string [] paramDisplay = {"Id", "Nama", "Alamat", "Keterangan"};
DbType [] dbTypes = {DbType.Int32, DbType.String, DbType.String, DbType.String};
string sql = "UPDATE Pegawai SET nama=@nama, alamat=@alamat, ";
sql += "keterangan=@keterangan WHERE id=@id";
cmd.CommandText = sql;
for (int k = 0; k < paramDisplay.Length; k++) {
Console.Write(paramDisplay[k] + "?"); string val = Console.ReadLine().Trim();
IDbDataParameter param = cmd.CreateParameter(); param.ParameterName = paramNames[k];
param.DbType = dbTypes[k]; param.Value = val;
cmd.Parameters.Add(param); }
29
cmd.ExecuteNonQuery(); }
}
2.d Hapus data pegawai
Untuk menghapus data pegawai, caranya dengan mengeksekusi perintah DELETE
terhadap data pegawai dengan ID tertentu. Berikut kode C#nya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
///Menghapus data pegawai public void Delete()
{
using(IDbCommand cmd = _dbcon.CreateCommand()) {
cmd.CommandText = "DELETE FROM Pegawai WHERE id=@id";; Console.Write("ID Pegawai?");
string val = Console.ReadLine().Trim();
IDbDataParameter param = cmd.CreateParameter(); param.ParameterName = "@id"; param.DbType = DbType.Int32; param.Value = val; cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); } }
2.e Menampilkan data pegawai
Berikut adalah bagian kode untuk menampilkan data pegawai. Untuk menampilkan data
seluruh pegawai user tinggal ketik ENTER, sedangkan untuk menampilkan data
pegawai tertentu, masukkan ID pegawai.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
///Menampilkan data pegawai public void Select()
{
string id; int nId;
Console.Write("Id Pegawai [semua]?"); id = Console.ReadLine().Trim();
using(IDbCommand cmd = _dbcon.CreateCommand()) {
string sql = "SELECT id,nama,alamat,keterangan FROM Pegawai";
if (int.TryParse(id, out nId)) {
sql += " WHERE id=@id";
IDbDataParameter param = cmd.CreateParameter(); param.ParameterName = "@id"; param.DbType = DbType.Int32; param.Value = nId; cmd.Parameters.Add(param); } cmd.CommandText = sql;
using(IDataReader reader = cmd.ExecuteReader()) {
28 29 30 31 32 33 34 35 36 37 { Console.WriteLine(); Console.WriteLine("---"); Console.WriteLine("ID : {0}", reader["id"]); Console.WriteLine("Nama : {0}", reader["nama"]); Console.WriteLine("Alamat : {0}", reader["alamat"]); Console.WriteLine("Keterangan: {0}", reader["keterangan"]); Console.WriteLine(); } } } }
2.f Method Main
Bagian terakhir adalah penggabungan dari fungsi-fungsi diatas atau bagian method
Main. Dalam method Main, akan ditampilkan beberapa menu, kemudian user
menginput kode menu, dan berdasarkan kode yang diinput, maka fungsi-fungsi dari 2.a
s/d 2.e akan dipanggil.
1 2 3 4 5 6 7 8 9 10
public static void Main(string [] args) {
string pilihan;
Postgresql db = new Postgresql(); db.Connect();
bool loop = true; while(loop) {
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 //Tampilkan menu Console.WriteLine("================================"); Console.WriteLine("1. Input data baru");
Console.WriteLine("2. Ubah data pegawai"); Console.WriteLine("3. Hapus data pegawai"); Console.WriteLine("4. Tampilkan data pegawai"); Console.WriteLine("*. Selesai");
Console.Write("Pilihan[1-4]:"); pilihan = Console.ReadLine().Trim(); switch(pilihan)
{
case "1": db.Insert(); break; case "2": db.Update(); break; case "3": db.Delete(); break; case "4": db.Select(); break; default: loop = false; break; } } Console.WriteLine("Bye!"); db.Close(); }
Setelah semua kode diatas sudah diinput, selanjutnya dikompile dan dijalankan dengan
perintah sebagai berikut:
gmcs Postgresql.cs -r:System.Data.dll -r:Npgsql.dll ./Postgresql.exe
Jika tidak ada error, maka akan didapatkan tampilan seperti dibawah ini. Pada contoh
kali ini, tidak disertakan kode C# untuk memvalidasi inputan dari user dan penanganan
error, misalnya jika data yang diinput memiliki ID yang sama, dan sebagainya. Bagian
ini sengaja saya sisakan untuk anda dan silahkan dikembangkan lebih lanjut.
Penutup
Seperti halnya koneksi C# ke server database pada umumnya, koneksi ke server
database PostgreSQL juga memerlukan sebuah konektor .net provider yang berguna
untuk membantu dalam menjembatani antara program C# yang akan kita buat dengan
server database.
Referensi
Putusgr, „
Koneksi ke database PostgreSQL dengan C# di Linux
‟,
http://ipsusila.wordpress.com/2012/03/16/koneksi-ke-database-postgresql-dengan-cs-di-linux/
Biografi
Reza Pahlava lahir pada tanggal 15 Juli 1990 di Tangerang, sedang melanjutkan kuliah di STMIK Raharja Tangerang pada jurusan Teknik Informatika konsentrasi Software Engineering. Saat ini bekerja sebagai IT Infrastructure di PT IMS Logistics.