teknologi data access

25
Teknik Informatika-Program Profesional 2 dan 3-ADO.NET 1 Pertemuan 2-3 Teknologi Akses Data ADO.NET Tujuan : Setelah mengikuti sesi ini, mahasiswa mampu Memahami ADO.NET dan arsitekturnya Memahami beberapa data provider dalam NET Framework Memahami dan menggunakan class command dan connection Memahami dan menggunakan class DataAdapter dan DataReader Memahami dan menggunakan class DataSet dan DataTable Estimasi waktu penyajian : 40 menit Abstraksi ADO.NET Dalam pertemuan sebelumnya telah dijelaskan bahwa transfer data dari database ke aplikasi dan seba- liknya tidak bisa secara langsung dilakukan, harus menggunakan teknik khusus untuk melakukannya. Teknologi yang menjadi mediator antara aplikasi kita dan database dinamakan teknologi akses data (data access technology). ADO.NET merupakan salah satu teknologi akses data andalan microsoft yang terintegrasi dalam NET. Framework. ADO.NET menyediakan class yang diperlukan untuk koneksi ke database, pengambilan dan manipulasi data di database. Class-class dalam ADO.NET terdapat dibawah namespace System.Data. ADO.NET terbagi dalam 3 komponen, yaitu : Data Provider DataSet DataTable Class DataSet dan DataTable terletak dibawah namespace System.Data, sedangkan class Data Provider terletak dibawah namespace yang berbeda, tergantung tipe Data Provider. Data Provider berisi 4 class, yaitu Connection, Command, DataAdapter dan DataReader. Empat class ini dapat digunakan untuk : 1. Membentuk koneksi antara aplikasi dan database dengan menggunakan object Connection 2. Mengeksekusi query untuk mengambil, manipulasi dan update data dengan menggunakan object Command 3. Memindah data dari database ke DataSet dengan menggunakan object DataAdapter 4. Melakukan query data dari database (read-only) dengan menggunakan object DataReader Class DataSet dapat dipandang sebagai table container dan dapat memuat banyak DataTable. Kumpulan DataTable ini merupakan pemetaan dari tabel data yang sesungguhnya dalam database. Arsitektur ADO.NET Secara logika, arsitektur ADO.NET dapat dibagi dalam 2 potongan besar: eksekusi perintah (command execution) dan penampungan (caching). Command Execution memerlukan fitur seperti konektifitas, eksekusi, dan pembacaan hasil. Fitur-fitur ini tercakup dalam Data Provider ADO.NET; sedangkan caching hasil di-handle oleh DataSet.

Upload: baskarajoz

Post on 21-Oct-2015

98 views

Category:

Documents


5 download

DESCRIPTION

teknologi data acces

TRANSCRIPT

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

1

Pertemuan 2-3

Teknologi Akses Data ADO.NET Tujuan : Setelah mengikuti sesi ini, mahasiswa mampu

Memahami ADO.NET dan arsitekturnya

Memahami beberapa data provider dalam NET Framework

Memahami dan menggunakan class command dan connection

Memahami dan menggunakan class DataAdapter dan DataReader

Memahami dan menggunakan class DataSet dan DataTable Estimasi waktu penyajian : 40 menit

Abstraksi ADO.NET Dalam pertemuan sebelumnya telah dijelaskan bahwa transfer data dari database ke aplikasi dan seba-liknya tidak bisa secara langsung dilakukan, harus menggunakan teknik khusus untuk melakukannya. Teknologi yang menjadi mediator antara aplikasi kita dan database dinamakan teknologi akses data (data access technology).

ADO.NET merupakan salah satu teknologi akses data andalan microsoft yang terintegrasi dalam NET. Framework. ADO.NET menyediakan class yang diperlukan untuk koneksi ke database, pengambilan dan manipulasi data di database. Class-class dalam ADO.NET terdapat dibawah namespace System.Data.

ADO.NET terbagi dalam 3 komponen, yaitu :

Data Provider

DataSet

DataTable

Class DataSet dan DataTable terletak dibawah namespace System.Data, sedangkan class Data Provider terletak dibawah namespace yang berbeda, tergantung tipe Data Provider.

Data Provider berisi 4 class, yaitu Connection, Command, DataAdapter dan DataReader. Empat class ini dapat digunakan untuk :

1. Membentuk koneksi antara aplikasi dan database dengan menggunakan object Connection 2. Mengeksekusi query untuk mengambil, manipulasi dan update data dengan menggunakan

object Command 3. Memindah data dari database ke DataSet dengan menggunakan object DataAdapter 4. Melakukan query data dari database (read-only) dengan menggunakan object DataReader

Class DataSet dapat dipandang sebagai table container dan dapat memuat banyak DataTable. Kumpulan DataTable ini merupakan pemetaan dari tabel data yang sesungguhnya dalam database.

Arsitektur ADO.NET Secara logika, arsitektur ADO.NET dapat dibagi dalam 2 potongan besar: eksekusi perintah (command execution) dan penampungan (caching).

Command Execution memerlukan fitur seperti konektifitas, eksekusi, dan pembacaan hasil. Fitur-fitur ini tercakup dalam Data Provider ADO.NET; sedangkan caching hasil di-handle oleh DataSet.

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

2

Data Provider memungkinkan adanya konektifitas dan eksekusi command ke suatu sumber data (data source). Data source tidak harus database relasional. Apabila suatu command telah dieksekusi, hasilnya dapat dibaca dengan menggunakan suatu DataReader. Pembacaan hasil yang dilakukan DataReader bersifat forward-only, sehingga cukup efisien.

Selain itu, hasil juga bisa ditampilkan dalam DataSet dari suatu DataAdapter; proses pengisian hasil ke DataSet dalam suatu DataAdapter sering dikenal sebagai "filing DataSet".

Gambar 2-1 menunjukkan diagram umum dari arsitektur ADO.NET.

Gambar 2-1 Arsitektur umum ADO.NET

Dalam arsitektur pada gambar 2-1 di atas, kumpulan DataTable disertakan dalam DataSet sebagai suatu DataTable-Collection, dan transaksi data antara DataSet dan Data Provider (seperti SELECT, INSERT, UPDATE dan DELETE) dibentuk menggunakan DataAdapter melalui empat method-nya : SelectCommand, Insert-Command, UpdateCommand, dan DeleteCommand. Object Connection hanya digunakan untuk mem-bentuk koneksi antara database dan aplikasi. Object DataReader tidak digunakan dalam arsitektur ini.

Diagram arsitektur ADO.NET yang lain disajikan dalam Gambar 2-2.

Gambar 2-2 Arsitektur ADO.NET yang lain

Dalam arsitektur pada gambar 2-2 diatas, kumpulan DataTable tidak disertakan dalam DataSet, tetapi dinyatakan sebagai kumpulan DataTable yang berdiri sendiri, dan setiap tabel dipandang sebagai object DataTable individual. Transaksi data antara Data Provider dan DataTable dilakukan melalui eksekusi method dalam object Command berdasarkan parameter yang tersedia. Method ExecuteReader() dalam

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

3

object Command dipanggil jika dilakukan pengambilan data (eksekusi statement SELECT) dari database, dan hasilnya disimpan dalam object DataReader. Pada saat dilakukan operasi pengaksesan data seperti INSERT, UPDATE, dan DELETE, maka method ExecuteNonQuery() dalam object Command dipanggil dengan menyertakan parameter yang diperlukan.

