Koneksi ke database PostgreSQL dengan C# di...
Transcript of Koneksi ke database PostgreSQL dengan C# di...
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
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
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)
);
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
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()
{
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
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()
{
}
}
}
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
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
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
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();
}
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
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 data
public 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);
}
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
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();
}
}
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
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())
{
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
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)
{
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
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
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-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.
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