LINQ to SQL (Part 4)

Berikutnya kita akan membahas tentang pengunaan LINQ dalam melakukan query terhadap sebuah database, untuk memudahkan pengunaan LINQ to SQL pada visual Studio 2008 diperkenalkan sebuah template LINQ to SQL Classes. Dengan template ini kita akan lebih mudah membuat object model dari sebuah table database yang akan digunakan, saat membuat template ini akan dihadirkan sebuah Layar design yang diberinama Object Relational (O/R) Deginer, pada layar ini kita dapat melakukan Drag & Drop table yang ada dari server explorer dan selanjutnya Visual Studio akan membuatkan sebuah class object model untuk kita berikut visualisasi dari class tersebut. Biar tidak terlalu banyak teori berbentuk tulisan kita coba saja langsung pengunaan template ini.

Untuk pengunaan LINQ to SQL pada visual studio 2008 telah ditambahkan sebuah template item yang bernama LINQ to SQL Classes.

LINQ SQL Classes

LINQ SQL Classes

Template item ini akan membantu kita membuat sebuah class object dari struktur database yang ada, nantinya akan kita sebut sebagai DataContext, kemudian dari DataContext ini dapat kita gunakan untuk pembacaan dengan LINQ.

Pertama buatlah sebuah project visual basic baru, kemudian tambahkan item baru dengan click kanan pada project dalam Solution explorer dan pilih ADD –> New item.

Add Item

Add Item

Dari template item yang tersedia pilih LINQ to SQL Classes, dan beri nama LINQtoSQL.dbml. kemudian click tombol ADD

Add LINQ Classes

Add LINQ Classes

Setelah proses ini kita akan mendapatkan sebuah file baru berextention .dbml pada project kita, dan juga akan muncul sebuah layar kerja Object Relational� baru seperti gambar berikut:

LINQ Object Relational designer

LINQ Object Relational designer

Pada bagian (1) kita dapat letakan table database kedalamnya, dan secara automatis VS2008 akan membuatkan sebuah class object baru dari table yang kita letakan didalamnya berikut dengan gambaran visualisasinya.

Pada bagian (2) dapat kita letakan method atau Store Procedure yang ada dari dalam database kita, nantinya kita dapat memanggil Store procedure tersebut sebagai sebuah method dalam proses pengunaannya.

Pada contoh ini saya akan mengunakan table Customers dari database Northwind dari SQL Server Express edititon yang telah terinstall di computer saya.
jika belum memiliki bisa download dari link berikut: www.microsoft.com/express

Untuk membuat class object baru, kita hanya perlu membuka panel Server Explorer kita yang telah terkonesi dengan database dan kemudian melakukan Drag and Drop data table yang akan dibuat Class objectnya dari Server Explorer (1) kedalam Area Object Relational (2). Hasil proses drag and drop akan terbentuk class object baru yang bernama DataContext (3).

LINQ 2 SQL

LINQ 2 SQL

Struktur class object DataContext� yang terbentuk pada Area Object Relational (2), akan benar-benar sama dengan struktur database yang kita drag dari Server Explorer (1).

Setelah DataContext terbentuk, maka kita dapat mengunakan class tersebut pada form kerja kita. Untuk itu sekarang cobalah buka Code editor untuk Form1 yang akan kita gunakan, kemudian tambahkan deklarasikan variable baru yang mengambil struktur dari DataContext pada bagian atas script setelah baris Public class Form1.

[javascript]
Private dc As New LINQtoSQLDataContext
[/javascript]

Catatan:
Nama dataContext dapat dilihat pada properties panel, seperti pada nomor (3) gambar diatas.

Kemudian tambahkan sebuah tombol baru kedalam form yang digunakan dan tambahkan script proses berikut kedalam event click.

[javascript]
Dim LINQ = From cust In dc.Customers _
Where cust.Country.ToLower = "germany" _
Order By cust.CompanyName _
Select cust

Dim hasil = "– Data Customer Northwind –" & vbCrLf
For Each cust In LINQ
hasil = hasil & cust.CompanyName & vbCrLf
Next

MsgBox(hasil)
[/javascript]

Baris 1,2,3,4��� : Merupakan proses LINQ yang mengambil data cust dari dalam DataContext customer yang telah kita bentuk sebelumnya pada file .dbml, proses juga melakukan filter hanya pada data2 customer yang berasal dari Germany, dan kemudian melakukan pengaturan urutan berdasarkan CompanyName.

Baris (selanjutnya)��� : Setelah selesai melakukan proses query, selanjutnya proses akan menampilkan data2 yang didapat kedalam sebuah msgbox visual basic.