Komponen ADO.NET Telah dijelaskan bahwa ADO.NET terdiri dari 3 komponen utama : Data Provider, DataSet, DataTable. Kita akan membahas per komponen.

Data Provider Data Provider disebut juga Data Driver dan dapat digunakan sebagai komponen utama dalam aplikasi data-driven. Fungsi Data Provider sesuai dengan namanya, yaitu :

menghubungkan data source dengan aplikasi

mengeksekusi method untuk melakukan operasi pengambilan dan pengaksesan data antara data source dan aplikasi

memutus koneksi (disconnect) data source saat operasi data selesai dilakukan

Data Provider secara fisik tersusun dari file binary library, dan library ini berbentuk file DLL. Berdasarkan jenis database yang berbeda, Data Provider dapat memiliki beberapa versi dan setiap versi disesuaikan dengan tiap jenis database. Data Provider yang populer antara lain :

Open DataBase Connectivity (Odbc) Data Provider (ODBC.NET)

Object Linking and Embedding DataBase (OleDb) Data Provider (OLEDB.NET)

SQL Server (Sql) Data Provider (SQL Server.NET)

Oracle (Oracle) Data Provider (Oracle.NET)

Data Provider terletak dalam namespace yang berbeda sesuai dengan jenisnya. Namespace ini berisi berbagai class data yang harus di import ke dalam kode jika kita ingin menggunakannya dalam project. Tabel 2-1 mendaftar beberapa namespace Data Provider, DataSet dan DataTable yang populer :

Namespace Deskripsi System.Data Menampung class DataSet dan DataTable

System.Data.OleDb Menampung kumpulan class yang digunakan untuk mengakses data source OLEDB

System.Data.SqlClient Menampung kumpulan class yang digunakan untuk mengakses data source SQL Server 7.0 atau versi diatasnya.

System.Data.Odbc Menampung kumpulan class yang digunakan untuk mengakses data source ODBC

System.Data.OracleClient Menampung kumpulan class yang digunakan untuk mengakses data source Oracle

Tabel 2-1 Namespace beberapa Data Provider

Semua class yang disediakan oleh Data Provider diawali dengan keyword yang sesuai, seperti OleDb-Connection, OleDbCommand, dan OleDbDataAdapter, OleDbDataReader. Untuk menggunakan Data Provider OLEDB.NET kita harus "Imports System.Data.OleDb". Hal yang sama berlaku untuk Data Provi-der yang lain.

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

4

Data Provider ODBC.NET

Data Provider ODBC.NET menyediakan akses ke data source ODBC. Beberapa Data Provider yang di support oleh ODBC.NET adalah:

SQLServer

Microsoft ODBC untuk Oracle

Microsoft Access Driver (*.mdb)

Data Provider OLEDB.NET

Data Provider OLEDB.NET menyediakan akses ke data source OLEDB. Beberapa Data Provider yang didukung oleh OLEDB.NET adalah :

Microsoft Acess

SQL Server (7.0 atau versi diatasnya)

Oracle (9i atau versi diatasnya)

Satu keuntungan Data Provider OLEDB.NET adalah memungkinkan user mengembangkan aplikasi data-driven generic, artinya user dapat menggunakan Data Provider OLEDB.NET untuk mengakses setiap data source seperti Microsoft Access, SQL Server, Oracle atau data source lain yang support OLEDB. Tabel 2-2 menunjukkan compatibility antara Data Provider OLEDB dan Data Provider OLEDB.NET.

Nama Provider Deskripsi SQLOLEDB Digunakan untuk Microsoft SQL Server 6.5 atau versi sebelumnya

Microsoft.Jet.OLEDB.4.0 Digunakan untuk Microsoft JET database (Microsoft Access)

MSDAORA Digunakan untuk Oracle versi 7 atau diatasnya

Tabel 2-2 Namespace beberapa Data Provider

Data Provider SQL Server.NET

Data Provider ini menyediakan akses ke database SQL Server versi 7 atau diatasnya dengan mengguna-kan protocol internal. Walaupun Microsoft menyediakan beberapa Data Provider (seperti OLEDB dan ODBC) untuk mengakses data ke database SQL Server, namun untuk operasi data yang optimal sangat dianjurkan menggunakan data provider SQL Server. Gambar 2-3 menunjukkan perbedaan data provider OLEDB dan SQL Server dalam mengakses database SQL Server.

Gambar 2-3 Diagram perbedaan antara data provider OLEDB dan SQL Server

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

5

Data Provider Oracle.NET

Data Provider ini merupakan komponen add-on ke NET.Framework yang menyediakan akses ke data-base Oracle. Untuk menggunakan Data Provider ini perlu di install Oracle Client Software di komputer.

Microsoft menyediakan beberapa cara untuk mengakses data dalam database Oracle, seperti Microsoft ODBC untuk Oracle dan OLEDB, tetapi dianjurkan menggunakan Data Provider Oracle karena menyedia-kan cara yang paling efisien untuk mengakses database Oracle.

Class Connection Data Provider berisi empat class, salah satunya Connection. Class Connection menyediakan koneksi antara aplikasi dan database. Untuk menggunakan class Connection, harus di create instance atau object dari class ini (dengan keyword New). Object Connection yang digunakan tergantung pada data source yang kita pakai. Data Provider menyediakan empat class Connection yang berbeda, dan masing-masing hanya cocok untuk database tertentu. Tabel 2-3 menyajikan class Connection dan Database yang sesuai.

Class Connection Database OdbcConnection ODBC Data Source

OleDbConnection OLEDB Database

SqlConnection SQL Server Database

OracleConnection Oracle Database

Tabel 2-3 Class Connection dan Database yang sesuai.

Parameter dalam Connection

Class Connection memiliki dua constructor (overloaded constructor), yaitu constructor tanpa paramater dan constructor ber-paramater. Constructor kedua menerima argumen bertipe string, yang berisi 5 parameter untuk mendefinisikan suatu koneksi, seperti disajikan dalam Tabel 2-4. Parameter dalam constructor object connection dikemas dalam nilai property ConnectionString dari object Connection:

Parameter Deskripsi Provider driver yang digunakan untuk komunikasi dengan database

Data Source nama komputer dimana database berada. Jika database server memiliki nama instance, maka ditulis setelah nama komputer dan dipisahkan dengan tanda "\". Contoh PNB\SQL2005. Jika digunakan Microsoft database access, ditulis lokasi file beserta nama file .mdb nya.

Database nama database

User ID untuk menetapkan username login credential

Password untuk menetapkan password login credential

Integrated Security mengindikasikan bahwa pengaksesan database menggunakan windows authentication. Biasanya diisi SSPI (Security Support Provider Interface)

Tabel 2-4 Parameter yang umum digunakan dalam property ConnectionString class Connection

Connection string dalam object Connection

Connection string untuk Data Provider OLEDB dengan database Microsoft Access:

Dim conn As New OleDbConnection

conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=C:\Database\Northwind.mdb;" & _

"User ID=MyUserID;" & _ "Password=MyPassword"

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

6

atau Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=C:\Database\Northwind.mdb;" & _ "User ID=MyUserID;" & _ "Password=MyPassword")

atau Dim koneksi As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=C:\Database\Northwind.mdb;" & _

