Juni 15

INSERT INTO … VALUES … , INSERT INTO …. SELECT, dan SELECT … INTO ….

Pagi hari yang cerah ini, saat yang tepat untuk berbagi,hehe….

Kali ini saya ingin menjelaskan tentang 3 pola query insert (untuk SQL Server) yang sering digunakan untuk menginputkan data. Mungkin teman-teman sudah tidak asing menggunakan pola INSERT INTO. Dalam penggunaannya ternyata memiliki pola yang lain untuk keperluan yang berbeda. Baik, saya langsung jelaskan satu persatu, namun sebelumnya saya asumsikan teman-teman telah memiliki tabel barang dan produk yang ada pada artikel Menyimpan hasil insert yang disimpan ke suatu tabel dari suatu tabel ke dalam tabel lain.

1. INSERT INTO … VALUES …

Untuk query ini, tentunya teman-teman sudah biasa menggunakannya. Query ini digunakan untuk menginput data ke database baik satu atau lebih dari suatu inputan. Misalnya, kita ingin menambahkan data ke tabel barang dengan kode_barang=C021,kode_gudang=G01B,nama_barang=Mi Instan. Maka kita dapat membuat query seperti berikut :

Atau kita ingin menambahkan dua buah data ke tabel barang dengan kode_barang=C022,kode_gudang=G01B,nama_barang=Kopi dan kode_barang=C023,kode_gudang=G01B,nama_barang=Kopi Luwak. Maka kita dapat membuat query seperti berikut :

2. INSERT INTO …. SELECT

Untuk query yang satu ini biasanya digunakan untuk menyimpan data ke tabel dari tabel yang lain (baik itu tabel lokal, table variable, maupun table temporary). Misalnya, kita ingin memasukkan semua data yang memiliki kode gudang G01B pada tabel barang ke dalam tabel produk. Maka kita dapat membuat query seperti berikut :

Walaupun query ini sebenarnya dapat digunakan untuk memasukkan data dari suatu inputan (namun hanya terbatas satu inputan saja). Misalnya kita ingin menambahkan data ke tabel barang dengan kode_barang=C024,kode_gudang=G01B,nama_barang=Teh Botol. Maka kita dapat membuat query seperti berikut :

3. SELECT … INTO ….

Untuk query yang satu ini dapat kita gunakan untuk menginput data dari suatu tabel ke tabel yang lain, namun tabel tujuan belum ada/belum di-create. Biasanya query ini digunakan pada saat migrasi data maupun saat kita memerlukan sebuah tabel untuk tempat menampung data sementara dari suatu tabel. Tabel yang ter-create dari query ini akan memiliki properties yang sama persis dengan tabel sumber, baik dari jumlah kolom, tipe data kolom-kolomnya, dan lain-lainnya. Namun, tabel tujuan yang dapat di-create hanya tabel lokal dan table temporary saja (table variable tidak bisa menggunakan query ini). Misalnya, kita ingin memasukkan tabel barang ke tabel lain sebagai tempat menampung data sementara dengan spesifikasi tabel yang sama dengan tabel barang. Maka kita dapat membuat query seperti berikut :

  • Tabel tujuan adalah tabel fisik :
  • Tabel tujuan adalah tabel temporary global :
  • Tabel tujuan adalah tabel temporary local :

Demikian penjelasan singkat mengenai 3 pola query untuk Insert data ini. Mudah-mudahan bermanfaat, selamat berkerja… 😀

Juni 12

Generate query menggunakan Excel

Pada suatu hari, Bayu mendapat tugas untuk memasukkan data dari sebuah excel ke dalam database untuk keperluan aplikasi. Sementara dalam aplikasi tersebut tidak terdapat fasilitas untuk mengupload data Excel ke dalamnya. Lalu, bagaimana cara Bayu melakukannya? Apa Bayu harus menulis query insert untuk setiap datanya?

Pada kasus seperti di atas mungkin banyak teman-teman juga yang mengalaminya. Mungkin ada yang berpikiran menulis query untuk semua data. Untuk jumlah data yang sedikit mungkin bukan hal yang jadi masalah. Namun, bagaimana bila data tersebut terdiri dari puluhan atau ratusan data? Akan membutuhkan waktu yang sangat lama dan ini menjadi tidak efisien.

Pada kali ini, saya akan membagikan cara yang mungkin efektif dengan menggunakan Excel. Saya tidak menyebutkan detail Excel tersebut, teman-teman bisa menggunakan Microsoft Excel maupun software spreadsheet lainnya. Tapi untuk artikel ini, saya menggunakan Microsoft Excel 2013 (karena di laptop kantor terinstal Ms. Excel 2013,hehe..) dan database SQL Server 2008 R sebagai latihan. Untuk file Excel, teman-teman bisa download file Excelnya di : ProvinsiKabupaten.xls. Untuk tabel databasenya, teman-teman bisa create menggunakan query berikut :

Kita akan mencoba memasukkan data provinsi ke tabel provinsi. Berikut langkah-langkahnya :

  • Kita buka file Excel tersebut dan kita blok kolom D2 – D32.

BlockD

  • Ketikkan pada kolom Formula dengan formula berikut

=”INSERT INTO [Indonesia].[dbo].[tblProvinsi] ([Id_Provinsi], [Nama_Provinsi]) VALUES (‘” & A2 & “‘, ‘” & B2 & “‘)”

seperti berikut :

Concat1

Atau bisa memanfaatkan fungsi CONCATENATE pada excel dengan rumus

=CONCATENATE(“INSERT INTO [Indonesia].[dbo].[tblProvinsi] ([Id_Provinsi], [Nama_Provinsi]) VALUES (‘”,A2,”‘, ‘”,B2,”‘)”)

seperti berikut :

Concat2

  • Kemudian tekan Ctrl + Enter. Maka script pun siap kita eksekusi di SQL Server.

  • Kita Copy kolom tersebut.

CopyGenerateD

  • Kita buka Sql Server. Paste-kan query yang tadi kita copy. Di sini saya tambahkan Begin Transaction agar proses Rollback saat tengah jalan ada yang salah dengan querynya.

Query1

Query2

  • Execute script tersebut. Maka data telah masuk dalam tabel Provinsi.

Hasil

Kita dapat melakukan hal serupa dengan kabupaten. Teman-teman bisa mencobanya. Untuk kasus yang lain hanya menyesuaikan query yang ingin dibuatnya. Generate ini tidak terbatas hanya untuk query Insert saja. Update, Delete, maupun query lainnya bisa diterapkan dengan cara ini tergantung dari kebutuhan yang diinginkan dan kasus yang terjadi. Bagaimana?? Mudah kan?? Selamat bekerja 😀

Juni 11

Menyimpan hasil insert yang disimpan ke suatu tabel dari suatu tabel ke dalam tabel lain

Pada siang hari yang cerah ini saya akan membagikan ilmu baru (karena saya pun baru mengetahuinya sambil menunggu pekerjaan baru). Apa itu?? Mungkin teman-teman pernah mengalami hal yang sama dengan kasus yang pernah saya alami. Suatu ketika teman-teman diharuskan memasukkan data ke suatu tabel (input data) dengan jumlah data yang sangat besar, namun saat proses insert data tersebut gagal di tengah proses (entah oleh data yang tidak valid ataupun koneksi yang terputus) dan tidak diperbolehkan proses Rollback data tetapi user ingin mengetahui data apa saya yang telah berhasil ter-insert dalam tabel tersebut. Mungkin solusi pertama kita bisa buat sebuah flag dalam tabel tersebut dimana flag tersebut diupdate saat semua proses insert berhasil dilakukan sampai selesai. Tetapi bila ternyata tabel tersebut tidak ada kolom untuk tempat flag dan kita tidak diperkenankan menambah kolom dari tabel tersebut, maka solusi berikut mungkin akan sangat berguna untuk menyelesaikan kasus tersebut. Lalu, apa solusinya?? Apa querynya??

Kita bisa menggunakan pola script berikut :

[sourcecode language=”sql”]
INSERT [tabel_tujuan]
OUTPUT INSERTED.*
INTO [tabel_monitor]
SELECT *
FROM [tabel_sumber]
[/sourcecode]

dimana :

tabel_tujuan = tabel yang akan di-insert

tabel_monitor = tabel tempat untuk menyimpan data yang berhasil diinsert selama proses (bisa berupa table temporary maupun table variable. Penjelasan keduanya insya ALLAH akan saya jelaskan di lain kesempatan)

tabel_sumber = tabel yang menjadi sumber data untuk diinsert

Sebagai latihan, kita bisa menggunakan tabel-tabel pada artikel berikut Join pada SQL Server. Di sini kita akan menggunakan tabel barang sebagai latihan kita. Lalu tambahkan tabel produk menggunakan script berikut :

[sourcecode language=”sql”]
USE [produksi]

CREATE TABLE [dbo].[produk] (
[kode_produk] varchar NOT NULL,
[kode_gudang] varchar NULL,
[nama_produk] varchar NULL,
CONSTRAINT [PK_produk] PRIMARY KEY CLUSTERED ([kode_produk] ASC) WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY],
CONSTRAINT [IX_produk] UNIQUE NONCLUSTERED ([kode_produk] ASC) WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
[/sourcecode]

Kemudian kita coba untuk melihat data hasil insert dengan query berikut :

[sourcecode language=”sql”]
DECLARE @produk_inserted TABLE (
[kode_produk] varchar NOT NULL,
[kode_gudang] varchar NULL,
[nama_produk] varchar NULL
)

INSERT produk
OUTPUT INSERTED.*
INTO @produk_inserted
SELECT *
FROM barang
[/sourcecode]

Di sini saya menggunakan table variable sebagai penampung data hasil insert. Saat terjadi masalah saat proses di atas berlangsung, kita dapat melihat data apa saja yang berhasil di-insert dengan select pada table variable.

[sourcecode language=”sql”]
SELECT *
FROM @produk_inserted
[/sourcecode]

Demikian artikel singkat ini, mudah2an bermanfaat… 😀

 

April 3

Join pada SQL Server

Malam ini saya ingin berbagi ilmu mengenai JOIN. Apa itu JOIN? JOIN merupakan salah satu operasi untuk menghubungkan dua atau lebih tabel yang saling berelasi (walaupun dalam prakteknya kita dapat menghubungkan tabel-tabel yang tidak berelasi sama sekali). Operasi JOIN yang akan saya bahas pada tulisan ini terbatas pada operasi JOIN dalam SQL Server. JOIN sendiri memiliki berbagai jenis, diantaranya : JOIN, INNER JOIN, LEFT JOIN, LEFT OUTER JOIN, RIGHT JOIN, RIGHT OUTER JOIN, CROSS JOIN, dan JOIN dengan koma. Akan saya bahas satu-persatu jenis-jenis JOIN tersebut. Dalam setiap penjelasan, saya berikan contoh untuk mempermudah pemahaman. Oleh karena itu, pertama kita siapkan dua buah tabel sebagai contoh dengan nama tabel barang dan tabel gudang (saya anggap SQL Server sudah terinstal di kompiter). Berikut script create tabelnya :

– Tabel barang :

  • Tabel gudang :

Isi kedua tabel dengan data-data berikut :

  • Tabel barang :

Untuk barang yang kode_gudang nya NULL kita anggap barang tersebut belum disimpan di dalam gudang manapun.

  • Tabel gudang :

Pada setiap contoh, akan saya jadikan tabel barang berada di sebelah kiri hasil dan tabel gudang berada di sebelah kanan hasil.

1. JOIN / INNER JOIN

JOIN / INNER JOIN merupakan jenis JOIN yang digunakan untuk mendapatkan data dari dua tabel atau lebih yang persis saling berelasi. Kalau kita gambarkan dengan diagram, hasil dari JOIN dengan menggunakan JOIN / INNER JOIN merupakan irisan dari relasi antar tabel.

Inner JoinContoh kasus :

Seorang pegawai ingin melihat semua data barang beserta nama gudangnya dengan catatan barang tersebut telah berada dalam gudang.

Maka script yang harus kita gunakan dalam kasus ini yaitu menggunakan script JOIN / INNER JOIN.

Berikut script JOIN :

atau menggunakan INNER JOIN :

Hasilnya :

Contoh Inner Join

2. LEFT JOIN / LEFT OUTER JOIN

LEFT JOIN / LEFT OUTER JOIN merupakan jenis JOIN yang digunakan untuk mendapatkan data dari dua tabel atau lebih dimana data di tabel sebelah kiri ditampilkan semua baik yang berelasi dengan data di tabel sebelah kanan maupun tidak. Kalau kita gambarkan dengan diagram, hasil dari JOIN dengan menggunakan LEFT JOIN / LEFT OUTER JOIN seperti berikut :

Left Join

Contoh kasus :

Seorang pegawai ingin melihat semua data barang beserta nama gudangnya baik barang itu sudah berada dalam gudang maupun belum berada dalam gudang.

Maka script yang harus kita gunakan dalam kasus ini yaitu menggunakan script LEFT JOIN / LEFT OUTER JOIN.

Berikut script LEFT JOIN :

atau menggunakan LEFT OUTER JOIN :

Hasilnya :

Contoh Left JoinDari hasil kita dapat lihat bahwa data barang yang tidak berelasi dengan data gudang tetap ditampilkan, namun data di sebelah kanan (data gudang) diisi dengan NULL.

3. RIGHT JOIN / RIGHT OUTER JOIN

RIGHT JOIN / RIGHT OUTER JOIN merupakan jenis JOIN yang digunakan untuk mendapatkan data dari dua tabel atau lebih dimana data di tabel sebelah kanan ditampilkan semua baik yang berelasi dengan data di tabel sebelah kiri maupun tidak. Kalau kita gambarkan dengan diagram, hasil dari JOIN dengan menggunakan RIGHT JOIN / RIGHT OUTER JOIN seperti berikut :

Right Join

Contoh kasus :

Seorang pegawai ingin melihat semua data barang beserta nama gudangnya dengan catatan gudang yang tidak berisi barangpun tetap ditampilkan.

Maka script yang harus kita gunakan dalam kasus ini yaitu menggunakan script RIGHT JOIN / RIGHT OUTER JOIN.

Berikut script RIGHT JOIN :

atau menggunakan RIGHT OUTER JOIN :

Hasilnya :

Contoh Right JoinDari hasil kita dapat lihat bahwa data gudang yang tidak berelasi dengan data barang tetap ditampilkan, namun data di sebelah kiri (data barang) diisi dengan NULL.

4. CROSS JOIN

CROSS JOIN merupakan jenis JOIN yang digunakan untuk mendapatkan data kombinasi dari dua tabel atau lebih. Misalkan, n = jumlah baris data pada tabel di sebelah kiri, dan m = jumlah baris data pada tabel di sebelah kanan. Maka hasil jumlah baris dari CROSS JOIN adalah n X m baris data.

Contoh kasus :

Seorang pegawai ingin melihat semua kombinasi data barang yang dapat disimpan ke dalam gudang.

Maka script yang harus kita gunakan dalam kasus ini yaitu menggunakan script CROSS JOIN.

Berikut script CROSS JOIN :

Hasilnya :

Contoh Cross JoinDi sini kita hasil menggunakan CROSS JOIN yaitu kombinasi antara tabel barang dengan tabel gudang dengan jumlah baris hasilnya 39. Dimana jumlah baris data barang adalah 13 data dan jumlah baris data gudang adalah 3 data. 39 = 13 X 3

5. JOIN dengan koma

Selain menggunakan operator JOIN, kita juga dapat melakukan JOIN antar tabel dengan menggunakan koma. Bila kita tidak menambahkan kondisi relasi dengan menggunakan WHERE, maka JOIN dengan koma akan menghasilkan data yang sama apabila kita menggunakan CROSS JOIN. Misal dengan script berikut :

Maka akan menghasilkan data kombinasi seperti berikut :