Jika tidak ada masalah maka akan dihasilkan msgbox seperti gambar berikut:

hasil

hasil

Dari gambaran pengunaan diatas mudah2an proses pengunaan Class Object LINQ to SQL dengan memanfaatkan template class pada file .dbml menjadi lebih jelas.

LINQ SQL dan dataReader
Sekarang mari kita bandingkan sedikit proses yang sama dengan mengunakan Native connection mengunakan connectionString dan DataReader.

Tambahkan sebuah tombol baru kedalam form yang ada, dan pada event click tombol tersebut tuliskan script proses berikut:

[javascript]
Dim connectionStr As String
Dim cn As SqlConnection
Dim cmd As SqlCommand
Dim dr As SqlDataReader

‘ Connection String untuk connection kedalam Database Nortwind
connectionStr = "Data Source=localhost;� _
�Initial Catalog=Northwind;Integrated Security=True"
cn = New SqlConnection(connectionStr)
cn.Open()

‘ Query data Customer yang ada dalam database Nortwind
cmd=New SqlCommand("Select * from Customers where Country=’Germany’", cn)
dr = cmd.ExecuteReader

‘ Proses LINQ membaca DataReader yang telah dibuat sebelumnya
Dim LINQ = From cust In dr _
Select ID = cust.item("CustomerID"), _
Name = cust.item("CompanyName")

‘ Menampilkan data hasil query kedalam messagebox
Dim hasil = "– Data customer dari Jerman — " & vbCrLf
For Each cust In LINQ
hasil = hasil & cust.ID & " – " & cust.Name & vbCrLf
Next

MsgBox(hasil)
[/javascript]

Catatan:
Ganti terlebih dahulu ConnectionStr yang digunakan diatas dengan Connection String dimana program akan digunakan

Setelah selesai cobalah jalankan program dan click tombol yang ada didalamnya, jika tidak terdapat masalah maka akan ditampilkan semua data Customers yang berasal dari Negara Jerman seperti query yang kita lakukan.

hasil2

hasil2

Contoh diatas hanya sebagai pengenalan LINQ dalam mengakses dataReader yang telah ada, namun proses diatas terlihat tidak efisien karena kita melakukan 2 kali proses query, pertama Query untuk dataReader dan kedua query pada proses LINQ.

LINQ SQL dan DataContext
Dari 2 contoh sebelumnya kita telah mencoba membuat koneksi kedalam database memanfaatkan Template class LINQ to SQL yang telah disediakan VS2008 untuk membentuk DATACONTEXT, dan contoh kedua mengunakan koneksi yang biasa dilakukan mengunakan ConnectionString dan juga DataReader.

Contoh berikutnya kita akan mencoba mengkombinasikan kedua proses sebelumnya, kita akan membuat koneksi kedalam database mengunakan connectionString dan juga membuat sebuah object DataContext dengan menuliskan script untuk membaca isi table Customers seperti contoh2 sebelumnya

Agar dapat mengunakan dan membuat object DataContext dalam project, menambahkan Reference pengunaan System.data.linq dan juga meng-import System.Data.Linq namespace tersebut kedalam project kita.

Untuk menambahkan Referene project click kanan pada nama project dibagian Solution explorer –> add reference, kemudian cari reference untuk System.data.linq yang ingin ditambahkan.

add-reference

add-reference

Kemudian untuk mengimport namespace tersebut cukup letakan script berikut dibagian awal project kita.

[javascript]
Imports System.Data.Linq
[/javascript]

Setelah mengimport Namespace tersebut maka kita dapat membuat object DataContext dengan mengunakan script pada project kita, berikut sintaks pembuatannya mengunakan sebuah connectionString.

[javascript]
Dim connectionStr = "Data Source=localhost;� & _
�Initial Catalog=Northwind;� & _
�Integrated Security=True"
Dim Db = New DataContext(connectionStr)
[/javascript]

Setelah proses diatas kita telah memiliki sebuat object DataContext sama seperti kita membuatnya dengan mengunakan Template class SQL to LINQ pada contoh pertama, namun kali ini object yang kita buat bersifat onthefly (Virtual dan tersimpan didalam memory), kita tidak memiliki visualisasi gambar seperti contoh pertama.

Berikutnya untuk mengunakan salah satu table yang ada didalamnya kita akan memanfaatkan getTable method yang ada didalam object DataContext.
Untuk mengunakan getTable kita memerlukan struktur class dari table yang akan kita gunakan, disini kita akan memanfaatkan struktur class yang telah dibentuk dalam proses Template classes LINQ to SQL, sintaks lengkap pengunaan getTable adalah sebagai berikut:

[javascript]
Public Function GetTable(Of TEntity As Class)() As Table(Of TEntity)
[/javascript]