"User ID=MyUserID;" & _

"Password=MyPassword" Dim conn As New OleDbConnection(koneksi)

atau Dim koneksi As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=C:\Database\Northwind.mdb;" & _

"User ID=MyUserID;" & _

"Password=MyPassword"

Using conn As New OleDbConnection(koneksi)

'kode disini

End Using

Connection string untuk Data Provider SQL Server dengan database SQL Server: Dim koneksi As String = "Data Source=PNB\SQL2005;" & _

"Database=Northwind;" & _

"User ID=MyUserID;" & _ "Password=MyPassword"

Using conn As New SqlConnection(koneksi)

'kode disini

End Using

PNB\SQL2005 menunjukkan nama komputer PNB dan nama instance database server. Cara pendekla-rasian connection string lainnya sama dengan deklarasi connection string Data Provider OLEDB sebelum-nya. Connection string untuk Data Provider Oracle dengan database Oracle: Dim koneksi As String = "Data Source=PNB\MyOracle;" & _

"User ID=MyUserID;" & _ "Password=MyPassword"

Using conn As New OracleConnection(koneksi)

'kode disini

End Using

Method Open() class Connection

Untuk membuat koneksi antara database dan aplikasi, harus dipanggil method Open() dari class Connection. Method ini digunakan untuk membuka koneksi ke sumber data dengan pengatruan yang

telah ditetapkan dalam property ConnectionString. Contoh penggunaan method Open() class Connect-ion :

Dim koneksi As String = "Data Source=PNB\SQL2005;" & _

"Database=Northwind;" & _

"User ID=MyUserID;" & _ "Password=MyPassword"

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

7

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

Catch ex As SqlClient.SqlException

Throw ex

Catch ex As Exception

Throw ex

End Try

End Using

Method Close() class Connection

Method Close() merupakan partner dari method Open() dan digunakan untuk menutup koneksi antara database dan aplikasi, setelah selesai melakukan operasi database menggunakan sumber data. Kita sebaiknya menutup setiap object connection yang terhubung ke sumber data setelah selesai mela-kukan akses data ke sumber data tersebut, jika tidak akan terjadi error saat kita mencoba membuka connection di project kita.

Penutupan koneksi dilakukan dalam seksi Finally dari block Try…Catch, karena suatu proses entah itu gagal atau berhasil akan tetap menjalankan kode dalam seksi Finally. Contoh penggunaan method Close() class Connection:

Dim koneksi As String = "Data Source=PNB\SQL2005;" & _

"Database=Northwind;" & _

"User ID=MyUserID;" & _ "Password=MyPassword"

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

Catch ex As SqlClient.SqlException

Throw ex

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

End Try

End Using

Method Dispose() class Connection

Method Dispose() class Connection digunakan untuk me-release resource yang digunakan oleh

object Connection. Kita perlu memanggil method ini setelah method Close() di eksekusi untuk melakukan pekerjaan pembersihan, yaitu me-release semua resource yang digunakan obejct Connection saat mengakses data ke sumber data. Setelah method Close() dan Dispose() dieksekusi, kita

dapat me-release referensi ke object Connection dengan setting object ke Nothing

conn.Close()

conn.Dispose()

conn = Nothing

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

8

Class Command Object command digunakan untuk mengeksekusi perintah SQL yang ditujukan ke database. Semua pengaksesan dan operasi data antara sumber data dan aplikasi tercapai melalui eksekusi object Command dengan sekumpulan parameter.

Class Command dibagi dalam beberapa kategori tergantung pada data provider-nya. Setiap class Command diidentifikasi dari prefix-nya, seperti OleDbCommand, SqlCommand, OdbcCommand, Oracle-Command. Walaupun berbeda data provider, namun pada dasarnya setiap class Command memiliki property dan method yang sama, serta fungsionalitas yang sama.

Object Command memiliki dua peranan berbeda saat digunakan untuk melakukan query atau manipu-lasi data, tergantung pada arsitektur ADO.NET yang digunakan. Pada gambar 2-1, jika DataAdapter dimanfaatkan untuk melakukan query data dan semua DataTable dikemas dalam DataSet sebagai unit penampung data, maka object Command dikemas dalam method-method milik DataAdapter yaitu SelectCommand, InsertCommand, UpdateCommand dan DeleteCommand, dan dieksekusi berdasarkan tipe query-nya. Dalam kasus ini, object Command dapat dieksekusi secara tidak langsung, artinya kita tidak perlu menggunakan method execute (misal ExecuteNonQuery, ExecuteScalar) dalam object Command secara langsung; sebagai gantinya kita dapat menjalankannya dengan mengeksekusi method yang sesuai dalam DataAdapter.

Dalam gambar 2-2, setiap DataTable dapat dipandang sebagai tabel individu. Object Command dapat dieksekusi secara langsung berdasarkan koleksi parameter didalamnya yang dibuat dan di-inisialisasi oleh user.

Pada intinya, jika kita menggunakan object Command, maka harus menginisialisasi object Command dengan penetapan nilai property yang sesuai, dan jika diperlukan kita membuat dan menetapkan parameter dalam object Command untuk dapat mengakses sumber data. Beberapa property class Command yang populer di jelaskan di bawah.

Property dan Constructor Class Command

Class Command memiliki lebih dari sepuluh property, tetapi hanya 4 yang biasa digunakan dalam aplikasi, yaitu :

Property Connection : digunakan untuk memegang object Connection yang valid, dan object Command dieksekusi berdasarkan object Connection.

Property CommandType : digunakan untuk mengindikasikan jenis command yang tersimpan dalam property CommandText. Ada 3 nilai CommandType, yaitu : TableDirect, Text,

dan StoredProcedured. Nilai default-nya Text.

Property CommandText : isi property ini ditentukan melalui property CommandType

CommandType CommandText

TableDirect nama tabel (seperti "customers")

Text perintah SQL, misal "SELECT CompanyName FROM Customers"

StoredProcedure nama stored procedure di DBMS yang digunakan

Tabel 2-5 Daftar nilai property CommandType dan CommandText yang sesuai

Property Parameters : digunakan untuk memegang collection dari object parameter. Diperlukan jika ada parameter yang diperlukan dalam property CommandText.

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

9

Class Command memiliki empat constructor, yaitu :

Dim cm As New SqlCommand()

Dim cm As New SqlCommand(commandText)

Dim cm As New SqlCommand(commandText, sqlconnection)

Dim cm As New SqlCommand(commandText, sqlconnection, sqltransaction)

Penggunaan Class Command

Contoh menggunakan SQL Server .NET Data Provider Penggunaan class Command dengan constructor tanpa parameter

Dim commandString As String= "SELECT * FROM Customers"

Dim cm As New SqlCommand

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= commandString

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Penggunaan class Command dengan constructor ber-paramater commandText

Dim commandString As String= "SELECT * FROM Customers"

Dim cm As New SqlCommand(commandString)

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Penggunaan class Command dengan constructor ber-paramater commandText dan sqlConnection

Dim commandString As String= "SELECT * FROM Customers"

Dim cm As SqlCommand

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm = New SqlCommand(commandString, conn)

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

10

conn.Dispose()

End Try

End Using

Penggunaan class Command dengan constructor ber-paramater commandText, sqlConnection, sqlTransaction

Dim commandString As String= "DELETE FROM [Order Details];DELETE FROM Customers" Dim cm As SqlCommand

