Home > Visual C# > Mengakses multi database dengan satu Namespace

Mengakses multi database dengan satu Namespace

July 29, 2011

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😥

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🙂

  1. eko
    August 2, 2011 at 9:30 am

    Ass Bang,, namespace itu brupa apa y??coding,,komponen at apa? kyaknya tutorialnya khusus .Net y,,soalnya sya ada project ubah MsAccess ke Mysql pkai itu,,bsa lbih mudah??

    • August 2, 2011 at 9:36 am

      Pernah mencoba java enggak om ? Klo iya namespace itu mirip dengan package.
      Gunanya untuk mengelompokkan class2x hanya saja klo package benar2x menggambarkan lokasi fisik (folder) dimana class2xnya disimpan sedangkan namespace bisa beda dengan nama foldernya penyimpanannya.

  2. fajrin
    August 2, 2011 at 6:13 pm

    Bang… maaf ni OOT… saya mau nanya… klo bikin aplikasi client server misalnya kita pake mysql… lbih baik mana yang koneksinya terus menerus ato buka tutup mas??? Makasih sebelumnya….

    • August 4, 2011 at 6:26 am

      Tergantung kebutuhkan om :
      Keep connection open:
      – fastest (only need to open at start of program)
      – easiest to program
      – doesn’t conform to multi-tier programming model. Will not work for distrubuted programming or web-programming.
      – can be expensive as more connections could be needed. Depending on your back-end database and the license agreement with the vendor you pay for each connection to the database – whether in use or not. For some database products (Sybase for example) this can add up to siginificant cost savings.
      – Does not scale. You can have 5 or 10 or 50 connections open with few problems. What happens if 500 or 1000 of more connections are open at one time. Performance would be an issue.

      Open/close only when needed:
      – more difficult to code
      – can be slower
      – scaliablity. More users don’t affect performance.
      – re-uses connections. Cheaper to implement.

      There are other methods than controlling the database connections within a client application. For example, write the database connectivity as part of a web-service (.net or java). You would have no direct database connections in your app – you would implement the SOAP calls to return XML from the web-service.

      sumber : http://vbcity.com/forums/t/63269.aspx

      • fajrin
        August 5, 2011 at 4:22 am

        makasih bang atas pencerahannya… di aplikasi yang abang buat yg saya liat pake koneksi buka tutup ya om??? bener ga???

        • August 5, 2011 at 5:51 am

          Klo sample diatas iya om😀

  3. eko
    August 3, 2011 at 2:07 pm

    Ok Bang thanx atas pencerahannya,,sya mau balajar dari abang soal vb lbih dalam,,mo sering2 liat blognya kyaknya bnyak artikel keren2…

    • August 4, 2011 at 6:29 am

      Oke om sering2x aja mampir kesini🙂

  4. Gilang
    October 7, 2011 at 7:06 pm

    Malam bang admin,,btw sya ad project db menggunakan MS Acces trus sya convert pke software converter ke mysql apakah query2 nya sdah ikut smua y,,ataukah msih ada yang perlu dirubah lagi??n untuk penyesuaian coding laennya apakah sajakah yang perlu di rubah??ada refrensi buku,situs atau project g bang admin…terima kasih sebelumnya…

    • October 9, 2011 at 12:31 am

      Untuk penyesuaikan kayaxnya enggak banyak om, selagi om masih menggunakan perintah2x query standar, contoh yg enggak standar seperti ini :

      SELECT TOP 10 * FROM nama_tabel
      

      Perintah diatas untuk membatasi record yang ditampilkan sebanyak 10 record, bisa digunakan untuk db Ms Access dan SQL server tapi klo databasenya MySQL querynya menjadi seperti ini :

      SELECT * FROM nama_tabel LIMIT 10
      
  5. December 4, 2011 at 3:38 am

    om admin sy mengunakan db firebird mengunakan namespace using FirebirdSql.Data.FirebirdClient;
    tp ko error y apa ada tambahan .dll atau kah komponen lain yg harus di instal..mohon penjelasan nya om admin

    • December 9, 2011 at 2:51 pm

      Emg pake NETProvider yg versi brp om ?

  1. April 16, 2014 at 9:14 am
Comments are closed.
%d bloggers like this: