0% menganggap dokumen ini bermanfaat (0 suara)
119 tayangan8 halaman

Data Changed Event Pada SQL Server 2008 R2 Dan Visual Basic

Dokumen ini memberikan penjelasan tentang cara menerima notifikasi perubahan data pada tabel SQL Server 2008 R2 menggunakan Visual Basic .NET. Secara singkat, dokumen menjelaskan bagaimana mengaktifkan Service Broker dan membuat query notification untuk menerima pemberitahuan setiap kali terjadi perubahan data, serta contoh kode untuk merefresh tampilan data secara otomatis.

Diunggah oleh

Indra Atmaja
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
119 tayangan8 halaman

Data Changed Event Pada SQL Server 2008 R2 Dan Visual Basic

Dokumen ini memberikan penjelasan tentang cara menerima notifikasi perubahan data pada tabel SQL Server 2008 R2 menggunakan Visual Basic .NET. Secara singkat, dokumen menjelaskan bagaimana mengaktifkan Service Broker dan membuat query notification untuk menerima pemberitahuan setiap kali terjadi perubahan data, serta contoh kode untuk merefresh tampilan data secara otomatis.

Diunggah oleh

Indra Atmaja
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 8

Data Changed Event

Pada SQL Server 2008 R2 dan Visual Basic .NET

Bagaimana cara menerima event bahwa ada data yang berubah pada tabel SQL Server 2008 R2?
Apakah dengan menggunakan komponen Timer dan melakukan loading data secara terus menerus?
Bukankah lebih baik loading data hanya jika terjadi perubahan pada data saja?
Yuk kita eksperimen!

Tutorial Visual Basic .NET


http://www.cyber-tech4us.tk/belajar-vbdotnet

Oleh Fahmi Noor Fiqri


Cyber Tech For Us

Creative Commons Attribution-NoDerivates 4.0 International License

Hai, sebelum kita mulai pembahasan, apa ada yang tahu maksud/arti dari Data Changed Event pada
konteks ini? Jika belum, ini adalah sedikit penjelasannya :
Data Changed Event (atau peristiwa perubahan data) adalah sebuah event atau
peristiwa perubahan data pada DBMS, entah itu INSERT, UPDATE, DELETE, ALTER,
DROP, atau perintah lainnya di eksekusi pada basis data dan menghasilkan
perubahan.
Event ini bisa diimplementasikan melalui Service Broker dengan menambahkan Queue dan Service.
Secara umum, event ini termasuk pada skema Query Notifications.
Penjelasannya sepertinya cukup, untuk keterangan lebih lanjut bisa membaca dokumentasinya di
MSDN.

Implementasi Query Notification Pada SQL Server dan VB.NET


Pada contoh ini, saya menggunakan tool sebagai berikut :
1. SQL Server 2008 R2
2. Visual Studio 2010 + .NET Framework 4.0
3. Kelas SqlDependecy.
Sesuai dengan penjelasan diatas, Query Notification diimplementasikan melalui Service Broker,
artinya, Service Broker harus diaktifkan sebelum dapat membuat Services dan Queue.

Sebelum Memulai
Ada beberapa hal yang perlu Anda perhatikan sebelum menggunakan kelas SqlDependecy dan
Service Broker, yaitu :

Kelas SqlDependecy hanya menerima Query (yang sudah berada didalam SqlCommand) yang
merupakan perintah SELECT.
Perintah SELECT TIDAK MENERIMA KARAKTER ASTERISK (*). Jadi Anda harus menyebutkan
kolom yang akan dipilih. Contoh :
SELECT * FROM dbo.[tblSiswa]

Salah

SELECT Nama, Kelas, Hobi FROM dbo.[tblSiswa]

Benar

Penulisan nama tabel juga lebih baik menggunakan format owner.TableName, seperti
pada contoh ini : dbo.[tblSiswa]. Format ini digunakan untuk mencegah adanya kekeliruan
data.
SANGAT DIANJURKAN MENGGUNAKAN STORED PROCEDURE daripada menggunakan
Query SQL langsung melalui SqlCommand. Jangan lupa set SET NOCOUNT ON;.

Tutorial Visual Basic .NET


http://www.cyber-tech4us.tk/belajar-vbdotnet

Oleh Fahmi Noor Fiqri


Cyber Tech For Us

Creative Commons Attribution-NoDerivates 4.0 International License