Dim tr As SqlTransaction

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

tr = cn.BeginTransaction

cm = New SqlCommand(commandString, conn, tr)

'kode disini

tr.Commit()

Catch ex As Exception

tr.Rollback()

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Contoh terakhir penggunaan class Command dengan constructor yang memuat parameter object Transaction hanya digunakan apabila diperlukan mengemas beberapa proses (misal proses pengubahan data ke beberapa tabel) dalam satu transaksi. Suatu transaksi yang berhasil, maka transaksi akan di Commit. Jika ada proses yang gagal dalam suatu transaksi, maka semua proses yang terjadi dalam transaksi akan di Rollback.

Class Parameter

Class Parameter merupakan class yang digunakan untuk mengemas suatu parameter, dimana object parameter ini dikirim ke object command. Class parameter hanya digunakan apabila nilai property CommandText class Command membutuhkan parameter, artinya pengambilan data ke database memerlukan kriteria pengambilan. Biasanya jika ada klausa WHERE dalam property CommandText, maka kita memerlukan class Parameter. Banyaknya object Parameter sesuai dengan banyaknya parame-ter dalam property CommandText.

Data yang tersimpan dalam object Parameter antara lain, nama parameter, nilai parameter, tipe data yang terkandung dalam parameter, dan ukuran dari tipe data dalam parameter tersebut.

Object command memiliki property Parameters yang anggotanya terdiri dari kumpulan object Parameter. Object Command menyimpan parameter ke dalam property Parameters.

Property dan Constructor Class Parameter

Class Parameter memiliki beberapa property yang cukup populer dan sering diatur nilainya untuk menetapkan suatu parameter, yaitu :

ParameterName : property bertipe string yang berisi nama parameter terpilih

Value : property bertipe object yang berisi nilai parameter terpilih

DbType : enumerasi yang digunakan untuk mendefinisikan tipe data parameter dengan nilai default String. DbType merupakan tipe data yang digunakan ADO.NET sesuai dengan data

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

11

provider-nya. Tipe data dalam ADO.NET antara lain SqlDbType, OleDbType, OdbcType, OracleType.

Class Parameter memiliki tujuh constructor, namun yang sering kita gunakan dua constructor (digunakan contoh SQL Server Data Provider), yaitu:

Dim sqlParameter As New SqlParameter()

Dim sqlParameter As New SqlParameter(nama_parameter, nilai_parameter)

Penggunaan Class Parameter

Contoh penggunaan class Parameter dengan menggunakan SQL Server .NET Data Provider. Penggunaan class Parameter dengan constructor tanpa parameter

Dim commandString As String= "SELECT * FROM Customers WHERE CustomerID=@ID"

Dim cm As New SqlCommand

Dim prm As New SqlParameter

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

prm.ParameterName="@ID"

prm.Value="ALFKI" 'ALFKI contoh nilai parameter

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= commandString

cm.Parameters.Add(prm)

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Penggunaan class Parameter dengan constructor yang memuat nama dan nilai parameter

Dim commandString = "SELECT * FROM Customers " & _

"WHERE Country=@Country AND ContactTitle=@Ownr"

Dim cm As New SqlCommand

Dim prmCountry As New SqlParameter("@Country","USA")

Dim prmOwner As New SqlParameter("@Ownr","Owner")

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= commandString

cm.Parameters.Add(prmCountry)

cm.Parameters.Add(prmOwner)

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

12

Sering kali programmer tidak membuat instance secara langsung dari class Parameter, tetapi dengan

cara menambahkan nama parameter dan nilai parameter langsung ke property Parameters.Add-WithValue dari class command. Contoh penggunaan class Command dengan menambahkan object Parameter ke property Parameters di sajikan di bawah :

Dim commandString = "SELECT * FROM Customers " & _

"WHERE Country=@Country AND ContactTitle=@Ownr"

Dim cm As New SqlCommand

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= commandString

cm.Parameters.AddWithValue("@Country","USA")

cm.Parameters.AddWithValue("@Ownr","Owner")

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Method Class Command

Di atas telah dijelaskan cara membuat dan mengatur property dalam object Command serta cara mem-bungkus object Parameter dan memasukkannya ke dalam property Parameters dari object Command. Langkah tersebut baru merupakan prasyarat yang diperlukan untuk mengeksekusi object Command. Eksekusi object Command yang sesungguhnya adalah menjalankan salah satu method class Command untuk melakukan tugas pengambilan data. Empat method class Command yang sering digunakan dalam aplikasi database adalah : ExecuteReader, ExecuteScalar, ExecuteNonQuery dan ExecuteXmlReader (khusus SqlCommand).

Method ExecuteReader

Method merupakan method query data dan hanya digunakan untuk mengeksekusi operasi pembacaan data dari database. Data hasil eksekusi method ExecuteReader ditampung dalam object DataReader. Ingat, object DataReader merupakan object yang read-only dan hanya dapat digunakan sebagai penam-pung data. Kita tidak dapat melakukan updating data dengan menggunakan DataReader. Contoh potongan program menggunakan method ExecuteReader disajikan di bawah :

Dim commandString = "SELECT * FROM Customers"

Dim cm As New SqlCommand

Dim dr As SqlDataReader

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= commandString

dr=cm.ExecuteReader

Catch ex As Exception

Throw ex

Finnaly

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

13

conn.Close()

conn.Dispose()

End Try

End Using

Method ExecuteScalar

Method ExecuteScalar digunakan untuk mengambil nilai tunggal dari database, artinya data yang terdiri dari 1 baris dan 1 kolom. Data yang dihasilkan oleh method ini bertipe Object. Method ini lebih cepat dibanding method ExecuteReader. Contoh potongan program penggunaan method ExecuteScalar disaji-kan di bawah :

Dim commandString = "SELECT password FROM Users WHERE username='chris'"

Dim cm As New SqlCommand

Dim pwd As String

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= commandString

pwd=CType(cm.ExecuteScalar, String)

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Method ExecuteNonQuery

Jika untuk mengeksekusi SQL statement SELECT digunakan mehtod ExecuteReader, maka method ExecuteNonQuery digunakan untuk mengeksekusi SQL statement seperti INSERT, UPDATE atau DELETE. Contoh potongan program penggunaan method ExecuteNonQuery disajikan di bawah :

Dim cmdString1 = "INSERT INTO Users (username,password) VALUES ('chris','3528')" Dim cmdString2 = "DELETE FROM Users WHERE username = 'steven'" Dim cm As New SqlCommand

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= cmdString1

cm.ExecuteNonQuery

cm.CommandText= cmdString2

cm.ExecuteNonQuery

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

14

Perhatikan potongan kode di atas, satu object Command bisa digunakan untuk mengeksekusi lebih dari satu perintah SQL dalam satu koneksi.

Class DataAdapter DataAdapter bertindak sebagai jembatan antara DataSet dan data source dalam hal pengambilan dan penyimpanan data.

DataAdapter terhubung ke database dengan menggunakan object Connection dan object Command untuk mengambil data dari database dan mengisikan data tersebut ke DataSet atau ke DataTable. Selain itu, DataAdapter juga menggunakan object Command untuk mengirim data dari DataSet ke database.