Contoh Join Koma tanpa kondisiNamun, apabila kita menambahkan kondisi dengan merelasikan kolom yang berelasi menggunakan WHERE saat JOIN dengan koma. Maka hasilnya seperti kita menggunakan JOIN / INNER JOIN.

Misal dengan script berikut :

Maka hasilnya seperti berikut :

Contoh Join Koma dengan kondisiDengan kata lain, menggunakan koma merupakan alternatif lain dari JOIN pada SQL Server.

Penggunaan operator JOIN mana yang kita gunakan tergantung dari keperluan data yang diinginkan.

Maret 13

Mengatasi string terinsert simbol db2 AS400

Saat teman-teman melakukan insert data dari database tertentu seperti Sql Server, MySQL, ataupun lainnya ke dalam database db2 (AS400) baik melalui SSIS, DTS, maupun tools lainnya dengan menggunakan akses data ODBC, mungkin beberapa teman-teman yang mengalami hal yang sama dengan saya alami. Iya, hasil data insert tersebut berbentuk simbol-simbol aneh saat kita select dalam db2. Seperti ini :

Untitled

Saat mengalami seperti ini, jangan panik. Hal ini terjadi dikarenakan format data string yang ada pada AS400 berbeda dengan database SQL Server maupun lainnya. Untuk mengatasi masalah tersebut kita harus setting conversion pada ODBC. Langkah-langkahnya sebagai berikut :

  1. Buka Control Panel -> Administrative Tools -> Data Sources (ODBC)

  2. Setelah Dialog ODBC tampil, pilih Tab System DNS. Pilih ODBC yang digunakan kemudian klik Configure.

Conversion

  1. Pada ODBC Setup Dialog, pilih Tab Conversions, beri centang “Convert binary data (CCSID 65535) to text. Kemudian klik OK.

ODBC

Setelah langkah-langkah di atas selesai, maka masalah kita pun selesai. Data akan ter-insert dengan benar seperti berikut. 😀

Hasil

 

Mei 8

Membuat Dialog Konfirmasi dengan JQuery UI

Sepulang kerja dan sehabis makan sambil menghilangkan dahaga, waktunya untuk berbagi ilmu. 😀
Mungkin banyak diantara kita sudah tidak asing alias sudah terbiasa apabila ingin membuat konfirmasi entah itu action delete dan lain sebagainya dengan script confirm() pada javascript. Kalau ada yg belum pernah menggunakannya, tampilannya kira2 seperti ini :

Confirm Lama

Tampilannya kurang menarik bukan? (setidaknya bagi saya :)). Nah, bagaimana kalau tampilan konfirmasinya seperti ini :

Dialog Konfirmasi JQuery UI

Menarik bukan?? Hehe….

Ingin tau bagaimana cara membuatnya??

Tampilan tersebut merupakan salah satu hasil dari penggunaan fasilitas JQuery UI. Lalu, apa itu JQuery UI? Sebelum berlanjut ke JQuery UI, kita perlu mengenal apa itu JQuery. Jquery merupakan library javascript yg memberikan kemudahan untuk kita dalam menyusun dan menulis secript javascript. Dengan menggunakan JQuery, kita tidak perlu menulis panjang script javascript yg ingin kita pakai dan dengan kemudahan yg ada di dalamnya, diberikan juga fungsi2 yg akan sering kita gunakan dalam kegiatan programming. JQuery ini merupakan library javascript yg powerfull (terutama lisensinya yg gratis :D) dan telah digunakan oleh banyak web perusahaan2 besar (salah satunya tools mysql : phpmyadmin). Lalu, apa itu JQuery UI? JQuery UI adalah salah satu bundle untuk low-level abstraction jQuery library untuk kebutuhan interaksi dan efek. Didalamnya terdapat fasilitas untuk memperindah tampilan web dengan tema2 dan warna cantik yg dapat kita atur dengan mudah. Dengan JQuery UI ini kita akan memperindah dialog konfirmasi kita menjadi semakin menarik. Tanpa panjang lebar lagi, langsung kita praktekkan pembuatannya. Namun sebelumnya, kita harus mengunduh JQuery UI terlebih dahulu. Kita atur tema yg kita pilih terlebih dahulu, saya menggunakan tema Start. Dapat didownload pada link berikut : http://jqueryui.com/themeroller/ (Tenang aja, Jquery sudah ada di dalam bundlenya).