Dari sintaks diatas terlihat bawa function/method getTable memerlukan 1 parameter ber-type Class yang harus disertakan dalam pengunaannya, kemudian proses getTable akan mengembalikan hasil berupa data berType Table yang akan ditampung kedalam parameter class yang kita berikan.

Dari contoh kita sebelumnya kita perlu menuliskan script berikut untuk mengambil data table Customer dalam database Northwind, kemudian memampung data table kedalam format class Customer yang telah dibentuk pada file .dbml.

[javascript]
Dim Customers As Table(Of Customer) = Db.GetTable(Of Customer)()
[/javascript]

Secara lengkap penulisan script pengunaan DataContext dan juga class Customer yang telah terbentuk adalah seperti dibawah.

[javascript]

�—- Membuat object DataContext ——
Dim connectionStr = "Data Source=localhost;� & _
�Initial Catalog=Northwind;� & _
�Integrated Security=True"
Dim Db = New DataContext(connectionStr)

�—- Membaca table CUSTOMERS kedalam class Customer� ——
Dim Customers As Table(Of Customer) = Db.GetTable(Of Customer)()

�—- Melakukan query kedalam class customers table ——
Dim Query = From cust In Customers _
Where cust.Country = "germany" _
Select cust

�—- Membaca data hasil query LINQ� ——
Dim hasil = "– Data customer dari Jerman — " & vbCrLf
For Each cust In Query
hasil = hasil & cust.CustomerID & "-" & cust.Country & vbCrLf
Next
MsgBox(hasil)
[/javascript]

BINDING data LINQ kedalam Grid
Sekarang kita akan mencoba melakukan Binding data hasil proses query LINQ kedalam sebuah object Grid. Untuk mencoba proses ini buatlah sebuah project Visual Basic baru dan beri nama BINDING.

Setelah project terbentuk tambahkan sebuah template clasess LINQ to SQL kedalam project dan beri nama Customer.dbml (lihat contoh proses menambahkan class ini pada penjelasan sebelumnya).

Setelah class terbentuk dan Layar O/R kosong ditampilkan, lakukan Drag & Drop table customers dari table Northwinds kedalam layar O/R yang ada.

BINDING data LINQ kedalam Grid

BINDING data LINQ kedalam Grid

Setelah class customer terbentuk pada layar O/R, sekarang kita kembali pada form VB yang ada dan tambahkan sebuah object DataGridView kedalamnya dan beri nama oGrid.

LINQ 2 SQL

LINQ 2 SQL

Kemudian pada double click area kosong pada Form yang ada agar kita masuk kedalam layar code editor, tambahkan script berikut pada bagian atas script setelah deklarasi class form1.

[javascript]
Public dc As New CustomerDataContext()
[/javascript]

Lalu tambahkan proses berikut kedalam event Load dari form yang kita gunakan.

[javascript]
‘– Binding DataContext Customers kedalam Grid —
oGrid.DataSource = dc.customers
[/javascript]

Setelah selesai jalankan project tersebut dengan menekan tombol (F5), maka hasil pembacaan data LINQ telah ditambahkan kedalam Grid yang kita miliki seperti gambar berikut:

LINQ 2 SQL

LINQ 2 SQL

Dengan proses diatas kita telah melakukan BINDING DataContext kedalam datasource dari object Grid, semua data yang ada pada table customers akan ditampilkan pada Grid, namun� jika kita ingin melakukan filter dan sedikit manipulasi urutan index terhadap data yang akan ditampilkan kita perlu mengunakan proses LINQ seperti berikut:

[javascript]

‘– Proses pembacaan data dengan LINQ —
Dim Customers = From data In dc.Customers _
Where data.Country = "UK" _
Order By data.CompanyName _
Select data

‘– Binding data LINQ Customers kedalam Grid —
oGrid.DataSource = Customers
[/javascript]

Contoh diatas kita lakukan Filter data untuk customers yang berasal dari �UK� dan kemudian melakukan pengurutan data berdasarkan CompanyName, pada bagian terakhir kita BINDING data hasil proses LINQ kedalam DataSource object Grid.

Untuk BINDING data ini kita dapat melakukan kepada semua object yang memiliki/mendukung DataSource type didalamnya, kita dapat parsing data hasil LINQ kedalam ListBox, ComboBox dsb.

Sekian pembahasan kita tentang berkenalan dengan LINQ pada visual basic, belum semua kemapuan dari LINQ kita bahas disini. Mudah-mudahan tutorial singkat ini memberikan cukup gambaran pengunaan LINQ.

Selamat mencoba,
Happy coding.

Related Posts



Leave a Reply