Untuk melakukan tugas pengambilan data dari database ke DataSet, DataAdapter menggunakan object Command yang sesuai dan memasukkannya ke property DataAdapter yang sama, seperti SelectCom-mand, dan mengeksekusi command tersebut. Untuk melakukan tugas manipulasi data, DataAdapter menggunakan object Command yang sama tetapi memasukkannya dalam property yang berbeda, seperti InsertCommand, UpdateCommand, dan DeleteCommand.

Seperti telah dijelaskan sebelumnya, DataAdapter merupakan sub-komponen dari Data Provider, sehingga DataAdapter ini merupakan komponen yang sangat tergantung pada Data Provider. Hal ini berarti bahwa DataAdapter memiliki versi yang berbeda berdasarkan Data Provider yang digunakan. Empat DataAdapter yang populer adalah OleDbDataAdapter, OdbcDataAdapter, SqlDataAdapter, dan OracleDataAdapter. DataAdapter yang berbeda terletak di namespace yang berbeda.

Jika kita terkoneksi ke database SQL Server, kita dapat meningkatkan performa keseluruhan dengan menggunakan SqlDataAdapter bersam dengan object SqlCommand dan SqlConnection.

Constructor dan Method Class DataAdapter

Class DataAdapter memiliki empat constructor, tiga diantaranya memerlukan parameter. Dari empat constructor, ada dua constuctor populer dan sering digunakan, yaitu :

Dim cm As New SqlDataAdapter()

Dim cm As New SqlDataAdapter(objectSqlCommand)

Class DataAdapter memiliki lebih dari sepuluh method untuk membantu programmer membangun aplikasi database. Dari sepuluh method, ada beberapa method yang sering digunakan yaitu :

Dispose : digunakan untuk me-release DataAdapter yang digunakan setelah DataAdapter tersebut selesai melakukan tugasnya.

Fill : digunakan untuk mengisi DataSet atau DataTable berdasarkan object Command yang telah di atur propertynya.

FillSchema : dipanggil jika ingin menambahkan DataTable baru ke dalam DataSet.

Update : method ini digunakan jika kita melakukan manipulasi seperti Insert, Update, dan Delete dari suatu DataTable yang bernama dalam DataSet.

Penggunaan Class DataAdapter

Contoh penggunaan class DataAdapter dengan menggunakan SQL Server .NET Data Provider.

Penggunaan class DataAdapter dengan constructor tanpa parameter

Dim commandString As String= "SELECT * FROM Customers"

Dim cm As New SqlCommand

Dim ds As New DataSet

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

15

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= commandString

Dim da As New SqlDataAdapter

da.SelectCommand=cm

da.Fill(ds)

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Penggunaan class DataAdapter dengan constructor ber-parameter object SqlCommand

Dim commandString As String= "SELECT * FROM Customers"

Dim cm As New SqlCommand

Dim ds As New DataSet

Using conn As New SqlConnection(koneksi)

Try

conn.Open()

cm.Connection=cn

cm.CommandType=CommandType.Text

cm.CommandText= commandString

Dim da As New SqlDataAdapter(cm)

da.Fill(ds)

Catch ex As Exception

Throw ex

Finnaly

conn.Close()

conn.Dispose()

End Try

End Using

Class DataReader Class DataReader merupakan class readonly dan hanya dapat digunakan untuk mengambil serta me-nampung baris-baris data yang dihasilkan dari database dengan mengeksekusi method ExecuteReader. Ada empat class DataReader yang populer, tergantung data provider-nya, yaitu OdbcDataReader, OleDbDataReader, SqlDataReader, dan OracleDataReader. Untuk membuat instance DataReader, kita harus memanggill method ExecuteReader dari object Command. Kita tidak bisa membuat instance dari class DataReader secara langsung lewat constructor-nya, karena class DataReader tidak mempunyai constructor public. Jadi, membuat instance dari class SqlDataReader seperti di bawah adalah salah :

Dim sqlDataReader As New SqlDataReader()

Saat object DataReader digunakan, object Connection yang ada sibuk melayani DataReader, sehingga tidak ada operasi yang bisa dilakukan terhadap obejct Connection kecuali menutupnya. Situasi ini terjadi sampai method Close() dari object DataReader dipanggil.

Property IsClosed dari class DataReader merupakan property bertipe Boolean yang digunakan untuk memeriksa apakah status DataReader dalam kondisi tertutup atau tidak.

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

16

Jika object DataReader selesai digunakan sebaiknya ditutup, untuk menghindari multiple-connection ke database

Tabel 2-6 menyajikan daftar property public dari class SqlDataReader. Semua class DataReader memiliki property public yang sama.

Property Tipe Fungsi FieldCount Integer Memberikan jumlah kolom dalam baris data HasRows Boolean Mengindikasikan apakah object SqlDataReader berisi baris

data atau tidak. Isclosed Boolean Mengindikasikan apakah object SqlDataReader dalam

kondisi tertutup atau tidak Item(Int32) Object Memberikan nilai suatu kolom tertentu melalui indek kolom Item(Name) Object Memberikan nilai suatu kolom tertentu melalui nama kolom

Tabel 2-6 Daftar property public yang populer dari class SqlDataReader

Class DataReader memiliki lebih dari lima puluh method public. Tabel 2-7 menyajikan method public dari class SqlDataReader. Semua class DataReader memiliki method yang sama.

Method Fungsi Close Menutup object DataReader yang dibuka Dispose Me-release semua resource yang digunakan oleh object

DataReader IsDBNull Mengindikasikan apakah kolom memuat nilai null atau tidak NextResult Membaca set data berikutnya dalam object DataReader.

Digunakan jika ada beberapa set data dalam DataReader. Read Membaca baris data berikutnya dalam object DataReader GetByte,

GetString,

GetBoolean,

GetInt32

dst

Untuk mengambil nilai kolom sebagai tipe data yang dise-butkan. Misal untuk mengambil nilai suatu kolom sebagai string, digunakan GetString

Tabel 2-7 Daftar method public yang populer dari class SqlDataReader

Pada saat method ExecuteReader dieksekusi untuk mengambil baris data dari database dan memasuk-kannya ke object DataReader, object DataReader hanya dapat mengambil dan memegang satu baris setiap kali. Jadi, jika kita ingin membaca semua baris data dari suatu tabel data, dibutuhkan looping untuk mengambil secara sekuensial setiap baris dari database.

Eksekusi method ExecuteReader sebaiknya dilakukan dalam blok Try …Catch untuk meng-handle eksepsi yang terjadi saat operasi dilakukan terhadap object DataReader.

Penggunaan Class DataReader

Contoh penggunaan class DataReader dengan menggunakan SQL Server .NET Data Provider

Dim commandString = "SELECT * FROM Customers"

Dim cm As New SqlCommand

Dim dr As SqlDataReader

Using cn As New SqlConnection(koneksi)

Try

cn.Open()

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

17

cm.Connection = cn

cm.CommandType = CommandType.Text

cm.CommandText = commandString

Try

dr = cm.ExecuteReader

While dr.Read

'looping setiap baris data

'dalam object datareader

End While

Catch ex As Exception

Throw ex

Finally

dr.Close()

End Try

Catch ex As Exception

Throw ex

Finally

cn.Close()

cn.Dispose()

End Try

End Using

