Koneksi ke database PostgreSQL dengan C# di Linux Reza Pahlava
[email protected] :: 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. 1. Instalasi PostgreSQL
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
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
CREATE TABLE Pegawai
2
(
3
id INT NOT NULL,
4
nama VARCHAR(64) NOT NULL,
5
alamat VARCHAR(128) NOT NULL,
6
keterangan VARCHAR(255),
7
PRIMARY KEY(id)
8
);
2. Pembuatan aplikasi C#
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
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
using System;
2
using System.Data;
3
using Npgsql;
4 5
namespace Database
6
{
7
class Postgresql
8
{
9 10
///Objek koneksi IDbConnection _dbcon = null;
11 12 13 14
public static void Main(string [] args) {
15 16
}
17 18
///Buka Koneksi
19
public void Connect()
20
{
21 22
}
23 24
///Tutup Koneksi
25
public void Close()
26
{
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
27
}
28 29 30
///Tampilkan data pegawai
31
public void Select()
32
{
33 34
}
35 36
///Tambah data baru
37
public void Insert()
38
{
39 40
}
41 42
///Ubah data
43
public void Update()
44
{
45 46
}
47 48 49
///Hapus data
50
public void Delete()
51
{
52
}
53
} }
Selanjutnya mari kita isi satu persatu fungsi masing-masing.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
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
///Buka Koneksi
2
public void Connect()
3
{
4
string connectionString =
5
"Server=localhost;" +
6
"Database=test;" +
7
"User ID=ip;" +
8
"Password=admin;";
9 10
_dbcon = new NpgsqlConnection(connectionString);
11
_dbcon.Open();
12 13
}
14 15 16 17
///Tutup Koneksi public void Close() { if (_dbcon != null)
18
_dbcon.Close();
19
_dbcon = null;
20
}
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 Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Pegawai. Dari segi keamanan, kemudahan, penggunaan parameter lebih dianjurkan daripada menyambungkan nilai field pada SQL (dengan string +=). 1
///Tambah data baru
2
public void Insert()
3
{
4
using(IDbCommand cmd = _dbcon.CreateCommand())
5
{
6 7 8 9
string [] paramNames = {"@id", "@nama", "@alamat", "@keterangan"}; string [] paramDisplay = {"Id", "Nama", "Alamat", "Keterangan"}; DbType [] dbTypes = {DbType.Int32, DbType.String,
10
DbType.String, DbType.String};
11 12
cmd.CommandText =
13 14
"INSERT INTO Pegawai VALUES(@id, @nama, @alamat, @keterangan)";
15
for (int k = 0; k < paramDisplay.Length; k++)
16
{
17
Console.Write(paramDisplay[k] + "?");
18
string val = Console.ReadLine().Trim();
19 20 21
IDbDataParameter param = cmd.CreateParameter();
22
param.ParameterName = paramNames[k];
23
param.DbType = dbTypes[k];
24
param.Value = val;
25
cmd.Parameters.Add(param); }
26 27
cmd.ExecuteNonQuery(); }
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
2.c Mengubah data pegawai Kode berikut adalah kode untuk mengubah data yang sebelumnya sudah terdaftar di database. 1
///Ubah data
2
public void Update()
3
{
4
using(IDbCommand cmd = _dbcon.CreateCommand())
5
{
6 7 8 9
string [] paramNames = {"@id", "@nama", "@alamat", "@keterangan"}; string [] paramDisplay = {"Id", "Nama", "Alamat", "Keterangan"}; DbType [] dbTypes = {DbType.Int32, DbType.String,
10
DbType.String, DbType.String};
11 12 13 14
string sql = "UPDATE Pegawai SET nama=@nama, alamat=@alamat, "; sql += "keterangan=@keterangan WHERE id=@id";
15 16 17 18 19
cmd.CommandText = sql; for (int k = 0; k < paramDisplay.Length; k++) {
20
Console.Write(paramDisplay[k] + "?");
21
string val = Console.ReadLine().Trim();
22 23
IDbDataParameter param = cmd.CreateParameter();
24
param.ParameterName = paramNames[k];
25
param.DbType = dbTypes[k];
26
param.Value = val;
27
cmd.Parameters.Add(param);
28
}
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
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
///Menghapus data pegawai
2
public void Delete()
3
{
4
using(IDbCommand cmd = _dbcon.CreateCommand())
5
{
6
cmd.CommandText = "DELETE FROM Pegawai WHERE id=@id";;
7
Console.Write("ID Pegawai?");
8
string val = Console.ReadLine().Trim();
9 10
IDbDataParameter param = cmd.CreateParameter();
11
param.ParameterName = "@id";
12
param.DbType = DbType.Int32;
13
param.Value = val;
14
cmd.Parameters.Add(param);
15 16
cmd.ExecuteNonQuery();
17
}
18
}
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
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
///Menampilkan data pegawai
2
public void Select()
3
{
4
string id;
5
int nId;
6 7
Console.Write("Id Pegawai [semua]?");
8
id = Console.ReadLine().Trim();
9 10 11 12
using(IDbCommand cmd = _dbcon.CreateCommand()) { string sql = "SELECT id,nama,alamat,keterangan FROM Pegawai";
13
if (int.TryParse(id, out nId))
14
{
15
sql += " WHERE id=@id";
16
IDbDataParameter param = cmd.CreateParameter();
17
param.ParameterName = "@id";
18
param.DbType = DbType.Int32;
19
param.Value = nId;
20
cmd.Parameters.Add(param);
21 22
}
23 24
cmd.CommandText = sql;
25
using(IDataReader reader = cmd.ExecuteReader())
26
{
27
while (reader.Read())
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
{
28 29
Console.WriteLine();
30
Console.WriteLine("---");
31
Console.WriteLine("ID
: {0}", reader["id"]);
Console.WriteLine("Nama
: {0}",
32 33
reader["nama"]);
34
Console.WriteLine("Alamat reader["alamat"]);
35
: {0}",
36
Console.WriteLine("Keterangan: {0}", reader["keterangan"]);
37
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
public static void Main(string [] args)
2
{
3
string pilihan;
4
Postgresql db = new Postgresql();
5
db.Connect();
6 7
bool loop = true;
8
while(loop)
9
{
10
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
11
//Tampilkan menu
12
Console.WriteLine("================================");
13
Console.WriteLine("1. Input data baru");
14
Console.WriteLine("2. Ubah data pegawai");
15
Console.WriteLine("3. Hapus data pegawai");
16
Console.WriteLine("4. Tampilkan data pegawai");
17
Console.WriteLine("*. Selesai");
18
Console.Write("Pilihan[1-4]:");
19
pilihan = Console.ReadLine().Trim();
20
switch(pilihan)
21
{
22
case "1": db.Insert(); break;
23
case "2": db.Update(); break;
24
case "3": db.Delete(); break;
25 26
case "4": db.Select(); break;
27
default: loop = false; break; }
28
}
29 30
Console.WriteLine("Bye!");
31
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
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
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-dilinux/
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. Hobi membaca dan bercita-cita menjadi “ITPreneur” di usia muda.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org