Setelah JQuery UI didownload, kita buka project baru. Namun, saya akan menggunakan project pada tulisan saya yg “Membuat Kelas DataAccess untuk mengeksekusi Stored Procedure“. Masukkan semua folder js dan css yg ada pada folder JQuery UI ke dalam project kita hingga susunan Solution seperti berikut :

solution

Tambahkan Command Select dan satu buah tombol hingga tampilan menjadi berikut :

Select

Masukkan DataKeyNames : NoInduk pada gridview dan masukkan sourcecode pada WebForm1.aspx.cs sehingga menjadi seperti berikut :

[sourcecode language=”csharp”]</p>
<p style="text-align: justify;">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 &amp;&amp; dr.HasRows)
{
GridView1.DataSource = dr;
GridView1.DataBind();
}

Button1.Attributes.Add("onclick", "return Confirm();");
}

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow row = GridView1.SelectedRow;

Session["NoInduk"] = GridView1.DataKeys[row.RowIndex].Value.ToString();
}

protected void Button1_Click(object sender, EventArgs e)
{
Library.DataAccess oDataAccess = new Library.DataAccess();
oDataAccess.Delete("siswa", "tblSiswa", "NoInduk=’" + Session["NoInduk"].ToString() + "’");
}
}
}</p>
<p style="text-align: justify;">[/sourcecode]

Kemudian masukkan sourcecode pada file WebForm1.aspx sehingga menjadi seperti berikut :

[sourcecode language=”javascript”]</p>
<p style="text-align: justify;">&lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DataAccess.WebForm1" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head runat="server"&gt;
&lt;title&gt;&lt;/title&gt;
&lt;link rel="stylesheet" href="css/start/jquery-ui-1.10.4.custom.css" /&gt;
&lt;script type="text/javascript" language="javascript" src="js/jquery-1.10.2.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" language="javascript" src="js/jquery-ui-1.10.4.custom.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
$(function () {
$("#dialog-confirm").dialog({
autoOpen: false,
resizable: false,
height: 300,
modal: true,
buttons: {
"Yes": function () {
&lt;%=this.Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this.Button1))%&gt;;
$(this).dialog("close");
},
"No": function () {
$(this).dialog("close");
}
}
});
});

function Confirm() {
$("#dialog-confirm").dialog("open");
return false;
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="dialog-confirm" title="Konfirmasi Hapus Data"&gt;
&lt;p&gt;
&lt;span class="ui-icon ui-icon-alert" style="float: left; margin: 0 7px 20px 0;"&gt;&lt;/span&gt;
Apakah anda yakin data ini ingin dihapus?&lt;/p&gt;
&lt;/div&gt;
&lt;form id="form1" runat="server"&gt;
&lt;div&gt;
&lt;asp:GridView ID="GridView1" runat="server" DataKeyNames="NoInduk" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"&gt;
&lt;Columns&gt;
&lt;asp:CommandField ShowSelectButton="True" /&gt;
&lt;/Columns&gt;
&lt;/asp:GridView&gt;
&lt;/div&gt;
&lt;asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Hapus" /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
[/sourcecode]

Bila benar, setelah selesai akan tampil halaman seperti berikut saat tombol hapus ditekan :

Hasil Dialog JQuery UI

Demikian dulu tulisan dari saya, sudah malam juga ternyata,hehe….

Untuk source code, dapat diambil di link berikut :

http://www.4shared.com/zip/Hc1iFlpWba/JQueryUI.html

Mei 1

Membuat Kelas DataAccess untuk mengeksekusi Stored Procedure

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 :

Desain Tabel

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 :

Tampilan Visual Studio

Buka web.config. Disini kita akan konfigurasi pengaksesan datanya. Ubah menjadi seperti berikut :

Web Config

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 :

Hasil

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