Komponen DataSet DataSet merupakan in memory cache of data (penampung data dalam memory) yang diambil dari data-base. DataSet merupakan komponen utama dari arsitektur ADO.NET. DataSet terdiri dari kumpulan atau collection dari object DataTable, dimana DataTable ini dapat direlasikan satu sama lain dengan menggu-nakan object DataRelation. Dengan kata lain, object DataSet dapat dipandang sebagai table container yang memuat sekumpulan object DataTable dengan object DataRelation sebagai jembatan yang meng-hubungkan tabel-tabel tersebut. Relasi antara DataSet dan kumpulan object DataTable dapat didefinisi-kan sebagai berikut :

Suatu DataSet berisi suatu DataTableCollection (memuat sekumpulan object DataTable) dan DataRelationCollection (memuat sekumpulan object DataRelation). DataRelationCollection membentuk semua relasi diantara object DataTable.

Suatu DataTable berisi DataRowCollection (memuat sekumpulan object DataRow) dan Data-ColumnCollection (memuat sekumpulan object DataColumn). DataRowCollection berisi semua baris data yang ada dalam object DataTable, ColumnCollection berisi skema dari object Data-Table.

Definisi class DataSet bersifat umum, artinya tidak mengacu ke jenis database tertentu. Data yang di-muat ke suatu DataSet dengan menggunakan TableAdapter bisa berasal dari berbagai macam database yang berbeda, seperti Microsoft Access, Microsoft SQL Server, Oracle, Microsoft Exchange, Microsoft Active Directory, dan setiap OLEDB atau database yang menggunakan ODBC.

Walaupun tidak terikat ke jenis database tertentu, DataSet dirancang untuk memuat data tabular relasi-onal seperti database relasional.

Setiap tabel yang ada dalam DataSet disajikan dalam DataSet sebagai DataTable. DataTable dapat dipan-dang sebagai pemetaan langsung ke tabel yang sesungguhnya dalam database. Setiap relasi antar tabel dinyatakan dalam DataSet sebagai object DataRelation. Object DataRelation menyediakan informasi yang menghubungkan child table ke parent table melalui foreign key. Suatu DataSet memuat sejumlah tabel dengan sejumlah relasi yang didefinisikan diantara tabel- tabel tersebut. Dari sudut pandang ini,

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

18

DataSet dapat dipandang sebagai database engine mini, karena DataSet dapat menyediakan informasi tabel-tabel termuat didalamnya seperti nama kolom dan tipe data, semua relasi antar tabel dan lebih penting lagi berisi juga fungsionalitas tabel yaitu kemampuan mencari, memilih, menambah, mengubah dan menghapus data dalam tabel. DataSet menampung tabel dalam memory sebagai file XML, dimana strukturnya bisa diubah menggunakan DataSet Designer atau lewat schema XML-nya (file .xsd).

Telah dijelaskan sebelumnya bahwa pada saat membentuk koneksi antara project kita dan database dengan menggunakan ADO.NET, tabel-tabel data dalam DataSet dapat diisi data dari database dengan menggunakan method untuk query data atau method Fill. Dari sudut pandang ini, kita dapat meman-dang DataSet sebagai suatu data source atau sumber data yang memuat semua tabel data yang dipeta-kan dari database.

DataSet ada yang bertipe (typed dataset) dan tidak bertipe (untyped dataset). Perbedaannya adalah object typed DataSet memiliki skema, sedangkan untyped DataSet tidak memiliki. Object typed DataSet lebih di-support dalam Visual Studio 2005.

Gambar 2-4 Representasi umum DataSet dan object lainnya.

Constructor, Property, Method dan Event DataSet

Class DataSet memiliki dua overloaded constructor public. Constructor pertama digunakan untuk membentuk instance baru class DataSet tanpa parameter. Constructor kedua menyertakan nama instance DataSet, dimana nama ini dapat diakses melalui property DataSetName.

Dim ds As New DataSet

Dim ds As New DataSet(nama_dataset)

Class DataSet memiliki lebih dari lima belas property public. Beberapa property yang sering digunakan disajikan dalam Tabel 2-8

Nama Property Tipe Fungsi DataSetName String Untuk memanggil dan menetapkan nama DataSet HasErrors Boolean Nilainya mengindikasikan apakah ada error dalam

setiap object DataTable yang ada di dalam DataSet IsInitialized Boolean Nilainya mengindikasikan apakah DataSet telah

diinisialisasi atau belum Tables DataTableCollection Berisi kumpulan DataTable yang terdapat dalam

DataSet

Tabel 2-8 Daftar property public class DataSet yang sering digunakan

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

19

Class DataSet memiliki lebih dari lima puluh method public. Beberapa method yang sering digunakan disajikan dalam Tabel 2-9.

Nama Method Fungsionalitas Clear Membersihkan DataSet, yaitu me-remove semua baris dalam DataTable Copy Menyalin struktur tabel dan data dalam DataSet Dispose Melepas semua resource yang digunakan oleh object DataSet GetChanges Menyalin DataSet hanya untuk baris-baris data yang berubah sejak data

dimuat dalam DataSet HasChanges Nilai Boolean yang mengindikasikan apakah DataSet telah berubah

akibat operasi penambahan, pengubahan dan penghapusan data Merge Menggabungkan DataSet, DataTable atau array dari object DataRow ke

dalam DataSet yang lain. Reset Mengembalikan DataSet ke nilai awalnya. ToString Menghasilkan nilai String yang berisi nama komponen. WriteXML Menulis data XML dari suatu DataSet WriteXMLSchema Menulis struktur DataSet sebagai skema XML

Tabel 2-9 Daftar method public yang sering digunakan dalam DataSet

Diantara method yang disajikan di atas, method Clear dan Dispose yang sering digunakan. Sebelum kita mengisi suatu DataSet, kita sebaiknya mengeksekusi method Clear untuk membersihkan DataSet, hal ini untuk menghindari tercampurnya data. Seringkali dalam aplikasi, kita perllu menggabungkan beberapa DataSet atau array data ke dalam suatu DataSet tertentu dengan menggunakan method Merge. Setelah selesai melakukan pengambilan data dengan DataSet, kita perlu me-release DataSet dengan mengekse-kusi method Dispose.

Class DataSet memiliki tiga event public seperti disajikan dalam Tabel 2-10. Event Disposed digunakan untuk memicu procedure event Dispose pada saat event ini terjadi. Event Initialized digunakan untuk membuat tanda yang mengindikasikan bahwa DataSet telah diinisialisasi. Event Mergefailed dipicu pada saat konflik terjadi dan property EnforceConstraints di set ke True pada saat kita mencoba menggabung DataSet dengan array dari object DataRow, dengan DataSet lain, atau dengan DataTable.

Nama Method Fungsionalitas Dispose Menambahkan event handler sebagai listener bagi event Disposed pada

komponen Initialized Terjadi pada saat DataSet di-inisialisasi Mergefailed Terjadi saat DataRow target dan DataRow sumber memiliki nilai primary

key yang sama dan property EnforceConstraints di set ke true

Tabel 2-10 Daftar event yang dimiliki Class DataSet

Penggunaan Class DataSet

Untuk menggunakan class DataSet, akan diilustrasikan dengan SQL Server.NET Data Provider. Dim commandString = "SELECT * FROM Customers"

Dim cm As New SqlCommand

Dim da As New SqlDataAdapter

Dim ds As New DataSet

Using cn As New SqlConnection(koneksi)

Try

cn.Open()

