Coding4ever’s Blog

Just coding… coding… and coding… because coding should be fun :)

Mengakses Multi Database Dengan Satu Namespace

| Comments

Bagi Anda yang suka gonta ganti pasangan database mungkin bisa mencoba namespace yang satu ini.

System.Data.Common yuph itulah nama namespacenya, namespace super yang di dalamnya terdapat class-class generic untuk mengakses database.

Dengan memanfaatkan class-class generic tersebut jika terjadi perubahan database kita cukup merubah beberapa baris kode.

Sebelumnya kita lihat dulu bagaimana cara mengakses database tanpa menggunakan namespace ini.

1. Mengakses database Ms Access

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
29
30
31
32
33
34
35
36
using System.Data.OleDb;

namespace MultiDatabase
{
    public partial class FrmSiswa : Form
    {
        private OleDbConnection conn = null;

        // constructor
        public FrmSiswa()
        {
            InitializeComponent();

            string appPath = System.Windows.Forms.Application.StartupPath;
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + appPath + "\sampleDb.mdb";

            conn = new OleDbConnection(strConn);
            conn.Open();
        }

        private void btnLoadData_Click(object sender, EventArgs e)
        {
            string strSql = "SELECT * FROM siswa";

            OleDbCommand cmd = new OleDbCommand(strSql, conn);
            OleDbDataReader dtr = cmd.ExecuteReader();
            while (dtr.Read())
            {
                listBox1.Items.Add(dtr["nama"]);
            }
            dtr.Close();
            conn.Close();
        }

    }
}

  1. Mengakses database Firebird

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
29
30
31
32
33
34
35
36
37
using FirebirdSql.Data.FirebirdClient;

namespace MultiDatabase
{
    public partial class FrmSiswa : Form
    {
        private FbConnection conn = null;

        // constructor
        public FrmSiswa()
        {
            InitializeComponent();

            string appPath = System.Windows.Forms.Application.StartupPath;

            string strConn = "data source=127.0.0.1;initial catalog=" + appPath + "\sampleDb.FDB;user id=SYSDBA;password=masterkey;dialect=3";

            conn = new FbConnection(strConn);
            conn.Open();
        }

        private void btnLoadData_Click(object sender, EventArgs e)
        {
            string strSql = "SELECT * FROM siswa";

            FbCommand cmd = new FbCommand(strSql, conn);
            FbDataReader dtr = cmd.ExecuteReader();
            while (dtr.Read())
            {
                listBox1.Items.Add(dtr["nama"]);
            }
            dtr.Close();
            conn.Close();
        }

    }
}

Nah dari dua sample diatas untuk mengakses database Ms Access kita membutuhkan namespace System.Data.OleDb dengan class akses databasenya seperti OleDbConnection, OleDbCommand,  OleDbDataReader sedangkan untuk mengakses database Firebird kita membutuhkan namespace FirebirdSql.Data.FirebirdClient dengan class akses databasenya FbConnection, FbCommand dan FbDataReader.

Tentu ini akan sangat merepotkan jika kita akan melakukan migrasi database dan harus mengganti satu persatu namespace dan classnya secara manual :cry:

Sekarang kita coba jika menggunakan namespace System.Data.Common

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System.Data.Common;

namespace MultiDatabase
{
    public partial class FrmSiswa : Form
    {
        private DbConnection conn = null;

        // constructor
        public FrmSiswa()
        {
            InitializeComponent();

            string appPath = System.Windows.Forms.Application.StartupPath;

            string providerName = "System.Data.OleDb";
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + appPath + "\sampleDb.mdb";

            DbProviderFactory provider = DbProviderFactories.GetFactory(providerName);
            conn = provider.CreateConnection();
            conn.ConnectionString = strConn;
            conn.Open();

        }

        private void btnLoadData_Click(object sender, EventArgs e)
        {
            string strSql = "SELECT * FROM siswa";

            DbCommand cmd = conn.CreateCommand();
            cmd.CommandText = strSql;
            cmd.CommandType = CommandType.Text;

            DbDataReader dtr = cmd.ExecuteReader();
            while (dtr.Read())
            {
                listBox1.Items.Add(dtr["nama"]);
            }
            dtr.Close();
            conn.Close();
        }

    }
}

Jika terjadi migrasi database dari Ms Access ke Firebird kita cukup mengganti baris 16 dan 17

1
2
string providerName = "FirebirdSql.Data.FirebirdClient";
string strConn = "data source=127.0.0.1;initial catalog=" + appPath + "\sampleDb.FDB;user id=SYSDBA;password=masterkey;dialect=3";

Dan tentunya juga perlu melakukan penyesuai query-query spesifik untuk masing-masing database.

Misal di Ms Access untuk membatasi baris yang ditampilkan menggunkan keyword TOP

1
SELECT TOP 10 * FROM siswa

Sedangkan di Firebird menggunakan keyword ROWS

1
SELECT * FROM siswa ROWS 10

Selamat MENCOBA :)

visual c#

Tentang Penulis

Software developer yang fokus mengembangkan aplikasi di atas platform .NET (Desktop, ASP.NET MVC, Web Service) dan Android. Senang mempelajari teknologi baru terutama di bidang OOP, Design Pattern, ORM, Database dan Continuous Integration & Deployment.
Saat ini bekerja sebagai staf IT di salah satu PTS di Yogyakarta sebagai senior software developer. Di waktu luang insya Alloh akan terus berbagi pengalaman di blog ini :)

« Tutorial Active Report bagian 2 - Grouping Melewatkan data antar form »

Comments