Pada contoh ini, kita menggunakan database dengan nama DatabasePercobaan dan tabel tblSiswa.
Untuk membuat database ini, Anda bisa menjalankan Query Transact-SQL dibawah ini :
USE [DatabasePercobaan]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblSiswa](
[Nama] [varchar](50) NULL,
[Kelas] [varchar](50) NULL,
[Hobi] [varchar](50) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO

Membuat Service dan Queue di SQL Server 2008 R2


Buat sebuah Query baru dengan cara klik New Query, kemudian masukan Query berikut :
USE DatabasePercobaan;
CREATE QUEUE qwPerubahanData;
CREATE SERVICE svcPerubahanData ON QUEUE qwPerubahanData
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [uname];
ALTER DATABASE DatabasePercobaan SET ENABLE_BROKER;

Catatan: Query yang ditulis tanpa jarak baris ditulis satu baris. Contoh :
CREATE SERVICE svcPerubahanData ON QUEUE qwPerubahanData
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

Pada Query diatas pada baris GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [uname];,
ubahlah [uname] menjadi nama pengguna pada SQL Server Anda. Tapi, jika Anda menggunakan login
bawaan dari SQL Server (misalnya sa atau menggunakan Windows Authentication), maka baris
diatas boleh dihapus, sehingga Query-nya menjadi :

Tutorial Visual Basic .NET


http://www.cyber-tech4us.tk/belajar-vbdotnet

Oleh Fahmi Noor Fiqri


Cyber Tech For Us

Creative Commons Attribution-NoDerivates 4.0 International License

USE DatabasePercobaan;
CREATE QUEUE qwPerubahanData;
CREATE SERVICE svcPerubahanData ON QUEUE qwPerubahanData
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
ALTER DATABASE DatabasePercobaan SET ENABLE_BROKER;

Jika sudah selesai memasukan Query-nya di Query


Editor, klik Execute! Untuk menjalankan Query.
Catatan: Query diatas membutuhkan waktu yang
agak lama untuk di eksekusi. Pada percobaan saya,
Query ini butuh waktu 8 menit waktu eksekusi.
Jika Query-nya sudah selesai di eksekusi dan tidak
terjadi kesalahan, maka pada Object Browser akan
menampilkan masing masing sebuah Service dan
Queue.
Sampai disini, pengaturan pada SQL Server sudah
selesai. Sekarang hanya tinggal melanjutkan untuk
membuat kode pada proyek Visual Basic .NET.

Membuat Proyek di Visual Studio 2010


Buat proyek seperti biasa di Visual Studio, kemudian tambahkan sebuah form lagi. Disini
dicontohkan 2 form yaitu frmUtama dan frmTampilData.
frmTampilData
frmTambahData

Digunakan untuk menampilkan data dari SQL Server.


Digunakan untuk input data ke SQL Server.

Tutorial Visual Basic .NET


http://www.cyber-tech4us.tk/belajar-vbdotnet

Oleh Fahmi Noor Fiqri


Cyber Tech For Us

Creative Commons Attribution-NoDerivates 4.0 International License

Algoritma Program
Sebelmum memulai menulis kode program, kita harus merencanakan algoritma pemrogramannya
terlebih dahulu.
1. Buat sebuah form untuk menampilkan data dan menerima event dari SQL Server.
2. Buat prosedur untuk menginisialisasi kelas SqlDependecy dan load data dari database.
3. Karena kelas SqlDependecy hanya akan fire event OnChange sekali, jadi, prosedur diatas
harus diulang dan reset Event Handler untuk objek SqlDependecy yang lama.
4. Setelah diatas menjelaskan logika untuk memonitor perubahan data, maka kita juga harus
membuat logika untuk melakukan perintah CRUD yang lain pada database (disini contohnya
hanya INSERT).
5. Untuk logika menambahkan record pada database pasti Anda sudah mengerti.

Merancang Form Tampil Data (frmTampilData)


1. Tambahkan sebuah DataGridView dan sebuah Button.
2. Atur dan tata kontrol diatas seperti ini :

3. Kemudian tambahkan kode dibawah ini :


Imports System.Data.SqlClient
Public Class frmTampilData
Private SQL_Event As SqlDependency
Private Sub frmTampilData_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
'Sebelum menutup form, maka SqlDependecy harus di hentikan terlebih
dahulu.
SqlDependency.Stop(cs)
End Sub
Private Sub frmTampilData_Shown(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Shown
'Load data dari SQL Server dan mulai prosedur Query Notification.
CekDataBaru()
End Sub
Private Sub CekDataBaru()
If Not CekHakAkses() Then
'Jika kode ini diakses lewat User yang tidak memiliki hak akses,
'maka kode dibawah ini akan batal di eksekusi.

Tutorial Visual Basic .NET


http://www.cyber-tech4us.tk/belajar-vbdotnet

Oleh Fahmi Noor Fiqri


Cyber Tech For Us

Creative Commons Attribution-NoDerivates 4.0 International License

Return
End If
'Perintah Stop dan Start digunakan untuk Reset SqlDependecy.
SqlDependency.Stop(cs)
SqlDependency.Start(cs)
'Buat sebuah koneksi ke SQL Server
Dim cn As New SqlConnection(cs)
cn.Open()
'Buat perintah SELECT untuk dieksekusi saat
'terjadi perubahan data.
Dim cmd As SqlCommand = cn.CreateCommand
cmd.CommandType = CommandType.Text
cmd.CommandText = "SELECT Nama, Kelas, Hobi FROM dbo.[tblSiswa]"
cmd.Notification = Nothing 'Harus di set ke Nothing
'Buat ulang instance SqlDependecy, karena kelas ini
'hanya dapat melakukan event sekali.
SQL_Event = New SqlDependency(cmd)
AddHandler SQL_Event.OnChange, AddressOf SQL_DataChanged 'Buat Event
Handler
'Masukan data dari SQL Server
Dim dt As New DataTable
dt.Load(cmd.ExecuteReader)
DataGridView1.DataSource = dt
'Release semua memory.
cn.Dispose()
cmd.Dispose()
End Sub
Private Sub SQL_DataChanged(ByVal sender As Object, ByVal e As
SqlNotificationEventArgs)
'Karena SqlDependecy menggunakan Asynchronious Processing,
'jadi harus ditambahkan pengecekan Safe Cross-Thread.
If Me.InvokeRequired Then
'Jika membutuhkan Invoke, lakukan Invoke.
DataGridView1.BeginInvoke(New MethodInvoker(AddressOf CekDataBaru))
Else
'Jika tidak dibutuhkan Invoke, langsung saja panggil prosedur diatas.
CekDataBaru()
End If
'Karena SqlDependecy hanya bisa melakukan satu kali Event,
'jadi kita perlu melepaskan Event Handler dan mengulang
'proses membuat Event Handler (melalui prosedur CekDataaBaru().
Dim ev As SqlDependency = DirectCast(sender, SqlDependency)
RemoveHandler ev.OnChange, AddressOf SQL_DataChanged
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'Tampilkan form tambah data.
frmTambahData.Show()
End Sub
End Class

Tutorial Visual Basic .NET


http://www.cyber-tech4us.tk/belajar-vbdotnet

Oleh Fahmi Noor Fiqri


Cyber Tech For Us

Creative Commons Attribution-NoDerivates 4.0 International License

Merancang Form Tambah Data (frmTambahData)


1. Tambahkan 3 Label, 3 TextBox dan sebuah Button.
2. Tata dan atur kontrol tadi seperti ini :

3. Ketikan kode dibawah ini :


Imports System.Data.SqlClient
Public Class frmTambahData
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'Asumsi saya bahwa Anda pasti sudah mengetahui fungsi kode ini :D
Dim cn As New SqlConnection(cs)
cn.Open()
Dim cmd As SqlCommand = cn.CreateCommand
cmd.CommandType = CommandType.Text
cmd.CommandText = "INSERT INTO tblSiswa VALUES('" & TextBox1.Text & "','"
& TextBox2.Text & "','" & TextBox3.Text & "')"
cmd.ExecuteNonQuery()
cn.Dispose()
cmd.Dispose()
End Sub
End Class

Membuat Modul Fungsi (modFungsi)


Modul ini berungsi untuk menampung sebuah fungsi dan deklarasi variabel untuk Connection String.
Buat modul dengan kode ini :
Imports System.Data.SqlClient
Module modFungsi
Friend Function CekHakAkses() As Boolean
Try
Dim cp As New
SqlClientPermission(Security.Permissions.PermissionState.Unrestricted)
cp.Demand()
Return True
Catch ex As Exception
Return False

Tutorial Visual Basic .NET


http://www.cyber-tech4us.tk/belajar-vbdotnet

Oleh Fahmi Noor Fiqri


Cyber Tech For Us

Creative Commons Attribution-NoDerivates 4.0 International License

End Try
End Function
Friend cs As String = "Server=MUZCOM_PCPC\SQLEXPRESS;Database=DatabasePercobaan;User Id=sa;Password=fahminlb33"
End Module

Anda harus mengubah nilai variabel cs ke Connection String yang cocok pada komputer Anda
masing-masing.

Debug / Run Program


Sekarang coba Anda jalankan / Debug proyek Anda. Jika Anda klik tombol Tambahkan Data dan
menginputkan data, maka secara otomatis DataGridView akan langsung di re-load datanya.
Kunjungi alamat YouTube ini jika Anda ingin melihat tayangan Live Action-nya :
http://youtu.be/CIAuWSoJYqk

Penutup
Karena sekarang sudah tahu bagaimana cara menggunakan SqlDependecy, semoga bisa bermanfaat
bagi Anda semua.
Keuntungan yang sudah terbukti dengan menggunakan SqlClient :
1. Lower CPU usage, yap! Sudah pasti. Khususnya pada pihak server. Kenapa? Proses load data
hanya terjadi jika ada perubahan data. Jadi tidak memerlukan Timer untuk load data pada
interval tertentu.
2. More performance, karena program kita tidak perlu melakukan loading data setiap saat.
3. Safe your Bandwidth! Menghemat Bandwidth server karena? Yah, masih belum tau? :P
Jangan lupa lihat batasan SqlDependecy di MSDN!
Kode di form tampilan data bisa dipakai di proyek Anda dengan hanya mengubah Query SQL pada
SqlCommand untuk mengambil data dari tabel yang Anda inginkan.
Kirimkan kritik dan saran ke : [email protected] atau ke www.facebook.com/fahmi.noorfiqri.

Tutorial Visual Basic .NET


http://www.cyber-tech4us.tk/belajar-vbdotnet

Oleh Fahmi Noor Fiqri


Cyber Tech For Us

Creative Commons Attribution-NoDerivates 4.0 International License

Anda mungkin juga menyukai