cm.Connection = cn

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

20

cm.CommandType = CommandType.Text

cm.CommandText = commandString

da.SelectCommand = cm

da.Fill(ds)

Catch ex As Exception

Throw ex

Finally

ds.Dispose()

da.Dispose()

cm.Dispose()

cn.Close()

cn.Dispose()

End Try

End Using

Untuk melakukan operasi INSERT, UPDATE dan DELETE tidak akan digunakan DataAdapter. DataAdapter hanya digunakan untuk operasi yang melibatkan DataSet atau DataTable. Operasi manipulasi data lebih nyaman menggunakan method ExecuteNonquery dari object Command. Cara melihat setiap DataTable yang ada dalam suatu DataSet dilakukan dengan menggunakan iterasi For Each. Misalkan ds merupakan variabel instance dari class DataSet, maka melalui property Tables dalam DataSet dapat dilihat setiap DataTable yang termuat dalam DataSet tersebut.

For Each d As DataTable In ds.Tables

Console.Writeline(d.TableName)

Console.WriteLine(d.Rows.Count)

Next

Komponen DataTable DataTable dapat dipandang sebagai container yang terdiri dari kumpulan baris (DataRowCollection) dan kumpulan kolom (DataColumnCollection). DataRowCollection memiliki elemen baris yang dikemas da-lam object DataRow, sedangkan DataColumnCollection berisi elemen kolom yang dikemas dalam object DataColumn. DataTable merupakan pemetaan secara langsung ke tabel data yang ada dalam database atau sumber data, dan menyimpan data-datanya didalam blok memori sesuai dengan tabel data dalam database.

DataTable dapat digunakan dengan dua cara :

Cara pertama dipandang sekumpulan object DataTable, dimana setiap DataTable dipetakan ke tabel data dalam database, dan diintegrasikan ke dalam object DataSet. Semua object DataTable dalam DataSet ini dapat diisi data dengan cara mengeksekusi method Fill dari object DataAdapter, seperti ditunjukkan dalam contoh sebelumnya. Argumen dalam method Fill bukan DataTable, melainkan DataSet, karena semua object DataTable dikemas dalam object DataSet yang ada.

Cara kedua menggunakan DataTable adalah bahwa setiap DataTable dapat dipandang sebagai object DataTable yang berdiri sendiri. Cara pengisian data dalam object DataTable sama dengan cara pengisian DataSet, yaitu dengan mengeksekusi method Fill, tetapi argumennya diisi dengan DataTable.

Class DataTable terletak dalam namespace System.Data, dan merupakan komponen yang independen, artinya tidak tergantung pada jenis Data Provider.

DataTable merupakan object central dalam library ADO.NET. Object lain yang menggunakan DataTable adalah DataSet dan DataView.

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

21

Pada saat mengakses object DataTable, ada kasus dimana berlaku case sensitive dalam membedakan nama DataTable. Sebagai contoh, jika ada satu DataTable bernama "fakultas" dan yang lain bernama "Fakultas", maka pencarian nama akan bersifat Case Sensitive. Jika hanya satu DataTable yang bernama "fakultas", maka pencarian nama akan bersifat Case Insensitive. Dalam satu DataSet bisa terdapat dua atau lebih DataTable dengan nilai property TableName yang sama tetapi dengan nilai property Name-space yang berbeda.

Jika kita ingin membuat DataTable secara programatik, yang harus kita lakukan adalah :

Mendefinisikan skema, dengan cara menambahkan object DataColumn ke DataColumnCollect-ion (bisa diakses melalui property Columns)

Untuk menambahkan baris ke DataTable, kita gunakan method NewRow untuk menghasilkan object DataRow baru. Method NewRow menghasilkan baris baru lengkap dengan skema Data-Table-nya seperti yang didefinisikan dalam DataColumnCollection. Maksimum baris yang dapat disimpan dalam suatu DataTable adalah 16,777,216 baris.

DataTable juga memuat koleksi object Constraint yang dapat digunakan untuk memastikan integritas data. Class DataTable merupakan member namespace System.Data. Kita dapat membuat dan menggu-nakan DataTable secara independen atau sebagai member DataSet, dan object DataTable juga dapat digunakan bersama dengan object lain, seperti DataView. Telah dijelaskan sebelumnya bahwa kita dapat mengakses koleksi tabel dalam DataSet melalui property Tables dari object DataSet.

Selain schema, DataTable juga memiliki baris data (row), dimana baris data ini direpresentasikan dalam bentuk object DataRow; sehingga dapat dikatakan object DataRow merupakan data sesungguhnya yang termuat dalam tabel. Kita dapat menggunakan DataRow beserta property dan method-nya untuk mengambil, mengevaluasi, dan memanipulasi data dalam tabel. Saat kita mengakses dan mengubah data dalam suatu row, object DataRow memegang data asli sebelum berubah dan data yang telah berubah.

Constructor, Property, Method dan Event DataTable

Class DataTable memiliki tiga overloaded constructor, yaitu :

Dim dt As New DataTable() Membentuk instance baru dari class DataTable tanpa menyertakan argumen

Dim dt As New DataTable(namaTabel) Membentuk instance baru dari class DataTable dengan menetapkan nama tabel

Dim dt As New

DataTable(namaTabel,nameSpace)

Membentuk instance baru dari class DataTable dengan menetapkan nama tabel dan nama namespace

Tabel 2-11 Daftar constructor class DataTable

Kita dapat membuat object DataTable dengan menggunakan constructor DataTabel yang sesuai. Selanjutnya kita dapat menambahkannya ke DataSet dengan menggunakan method Add pada property Tables dari DataSet.

Pada saat kita melakukan pengisian data ke DataSet melalui DataAdapter dengan method Fill, sebenar-nya kita sedang membuat DataTable dalam DataSet. Pembuatan DataTable dengan menggunakan method Fill secara otomatis akan membentuk schema DataTable yang sesuai dengan struktur tabel data yang ada dalam database.

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

22

Contoh menambah DataTable ke suatu DataSet :

Dim fakultasDataSet As DataSet

Dim fakultasTable As DataTable

fakultasDataSet = New DataSet

fakultasTable = New DataTable("Fakultas")

fakultasDataSet.Tables.Add(fakultasTable)

Class DataTable memiliki lebih dari dua puluh property. Tabel 2-12 menyajikan beberapa property yang pada umumnya sering digunakan.

Property Deskripsi Columns Tipe data Columns adalah DataColumnCollection, artinya merupakan

kumpulan kolom yang terdapat dalam DataTable. Setiap kolom dapat dipandang sebagai object DataColumn. Untuk mendapat informasi kolom tertentu bisa dilakukan dengan memberikan argumen indeks integer atau nama kolom ke property Columns.

DataSet Untuk mendapatkan informasi DataSet yang menampung DataTable saat ini. IsInitialized Property Read-Only bertipe Boolean, mengindikasikan apakah DataTable

sudah diinisialisasi atau belum Namespaces Untuk mendapatkan namespace tempat DataTable berada Rows Tipe data Rows adalah DataRowCollection, artinya merupakan kumpulan

baris yang terdapat dalam DataTable. Setiap baris dapat dipandang sebagai object DataRow. Untuk mendapat informasi baris tertentu bisa dilakukan dengan memberikan argumen indeks bertipe integer pada property Rows.

