Mengakses multi database dengan satu Namespace

Posted by Kamarudin • 2 minute read • 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

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();
        }

    }
}

2. Mengakses database Firebird

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

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

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

SELECT TOP 10 * FROM siswa

Sedangkan di Firebird menggunakan keyword ROWS

SELECT * FROM siswa ROWS 10

Selamat MENCOBA :blush:

Comments