ADO.NET menyediakan beberapa namespace berbeda untuk pengaksesan database. Seperti yang telah saya jelaskan di Pengenalan ADO.NET, setiap mengubah database kita harus mengubah juga namespacenya misal jika menggunakan database MS Access , maka namespace yang digunakkan adalah System.Data.OleDb, dan SQL Server : System.Data.OracleClient.
Celakanya, bukan hanya namespace yang diubah, class class didalam namespace tersebut juga harus berubah.
Contoh :
OleDbConnection ========> SqlConnection
OleDbCommand ========> SqlCommand
OleDbDataReader ========> OleDbDataReader
Lalu dimanakah permasalahnnya?bukankah masing-masing class di namespace tersebut memiliki cara akses yang sama. Dari sudut pandang Software Engineering, jika ingin membuat aplikasi yang scalable dan dinamis, kita harus memikirkan desain arsitektur yang "tahan banting". Perubahan adalah salah satu hal yang tidak bisa dihindari dalam Software Development karenanya kita harus mempertimbangkan berbagai aspek yang kemungkinan bisa terjadi dikemudian hari. Karena fokus kita kali ini di database, saya hanya akan membahas bagaimana cara mensiasati jika dikemudian hari terjadi pergantian DBMS karena alasan tertentu. Salah satu solusi untuk mengatasi perubahan DBMS adalah dengan membuat generic data access agar program tidak tergantung dengan database tertentu. Sehingga jika terjadi pergantian DBMS tidak akan ada perubahan signifikan.
.NET Framework menyediakan namespace System.Data.Common untuk pembuatan generic data access. Namespace tersebut memiliki class-class berikut.
Contoh :
MS Access
Data source pada contoh diatas menggunakan MS Access, sehingga namespace yang digunakan adalah System.Data.OleDb dan Connection string nya untuk MS Access jika ingin menggantinya ke SQL Server maka yang perlu diubah cukup driver dan connection string nya.
SQL Server
Yang menarik disini driver,dan connStr diperlakukan sebagai string, sehingga informasi ini bisa kita simpan dalam bentuk konfigurasi di XML.Dengan demikian jika terjadi perubahan implentasi database program tidak usah di compile ulang, cukup dengan mengubah konfigurasi XML nya. Bayangkan sebuah aplikasi client-server skala enterprise yang client nya bisa jadi terdiri dari banyak sekali komputer, compile ulang dan mendistribusikan kembali program tersebut ke client. Hmmm..jujur saja saya tidak akan mau melakukan ini !. Jika kita simpan dalam bentuk XML, file konfigurasi ini bisa disimpan diserver. Jika terjadi perubahan cukup mengedit file XML tersebut 1 kali, dan client tidak usah disentuh sama sekali
INSERT
UPDATE
DELETE
SELECT
Lalu bagaimana kalau konfigurasi data source nya diletakkan di XML? .NET Framework menyediakan akses ke konfigurasi XML lewat namespace System.Configuration. Class yang digunakan adalah ConfigurationManager
perhatikan contoh berikut :
Sedangkan konfigurasi XML disimpan di file App.config
Agar dapat menakses konfigurasi XML di App.config tambahkanlah library System.configuration menggunakan IDE Microsoft Visual C# 2005 Express Edition Anda melalui menu Project->Add Reference.
Celakanya, bukan hanya namespace yang diubah, class class didalam namespace tersebut juga harus berubah.
Contoh :
OleDbConnection ========> SqlConnection
OleDbCommand ========> SqlCommand
OleDbDataReader ========> OleDbDataReader
Lalu dimanakah permasalahnnya?bukankah masing-masing class di namespace tersebut memiliki cara akses yang sama. Dari sudut pandang Software Engineering, jika ingin membuat aplikasi yang scalable dan dinamis, kita harus memikirkan desain arsitektur yang "tahan banting". Perubahan adalah salah satu hal yang tidak bisa dihindari dalam Software Development karenanya kita harus mempertimbangkan berbagai aspek yang kemungkinan bisa terjadi dikemudian hari. Karena fokus kita kali ini di database, saya hanya akan membahas bagaimana cara mensiasati jika dikemudian hari terjadi pergantian DBMS karena alasan tertentu. Salah satu solusi untuk mengatasi perubahan DBMS adalah dengan membuat generic data access agar program tidak tergantung dengan database tertentu. Sehingga jika terjadi pergantian DBMS tidak akan ada perubahan signifikan.
.NET Framework menyediakan namespace System.Data.Common untuk pembuatan generic data access. Namespace tersebut memiliki class-class berikut.
- DbProviderFactory (Pembuatan instance provider data source spesifik)
- DbConnection (Membuka koneksi)
- DbCommand (Eksekusi perintah SQL)
- DbDataReader (Menampilkan data)
- DbDataAdapter (Penghubung ke DataSet)
Contoh :
MS Access
string driver = "System.Data.OleDb";
string connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=c:\\NWIND.mdb";
DbProviderFactory factory = DbProviderFactories.GetFactory(driver);
DbConnection conn = factory.CreateConnection();
conn.ConnectionString = connStr; conn.Open();
string connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=c:\\NWIND.mdb";
DbProviderFactory factory = DbProviderFactories.GetFactory(driver);
DbConnection conn = factory.CreateConnection();
conn.ConnectionString = connStr; conn.Open();
Data source pada contoh diatas menggunakan MS Access, sehingga namespace yang digunakan adalah System.Data.OleDb dan Connection string nya untuk MS Access jika ingin menggantinya ke SQL Server maka yang perlu diubah cukup driver dan connection string nya.
SQL Server
string driver = "System.Data.SqlClient";
string connStr = "Data Source= SYSTEMINTERFACE\\SQLEXPRESS;"
+ "Initial Catalog=NWIND;Integrated Security=True";
DbProviderFactory factory = DbProviderFactories.GetFactory(driver);
DbConnection conn = factory.CreateConnection();
conn.ConnectionString = connStr;
conn.Open();
string connStr = "Data Source= SYSTEMINTERFACE\\SQLEXPRESS;"
+ "Initial Catalog=NWIND;Integrated Security=True";
DbProviderFactory factory = DbProviderFactories.GetFactory(driver);
DbConnection conn = factory.CreateConnection();
conn.ConnectionString = connStr;
conn.Open();
Yang menarik disini driver,dan connStr diperlakukan sebagai string, sehingga informasi ini bisa kita simpan dalam bentuk konfigurasi di XML.Dengan demikian jika terjadi perubahan implentasi database program tidak usah di compile ulang, cukup dengan mengubah konfigurasi XML nya. Bayangkan sebuah aplikasi client-server skala enterprise yang client nya bisa jadi terdiri dari banyak sekali komputer, compile ulang dan mendistribusikan kembali program tersebut ke client. Hmmm..jujur saja saya tidak akan mau melakukan ini !. Jika kita simpan dalam bentuk XML, file konfigurasi ini bisa disimpan diserver. Jika terjadi perubahan cukup mengedit file XML tersebut 1 kali, dan client tidak usah disentuh sama sekali
INSERT
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO Customers (CustomerID,CompanyName) VALUES "
+ "(@CustId,@Name)";
DbParameter param1 = cmd.CreateParameter();
param1.ParameterName ="@CustId";
param1.Value="XERIS";
DbParameter param2 = cmd.CreateParameter();
param2.ParameterName ="@Name";
param2.Value="XERIS System Interface";
cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);
cmd.ExecuteNonQuery();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO Customers (CustomerID,CompanyName) VALUES "
+ "(@CustId,@Name)";
DbParameter param1 = cmd.CreateParameter();
param1.ParameterName ="@CustId";
param1.Value="XERIS";
DbParameter param2 = cmd.CreateParameter();
param2.ParameterName ="@Name";
param2.Value="XERIS System Interface";
cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);
cmd.ExecuteNonQuery();
UPDATE
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = "UPDATE Customers SET CompanyName=@Name "
+ "WHERE CustomerID=@CustId";
DbParameter param1 = cmd.CreateParameter();
param1.ParameterName = "@CustId";
param1.Value = "XERIS";
DbParameter param2 = cmd.CreateParameter();
param2.ParameterName = "@Name";
param2.Value = "XERIS System Interface";
cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);
cmd.ExecuteNonQuery();
cmd.Connection = conn;
cmd.CommandText = "UPDATE Customers SET CompanyName=@Name "
+ "WHERE CustomerID=@CustId";
DbParameter param1 = cmd.CreateParameter();
param1.ParameterName = "@CustId";
param1.Value = "XERIS";
DbParameter param2 = cmd.CreateParameter();
param2.ParameterName = "@Name";
param2.Value = "XERIS System Interface";
cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);
cmd.ExecuteNonQuery();
DELETE
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = "DELETE FROM Customers WHERE CustomerID=@CustId";
DbParameter param1 = cmd.CreateParameter();
param1.ParameterName = "@CustId";
param1.Value = "XERIS";
cmd.Parameters.Add(param1);
cmd.ExecuteNonQuery();
cmd.Connection = conn;
cmd.CommandText = "DELETE FROM Customers WHERE CustomerID=@CustId";
DbParameter param1 = cmd.CreateParameter();
param1.ParameterName = "@CustId";
param1.Value = "XERIS";
cmd.Parameters.Add(param1);
cmd.ExecuteNonQuery();
SELECT
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM Customers WHERE CompanyName LIKE @Name";
DbParameter param1 = cmd.CreateParameter();
param1.ParameterName = "@CustId";
param1.Value = "XERIS";
cmd.Parameters.Add(param1);
IDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr["CustomerID"]);
Console.WriteLine(rdr["CompanyName"]);
}
rdr.Close();
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM Customers WHERE CompanyName LIKE @Name";
DbParameter param1 = cmd.CreateParameter();
param1.ParameterName = "@CustId";
param1.Value = "XERIS";
cmd.Parameters.Add(param1);
IDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr["CustomerID"]);
Console.WriteLine(rdr["CompanyName"]);
}
rdr.Close();
Lalu bagaimana kalau konfigurasi data source nya diletakkan di XML? .NET Framework menyediakan akses ke konfigurasi XML lewat namespace System.Configuration. Class yang digunakan adalah ConfigurationManager
perhatikan contoh berikut :
string driver = ConfigurationManager.AppSettings["Driver"];
string connStr = ConfigurationManager.AppSettings["ConnectionString"];
string connStr = ConfigurationManager.AppSettings["ConnectionString"];
Sedangkan konfigurasi XML disimpan di file App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Driver" value="System.Data.SqlClient"/>
<add key="ConnectionString" value="Data Source=SYSTEMINTERFACE\\SQLEXPRESS;"
+ "Initial Catalog=NWIND;Integrated Security=True"/>
</appSettings>
</configuration>
<configuration>
<appSettings>
<add key="Driver" value="System.Data.SqlClient"/>
<add key="ConnectionString" value="Data Source=SYSTEMINTERFACE\\SQLEXPRESS;"
+ "Initial Catalog=NWIND;Integrated Security=True"/>
</appSettings>
</configuration>
Agar dapat menakses konfigurasi XML di App.config tambahkanlah library System.configuration menggunakan IDE Microsoft Visual C# 2005 Express Edition Anda melalui menu Project->Add Reference.
maaf mengganggu saya hanya ingin berbagi artikel yang berkaitan tentang XML DBMS
BalasHapusberikut linknya :
http://repository.gunadarma.ac.id/bitstream/123456789/2856/1/%28ISLP-04%29.pdf
semoga bermanfaat :)