TableName Untuk mengatur atau mendapatkan informasi nama DataTable.

Tabel 2-12 Daftar property class DataTable yang sering digunakan

Diantara property di atas, property Columns dan Rows yang paling penting dan sering digunakan. Kedua property tersebut merupakan collection dari DataColumn dan DataRow dalam object DataTable. Proper-ty Columns berisi kumpulan object DataColumn yang ada dalam object DataTable, dan setiap kolom dalam tabel dapat dipandang sebagai object DataColumn dan dapat ditambahkan ke dalam DataColum-Collection. Sama halnya dengan property Rows, berisi kumpulan object DataRow yang tersusun dari semua baris yang ada dalam object DataTable. Kita dapat mengetahui jumlah kolom dan baris dari object DataTable dengan cara memanggil kedua property ini.

Class DataTable memiliki sekitar lima puluh method dengan tigapuluh tiga method public. Tabel 2-13 menyajikan beberapa method yang sering digunakan.

Method Deskripsi Clear Membersihkan DataTable dari semua data (tidak menghapus skema

DataTable) Copy Menyalin struktur dan data dari DataTable Dispose Me-release semua resource yang digunakan oleh object DataTable GetChanges Menyalin DataTable hanya untuk baris-baris data yang berubah sejak data

dimuat atau sejak method AcceptChanges dipanggil GetType Mendapatkan informasi tipe dari instance saat ini. ImportRow Menyali DataRow ke object DataTable, dengan tetap menjaga nilai data asli

dan nilai data saat ini.

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

23

Load Mengisi DataTable dengan nilai dari suatu sumber data dengan mengguna

IData-Reader yang ada (dalam implementasinya bisa berwujud object DataReader). Jika DataTable telah berisi data, data yang masuk akan digabung dengan data yang ada.

LoadDataRow Mencari dan meng-update baris tertentu dalam DataTable. Jika baris yang dicari tidak ditemukan, akan dibentuk baris baru dengan nilai yang diberikan.

Merge Menggabungkan object DataTable lain dengan DataTable saat ini NewRow Membuat DataRow baru dengan skema sama dengan table yang ada. ReadXml Membaca skema XML dan data ke dalam DataTable RejectChanges Membatalkan semua perubahan yang telah dibuat dalam DataTable sejak

terakhir kali dimuat atau sejak terakhir kali method AcceptChanges dipanggil Reset Me-reset DataTable ke nilai aslinya. Select Mendapatkan array dari object DataRow ToString Mendapatkan informasi nilai property TableName, jika ada. WriteXml Merekam isi DataTable sebagai XML

Tabel 2-13 Daftar method class DataTable yang sering digunakan

Diantara method di atas, ada tiga method yang penting yaitu: NewRow, ImportRow, dan Load. Memanggil NewRow akan menambahkan baris baru ke DataTable dengan menggunakan skema yang ada. Memanggil ImportRow akan menambahkan DataRow yang diberikan ke DataTable dengan tetap menjaga DataRow yang sudah ada. Memanggil Load dengan menyertakan DataReader akan menambah isi object DataReader ke DataTable.

Class DataTable memiliki sebelas event public. Tabel 2-14 menyajikan daftar event dalam class DataTable

Event Deskripsi ColumnChanged Terjadi setelah nilai DataColumn tertentu dalam DataRow diubah ColumnChanging Terjadi saat nilai DataColumn tertentu dalam DataRow sedang diubah Disposed Menambahkan event handler sebagai listener bagi event Disposed pada

komponen Initialized Terjadi setelah DataTable di inisialisasi RowChanged Terjadi setelah DataRow telah berhasil diubah RowChanging Terjadi saat DataRow sedang diubah RowDeleted Terjadi setelah suatu baris dalam tabel telah dihapus RowDeleting Terjadi saat suatu baris baru saja dihapus TableCleared Terjadi setelah DataTable dibersihkan (dengan method Clear) TableClearing Terjadi saat DataTable sedang dibersihkan (dengan method Clear) TableNewRow Terjadi saat DataRow baru ditambahkan.

Tabel 2-14 Daftar event class DataTable

Diantara event diatas, yang paling sering digunakan adalah event ColumnChanged, Initialized, Row-Changed dan RowDeleted. Melalui penggunaan event-event ini, kita secara real time dapat merekam dan memonitor situasi yang terjadi dalam DataTable.

Penggunaan Class DataTable

Untuk menggunakan class DataTable, akan diilustrasikan dengan SQL Server.NET Data Provider. Contoh di bawah menyajikan pengambilan data oleh DataAdapter untuk diisikan ke DataTable

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

24

Dim commandString = "SELECT * FROM Customers"

Dim cm As New SqlCommand

Dim da As New SqlDataAdapter

Dim dt As New DataTable

Using cn As New SqlConnection(koneksi)

Try

cn.Open()

cm.Connection = cn

cm.CommandType = CommandType.Text

cm.CommandText = commandString

da.SelectCommand = cm

da.Fill(dt)

Catch ex As Exception

Throw ex

Finally

dt.Dispose()

da.Dispose()

cm.Dispose()

cn.Close()

cn.Dispose()

End Try

End Using

Contoh mengisi data dari DataReader ke DataTable

Dim commandString = "SELECT * FROM Customers"

Dim cm As New SqlCommand

Dim dr As SqlDataReader

Dim dt As New DataTable

Using cn As New SqlConnection(koneksi)

Try

cn.Open()

cm.Connection = cn

cm.CommandType = CommandType.Text

cm.CommandText = commandString

Try

dr = cm.ExecuteReader

dt.Load(dr)

Catch ex As Exception

Throw ex

Finally

dr.Close()

End Try

Catch ex As Exception

Throw ex

Finally

dt.Dispose()

cm.Dispose()

cn.Close()

cn.Dispose()

End Try

End Using

Cara melihat setiap baris (DataRow) yang ada dalam suatu DataTable dilakukan dengan menggunakan iterasi For Each. Misalkan dt merupakan variabel instance dari class DataTable, maka melalui property Rows dalam DataTable dapat dilihat setiap DataRow yang termuat dalam DataTable tersebut.

Teknik Informatika-Program Profesional 2 dan 3-ADO.NET

25

For Each r As DataRow In dt.Rows

Console.WriteLine(r.Item(0))

Console.WriteLine(r.Item(1))

Next

Beberapa contoh operasi yang berhubungan dengan DataRow, DataColumn dan Datatable

'Create DataTable baru

Dim FacultyTable As DataTable = New DataTable("FacultyTable")

'Mendeklarasikan variabel DataColumn dan DataRow

Dim column As DataColumn

Dim row As DataRow

'Create DataColumn baru, mengatur DataType, ColumnName dan menambahkan ke

'DataTable

column = New DataColumn

column.DataType = System.Type.GetType("System.Int32")

column.ColumnName = "FacultyId"

FacultyTable.Columns.Add(column)

'Create column lain.

column = New DataColumn

column.DataType = Type.GetType("System.String")

column.ColumnName = "FacultyOffice"

FacultyTable.Columns.Add(column)

'Create object DataRow baru dan menambahkannya ke DataTable.

Dim Index As Integer

For Index = 1 To 10

row = FacultyTable.NewRow

row("FacultyId") = Index

row("FacultyOffice") = "TC- " & Index

FacultyTable.Rows.Add(row)

Next Index