Wah,sudah lama juga saya tidak menulis blog saya lagi,mungkn karena kesibukan saya sebagai programmer…. 😛
Alhamdulillah tahun ini dengan lingkungan kerja yg baru walaupun status masih sama dengan yg sebelumnya menjadi seorang .NET programmer (saya termasuk peminat produk microsoft dari awal menjadi programmer) walaupun sekarang saya sedang dalam development project yg tidak ada hubungan sama sekali dengan produk-produk microsoft (client saya termasuk pembenci microsoft) alias menjadi php programmer. Walaupun sebenarnya menyimpang dari status saya sebagai .NET programmer, namun apapun pekerjaannya asalkan ada uang dan itu halal, gpp lah,hehe…
Ups,sepertinya saya terlalu banyak bicara,maklum ingin curhat dikit,hehe…
Langsung aja,sebelumnya tulisan saya “Membuat Class Database untuk Mempermudah Pembuatan CRUD” menjelaskan untuk membuat suatu kelas penggunaannya hanya terbatas untuk proses SELECT, INSERT, UPDATE, dan DELETE saja. Kali ini saya ingin menambahkan beberapa fungsi untuk pengaksesan Stored Procedure. Seperti pada tulisan saya sebelumnya, penggunaan kelas untuk pengaksesan database menurut saya adalah pilihan terbaik terlebih eksekusi Stored Procedure (terlebih seringnya saya melakukan eksekusi dalam sebuah SP, bukan script database biasa) dan koneksi ke database. pada tulisan kali ini, saya akan melengkapinya dengan contoh aplikasi dari penggunaan kelas database (Terima kasih atas komentarnya arsyil :D). Oke, langsung saja berikut kelas DataAccess yg saya buat (saya menggunakan bahasa C#, untuk bahasa lain seperti Java,VB.NET insya ALLAH kalau ada kesempatan saya akan tuliskan pada tulisan selanjutnya) :
Ini adalah kelas DataAccess yg saya buat :
[sourcecode language=”csharp”]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace Library
{
public class DataAccess
{
public string ConnectionString;
public SqlConnection myConnection;
private string _errorMessage;
public string ErrorMessage
{
get { return _errorMessage; }
set { _errorMessage = value; }
}
public DataAccess()
{
_errorMessage = "";
}
private string GetConnectionString(string sConfig)
{
return ConfigurationManager.ConnectionStrings[sConfig].ConnectionString;
}
public void OpenConnection(string sConfig)
{
ConnectionString = GetConnectionString(sConfig);
myConnection = new SqlConnection(ConnectionString);
try
{
myConnection.Open();
}
catch (Exception ex)
{
_errorMessage = ex.Message;
}
}
#region Fungsi Select
//Fungsi untuk eksekusi query select semua kolom
public SqlDataReader Select(string sConfig, string sNamaTabel, string sWhere = "", string sOrder = "")
{
string SQL = "SELECT * FROM " + sNamaTabel;
if (sWhere != "")
SQL += " WHERE " + sWhere;
if (sOrder != "")
SQL += " ORDER BY " + sOrder;
return this.GetData(sConfig, SQL);
}
//Fungsi untuk eksekusi query select dengan kolom spesifik
public SqlDataReader Select(string sConfig, string[] sNamaKolom, string sNamaTabel, string sWhere = "", string sOrder = "")
{
string SQL = "SELECT ";
for (int i = 0; i <= sNamaKolom.Length – 1; i++)
{
SQL += sNamaKolom[i];
if (i < sNamaKolom.Length – 1)
{
SQL += ",";
}
}
SQL += " FROM " + sNamaTabel;
if (sWhere != "")
SQL += " WHERE " + sWhere;
if (sOrder != "")
SQL += " ORDER BY " + sOrder;
return this.GetData(sConfig, SQL);
}
#endregion
#region Fungsi Insert
//Fungsi eksekusi query insert
public bool Insert(string sConfig, string sNamaTabel, string[] isiTabel)
{
string SQL = "INSERT INTO " + sNamaTabel + " VALUES(";
for (int i = 0; i <= isiTabel.Length – 1; i++)
{
SQL += "’" + isiTabel[i] + "’";
if (i < isiTabel.Length – 1)
{
SQL += ",";
}
}
SQL += ")";
return this.ExecuteCommand(sConfig, SQL);
}
public bool Insert(string sConfig, string sNamaTabel, Dictionary<string, string> isiTabel)
{
string SQL = "INSERT INTO " + sNamaTabel + " (";
foreach (KeyValuePair<string, string> dc in isiTabel)
{
SQL += dc.Key + ",";
}
SQL = SQL.Substring(0, SQL.Length – 1);
SQL += ") VALUES(";
foreach (KeyValuePair<string, string> dc in isiTabel)
{
SQL += "’" + dc.Value + "’,";
}
SQL = SQL.Substring(0, SQL.Length – 1);
SQL += ")";
return this.ExecuteCommand(sConfig, SQL);
}
#endregion
#region Fungsi Update
//Fungsi eksekusi query update
public bool Update(string sConfig, string sNamaTabel, Dictionary<string, string> isiTabel, string sWhere = "")
{
string SQL = "UPDATE " + sNamaTabel + " SET ";
foreach (KeyValuePair<string, string> dc in isiTabel)
{
SQL += dc.Key + "=’" + dc.Value + "’";
}
SQL = SQL.Substring(0, SQL.Length – 1);
if (sWhere != "")
SQL += " WHERE " + sWhere;
return this.ExecuteCommand(sConfig, SQL);
}
#endregion
#region Fungsi Delete
//Fungsi eksekusi query delete
public bool Delete(string sConfig, string sNamaTabel, string sWhere = "")
{
string SQL = "DELETE FROM " + sNamaTabel;
if (sWhere != "")
SQL += " WHERE " + sWhere;
return this.ExecuteCommand(sConfig, SQL);
}
#endregion
#region Fungsi untuk menjalankan script SQL
//Fungsi untuk mendapat data
public SqlDataReader GetData(string sConfig, string sCommand)
{
SqlDataReader dr = null;
SqlCommand cmd = null;
string CommandText = sCommand;
try
{
this.OpenConnection(sConfig);
cmd = new SqlCommand(CommandText);
cmd.Connection = this.myConnection;
dr = cmd.ExecuteReader();
return dr;
}
catch (SqlException ex)
{
_errorMessage = ex.Message;
return null;
}
}
//Fungsi eksekusi query
public bool ExecuteCommand(string sConfig, string sCommand)
{
SqlCommand cmd = null;
string CommandText = sCommand;
try
{
this.OpenConnection(sConfig);
cmd = new SqlCommand(CommandText);
cmd.Connection = this.myConnection;
cmd.ExecuteNonQuery();
return true;
}
catch (SqlException ex)
{
_errorMessage = ex.Message;
return false;
}
}
#endregion
#region Fungsi untuk Eksekusi SP
public SqlDataReader ExecuteSP(string sConfig, string sSP, params SqlParameter[] parameters)
{
SqlDataReader dr = null;
SqlCommand cmd = null;
string SPName = sSP;
try
{
this.OpenConnection(sConfig);
cmd = new SqlCommand(SPName);
cmd.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < parameters.Length; i++)
{
cmd.Parameters.Add(parameters[i]);
}
cmd.Connection = this.myConnection;
dr = cmd.ExecuteReader();
return dr;
}
catch (SqlException ex)
{
_errorMessage = ex.Message;
return null;
}
}
public SqlDataReader ExecuteSP(string sConfig, string sSP)
{
SqlDataReader dr = null;
SqlCommand cmd = null;
string SPName = sSP;
try
{
this.OpenConnection(sConfig);
cmd = new SqlCommand(SPName);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = this.myConnection;
dr = cmd.ExecuteReader();
return dr;
}
catch (SqlException ex)
{
_errorMessage = ex.Message;
return null;
}
}
#endregion
}
}
[/sourcecode]
Selanjutnya kita akan mencoba menggunakan kelas DataAccess tersebut untuk project kita. Saya menggunakan Visual Studio 2010 Professional sebagai editornya dan SQL Server 2008 R2 sebagai databasenya. Saya asumsikan kedua aplikasi tersebut sudah terinstal dalam komputer. Pertama kita buat database DataSekolah dan table tblSiswa pada database DataSekolah tersebut. Tabel ini hanya sebagai contoh sederhana untuk keperluan akses data kita. Untuk kasus nyata desain database dapat lebih kompleks lg. Desain tabel seperti berikut :
Kemudian kita coba isi beberapa data dari tabel tersebut. Sebagai contoh, saya mengisinya dengan data sebagai berikut :
No. Induk |
Nama |
Tempat Lahir |
Tanggal Lahir |
Alamat |
123-2014 |
Ahmad Jaelani |
Tangerang |
27/04/1990 |
Tangerang |
122-2014 |
Nurmadi |
Jakarta |
17/02/1989 |
Bandung |
124-2014 |
Maya |
Bandung |
09/04/1984 |
Bandung |
Buat sebuah Stored Procedure dengan nama sp_GetDataSiswa. Isi script berikut kemudian execute :
[sourcecode language=”sql”]
CREATE PROCEDURE sp_GetDataSiswa
AS
SELECT *
FROM dbo.tblSiswa
[/sourcecode]
Setelah database siap, sekarang kita ke visual studio untuk pembuatan scriptnya. Buka visual studio, buat sebuah project baru, tambahkan sebuah class dengan nama DataAccess. Copy-kan script kelas DataAccess di atas. Jika dilihat, tampilan project akan seperti berikut :
Buka web.config. Disini kita akan konfigurasi pengaksesan datanya. Ubah menjadi seperti berikut :
Tambahkan halaman web baru ke dalam project. Tambahkan sebuah GridView pada halaman web. Buka halaman code. Ubah script sehingga menjadi seperti berikut :
[sourcecode language=”csharp”]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
namespace DataAccess
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlDataReader dr = null;
DataTable dt = new DataTable();
Library.DataAccess oDataAccess = new Library.DataAccess();
dr = oDataAccess.ExecuteSP("siswa", "sp_GetDataSiswa");
GridView1.DataSource = null;
GridView1.DataBind();
if (dr != null && dr.HasRows)
{
GridView1.DataSource = dr;
GridView1.DataBind();
}
}
}
}
[/sourcecode]
Kemudian jalankan, jika berhasil akan tampil sebagai berikut :
Sekian tulisan saya pada kesempatan ini. Insya ALLAH bila ada kesempatan, saya akan update terus tulisan saya. Terima Kasih….
Source Code lengkap dapat di download pada link berikut :
http://www.4shared.com/zip/EdyI7aPhce/DataAccess.html
atau
https://drive.google.com/file/d/0B9_2JJSi4W6RdGJrWVdPVXpkZ1U/edit?usp=sharing
Sedangkan untuk databasenya dapat di download pada link berikut :
http://www.4shared.com/file/RwhVzpmVce/DataSekolah.html
atau
https://drive.google.com/file/d/0B9_2JJSi4W6RRWU3T3NrOXhNdFU/edit?usp=sharing