You are on page 1of 46

Database Application

Using ADO.NET

9 Belajar konsep ADO.NET


9 Mengintegrasikan database dengan aplikasi
9 Memahami penggunaan fitur-fitur pada ADO.NET
9 Menggunakan Transaction

ADO.NET Page 1 of 45
Bagian 1
Pengenalan ADO.NET

ADO.NET bukan bentuk revisi dari ADO, tetapi adalah cara baru untuk memanipulasi data – yaitu
berbasiskan pada disconnected data source dan XML. ADO.NET dirancang untuk bekerja pada
disconnected data source di mana dapat mengurangi network traffic.

ADO.NET menggunakan format XML sebagai format universalnya. Ini menjamin interoperability
selama platform tersebut mendukung parsing XML.

Universal Data Access

Beberapa aplikasi mungkin menggunakan lebih dari satu DBMS (database management system).
Misalkan sebuah aplikasi menggunakan database Oracle, namun aplikasi lain menggunakan
SQL Server. Dikarenakan berbagai macam database ini maka menyulitkan programmer maka
dibuat suatu interface untuk mengolah database yang berbeda-beda tersebut. Teknologi yang
dikeluarkan adalah ODBC dan OLEDB.

ODBC

ODBC atau Open Database Connectivity adalah standar yang digunakan untuk mengakses
database. Di dalamnya memiliki sekumpulan fungsi yang memungkinkan kita koneksi ke local
atau remote data source. Data yang dapat diakses bermacam-macam dari dBase, Microsoft
FoxPro, Microsoft Access, Microsoft SQL Server, Oracle dan sebagainya. Untuk membuat ODBC
kita dapat masuk ke Control Panel > Administrative Tools > Data Sources (ODBC).

ADO.NET Page 2 of 45
Bagian 2
Koneksi Database
Untuk memulai integrasi ke database dalam aplikasi kita harus memahami pembuatan koneksi ke
database. Untuk menggunakan fitur database kita harus mengimport terlebih dahulu Namespace
untuk ADO.NET.

Imports System.Data.Oledb

Class yang akan kita gunakan untuk membuat koneksi adalah OledbConnection.

Membuat koneksi baru

Dim con As New OledbConnection

con.ConnectionString=”…”
con.Open()

…..code untuk ke database


…..

con.Close()

Kita harus memberi nilai ConnectionString untuk menginisialisasi letak data sourcenya, user dan
password untuk logon ke database dan sebagainya. Untuk memudahkan file berekstensi .udl
kemudian tampilkan kotak dialog dengan menjalankannya.

ADO.NET Page 3 of 45
Di sini terdapat beberapa tab.

Tab Provider digunakan untuk menentukan


jenis databasenya, untuk koneksi ke
Microsoft Access pilihlah yang Microsoft Jet
4.0 OLE DB Provider kemudian pada tab
Connection kita harus menentukan Data
Source dan autentifikasi yang diperlukan.
Jika sudah diset dapat klik Test Connection
untuk mengecek apakah koneksinya
berhasil. Setelah itu buka file udl tersebut
dengan Notepad kemudian copylah
connectionstring yang dibentuk pada baris
ketiga.

Dim con As New OledbConnection

con.ConnectionString=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & _


Application.StartUpPath & ”\data.mdb;Persist Security Info=False”

con.Open()
…..code untuk ke database
…..
con.Close()

Untuk mengetahui status koneksi kita dapat menggunakan property State

If con.state = ConnectionState.Open Then


… koneksi terbuka
Else
… koneksi tertutup
End If

Pada saat dalam terkoneksi ke database method con.Open() tidak boleh dipanggil, demikian
pula pada saat keadaan disconnected tidak boleh memanggil database method con.Close()

Setiap proses ke database harus diawali dengan connection, kemudian kita baru dapat
memanipulasi data seperti mengambil data, menambahkan, mengubah dan menghapus data.

ADO.NET Page 4 of 45
Argumen dari ConnectionString

Argumen Keterangan
Data Source Nama dari servernya atau nama dari file database yang akan digunakan.
Ketika membuka koneksi ke ODBC data source maka parameter ini berisi
nama DSN ( Data Source Name )
Initial Catalog Nama dari default database yang akan digunakan. Jika menggunakan
ODBC parameter yang digunakan adalah database.
Password Password dari user. Dapat pula disingkat pwd.
Persist Security Info Bernilai true jika ADO menyimpan userid dan password di dalam data link.
Provider Nama dari OLEDB Provider. Nilai defaultnya adalah MSDASQL
User ID Username yang akan login ke database. Dapat pula disingkat uid.

Pada saat melakukan koneksi dengan menggunakan method con.Open() sebaiknya digunakan
try- catch untuk menangani jika terjadi kesalahan pada saat koneksi.

Try
con.Open()
Catch c As Exception
MessageBox.Show ( c.Message )
End Try

Menutup koneksi

con.close()

atau

con.dispose()

ADO.NET Page 5 of 45
Bagian 3
SQL Basics
Database
Database adalah suatu tempat penyimpanan data yang terdiri dari kumpulan-kumpulan table
dimana data-data tersebut disimpan.

Untuk membuat database di dalam mysql kita menggunakan sintaks sql :


Create Database <Nama Database>

create database Phone;

Setelah itu gunakan sintaks Use <Nama Database> untuk menggunakan database tersebut.

use Phone;

Untuk Menghapus database , kta menggunakan sintaks


Drop Database < Nama Database>

drop database Phone;

Table
Table merupakan tempat penyimpanan data di dalam database yang terdiri dari kolom dan baris-
barisnya.
Untuk Membuat Table , kita menggunakan sintaks
Create table <Nama Table> (
NamaKolom < Tipe Data>,
NamaKolom <Tipe Data>.
.
.
.
Primary Key ( <NamaKolom> )
)

ADO.NET Page 6 of 45
create table PhoneBook(
Nomor int not null,
Nama varchar(20),
TanggalLahir datetime,
Alamat varchar(200),
JenisKelamin char(1),
Telepon varchar(15),
Primary key (Nomor)
)

Pada Sintaks di atas, kita membuat suatu tabel dengan nama PhoneBook dengan 6 kolom,
dimana kolom pertama yaitu nomor merupakan kolom yang tidak boleh kosong (Null value) dan
juga tidak boleh terdapat data yang sama karena kolom nomor merupakan Primary key.
Tabel yang terbentuk :

Menambahkan kolom pada tabel


Alter Table<nama table> add column <nama column> < tipe column>

alter table phonebook add column umur int

Menghapus kolom pada tabel


Alter Table<nama table> drop column <nama column>

alter table phonebook drop column umur

Kita akan membahas sintaks-sintaks untuk memanipulasi data pada database yang dikenal
dengan nama DML ( Data Manipulation Language ).

Insert
adalah perintah sql untuk memasukkan suatu data baru ke dalam suatu table.
Format perintah ini adalah

ADO.NET Page 7 of 45
insert into <Nama Tabel > <(Nama Kolom,Nama Kolom,..)>
values <Nilai yang Diisi Ke kolom1, Nilai Ke kolom 2,…>

insert into Phonebook values(1,'Budi',2020-12-20,'Jalan Mangga


12','L','021-5682771',30)

Maka Data baru dengan Nomor,Nama,TanggalLahir,Alamat,JenisKelamin dan telepon akan


ditambahkan ke Dalam tabel PhoneBook.
atau

insert into Phonebook(Nomor,Nama) values(1,'Budi')

Pada contoh di atas kita hanya memberi nilai ke Nomor dan Nama, maka kolom yang lain akan
bernilai null, hal ini diperbolehkan jika pada saat membuat tabel kita mengizinkan nilai null pada
kolom tersebut. Jika memberikan nilai default maka nilai yang akan diberikan pada saat kita tidak
member nilai adalah nilai defaultnya bukan nilai null.

Select
Select adalah perintah sql yang berguna untuk mengambil data yang terdapat di dalam database
sesuai yang kita inginkan
Format perintah ini adalah
Select <Nama Kolom>,<Nama Kolom> from <Nama Table>
[ where <Condition> ]
[ group by … ]
[ having condition ]
[ order by <Nama Kolom> ]

select * from Phonebook

select Nomor,Nama from Phonebook where Nomor=1

Maka Query akan menghasilkan semua data yang memiliki Nomor 1 dari tabel Phonebook.

ADO.NET Page 8 of 45
Menampilkan semua data yang berumur lebih besar sama dengan 20 dan jenis kelaminnya laki-
laki.

select * from PhoneBook


where Umur >= 20 AND JenisKelamin='L'

Menampilkan semua data yang berumur lebih besar dari 40 tahun atau lebih kecil dari 20 tahun.

select * from PhoneBook


where Umur > 40 OR Umur < 20

Menampilkan Nomor, Nama, JenisKelamin, Umur diurutkan dari yang paling tua hingga yang
paling muda.

select Nomor,Nama,JenisKelamin,Umur from PhoneBook


order by Umur DESC

Menampilkan Nomor, Nama, JenisKelamin, Umur diurutkan dari yang paling tua hingga yang
paling muda.

select Nomor,Nama,JenisKelamin,Umur from PhoneBook


order by Umur ASC

Note: untuk ASC boleh tidak ditulis.

Update
Update adalah perintah sql untuk mengubah satu atau lebih data yang terdapat di dalam suatu
table.
Format perintah ini adalah
Update <Nama Table> set <Nama Kolom = Nilai Baru>,
<Nama Kolom = Nilai Baru>, …
where <Condition>

update PhoneBook set Nama='Andi' where Nomor=2

ADO.NET Page 9 of 45
Maka Nama dari tabel Phonebook dengan nomor 2 akan diubah namanya menjadi Andi.
Menambahkan umur semuanya sebesar 1.

update PhoneBook set Umur=Umur+1

Delete
Delete adalah perintah sql untuk menghapus satu atau lebih data yang terdapat di dalam suatu
table.
Format perintah ini adalah
Delete from <Nama Table> where <Condition>

delete from PhoneBook WHERE Nomor=1

Maka yang nomor 1 akan dihapus dari tabel.

Menghapus semua data dari dalam tabel.

delete from PhoneBook

Semua data dalam tabel akan dihapus, tetapi struktur tabelnya tetap. Jika kita ingin menghapus
tabelnya dari database dapat menggunakan sintaks berikut ini. Tabel berserta data di dalamnya
akan dihapus semua.

Menghapus tabel dari database

drop table PhoneBook

ADO.NET Page 10 of 45
Menggunakan Aggregate Function

MAX
digunakan untuk mengambil nilai maksimal dari suatu field

Select max(Umur) as MaxUmur from PhoneBook

MIN
digunakan untuk mengambil nilai Minimal dari suatu field

Select min(Umur) as MinUmur from PhoneBook

AVG
digunakan untuk mengambil rata-rata dari suatu kolom.

Select avg(Umur) as RataRataUmur from PhoneBook

SUM
digunakan untuk menghitung Jumlah Total dari suatu kolom pada tabel.

Select sum(Umur) as TotalUmur from PhoneBook

ADO.NET Page 11 of 45
Count
digunakan untuk menghitung jumlah record yang terdapat pada suatu kolom dari suatu tabel.

Select count(Nomor) as JumlahOrang from PhoneBook

Bila Kita ingin menampilkan suatu aggregate function Bersama-sama dengan kolom lain di suatu
query, kita harus menggunakan sintaks Group By, Sehingga data yang dihitung oleh aggregate
function tersebut akan dikelompokkan berdasarkan kolom yang kita GroupBy tersebut.

Misalkan kita ingin menampilkan kolom JenisKelamin dengan jumlah orangnya

select JenisKelamin,count(Nomor) as Jumlah from PhoneBook


group by JenisKelamin

Jika kondisi yang kita gunakan menggunakan aggregate function maka tidak boleh diletakkan di
WHERE tetapi harus menggunakan HAVING.

select JenisKelamin,count(Nomor) as Jumlah from PhoneBook


group by JenisKelamin
having count(Nomor)=MAX(Nomor)

ADO.NET Page 12 of 45
Menggunakan LIKE

select * from PhoneBook WHERE Nama LIKE ‘Andi%’

Code di atas akan menampilkan semua data dari tabel PhoneBook di mana Namanya sesuai
dengan pola yang diberikan pada LIKE. % mewakili 0 atau banyak karakter. Sehingga yang akan
ditampilkan adalah semua data yang Nama bagian depannya Andi.

ADO.NET Page 13 of 45
Bagian 4
Menggunakan Object Command
Menggunakan ExecuteReader

Dim con As New OledbConnection


Dim com As New OledbCommand

con.ConnectionString = “…”
com.Connection = con

com.CommandText=”select CompanyName from Customers”

con.Open()

Dim dr As OledbDataReader

dr = com.ExecuteReader

While dr.read
ComboBox1.Items.Add( dr(0) )
End While

dr.close()

con.Close()

Setiap membuat kita terlebih dahulu harus membuat objek Connection-nya. Setelah itu kita set
Property dari Command connection adalah objek koneksi yang sudah dibuat kemudian
masukkan sintaks SQLnya di bagian CommandText. Contoh di atas digunakan perintah SELECT
untuk mengambil data dari database. Pastikan koneksi sudah dibuka dengan con.Open() pada
saat sebuah Command ingin dieksekusi.

Pada contoh di atas digunakan DataReader untuk membaca dari hasil dari Command. Perintah
Command akan mengambil field CompanyName dari tabel Customers dengan menggunakan
method ExecuteReader kemudian akan difetch atau dibaca secara sekuensial berurutan dari
awal hingga akhir baris oleh DataReader. Statement while untuk membuat datareader akan terus
membaca selama data belum habis. Jangan lupa untuk menutup DataReader setelah selesai
digunakan. Dan tutup koneksi bila sudah tidak dibutuhkan.

ADO.NET Page 14 of 45
DataReader akan membaca baris per baris dan untuk mendapatkan nilai kita berikan indeks yang
diinginkan seperti berikut ini.

While dr.read
ComboBox1.Items.Add( dr(0) )
End While

atau

While dr.read
ComboBox1.Items.Add( dr(“CompanyName”) )
End While

Menggunakan ExecuteScalar
Kita dapat mengambil nilai scalar ( single value ) dari database dan dengan Command kita
langsung mengambil dan menampungnya dalam suatu variabel.

Misalkan kita ingin mendapatkan jumlah Record pada tabel Customers.

com.CommandText = “select count(*) from Customers”

Dim jumlah As Integer = com.ExecuteScalar()

Pastikan Command sudah diinisialisasi objek koneksinya dan pastikan koneksinya sudah dalam
keadaan connected. Pada saat pemanggilan method ExecuteScalar maka perintah SQLnya akan
dieksekusi di mana mengembalikan nilai jumlah record dari Customers dan kemudian langsung
ditampung ke variabel jumlah.

Menggunakan ExecuteNonQuery
Method ini digunakan untuk menjalankan perintah INSERT, UPDATE dan DELETE.

com.CommandText = “perintah INSERT/UPDATE/DELETE”

com.ExecuteNonQuery()

ADO.NET Page 15 of 45
Bagian 5
Data Adapter dan DataSet
ADO.NET mempunyai dua cara untuk menerima data dari database yaitu menggunakan
DataReader yang kita gunakan pada bab sebelumnya. Sifat dari DataReader ini read-only,
forward-only dan fast-only. DataReader tidak dapat digunakan untuk tujuan mengupdate data.
Keuntungannya menggunakan DataReader adalah resource yang dipakai lebih sedikit.

Berbeda dengan Data Adapter di mana selalu dihubungkan dengan DataSet untuk mengatur
data yang ada di dalam memory. Data Adapter dapat digunakan untuk mengambil data dari
database kemudian ditampung di DataSet. DataSet ini disimpan di dalam memory dan dapat
dimanipulasi dari program, sehingga setelah DataSet terisi oleh data yang dibutuhkan resource
untuk koneksi database dibuang.

Berikut ini adalah contoh code untuk mengambil data menggunakan DataAdapter dan
menampungnya ke DataSet.

Dim con As New OledbConnection(“…..connection string……”)


Dim da As New OledbDataAdapter(“select * from Customers”,con)

Dim ds As New DataSet

da.fill(ds)

Untuk menampilkannya datanya kita dapat menggunakan DataGrid.


DataGrid1.DataSource = ds.Tables(0)

Kita juga dapat memberi nama pada DataTablenya pada saat method Fill.
da.fill(ds,”Pelanggan”)

DataGrid1.DataSource = ds.Tables(“Pelanggan”)

ADO.NET Page 16 of 45
Setiap kita melakukan fill ke DataSet maka di dalamnya akan degenerate sebuah DataTable.
Bisa diambil kesimpulan bahwa dalam suatu DataSet di dalamnya terdiri dari beberapa
DataTable. Masing-masing DataTable tersebut data kita beri nama yang berbeda-beda.

DataSet disimpan di dalam memory dalam bentuk format XML. Selanjutnya aplikasi dapat
mengambil data, menambahkan data, mengubah data, dan menghapus data yang ada di dalam
DataSet. Tentunya prosesnya akan cepat karena data berada di dalam memory, bukan ke
database. Setelah proses selesai pada waktu yang diinginkan kita dapat melakukan operasi
Update untuk mengupdate semua perubahan yang telah dilakukan dalam DataSet, sehingga
data di database dan DataSet sinkron.

Update data menggunakan DataAdapter


DataAdapter dapat melakukan update ke database. Dengan kata lain DataAdapter juga dapat
melakukan insert,update dan delete. Untuk itu DataAdapter memiliki empat buah Command yaitu
SelectCommad, InsertCommand, UpdateCommand, dan DeleteCommand.

DataAdapter DataSet

database SelectCommand
InsertCommand
UpdateCommand
DeleteCommand

Untuk menggenerate otomatis InsertCommand, UpdateCommand dan DeleteCommand kita


dapat menggunakan bantuan class OledbCommandBuilder dengan menerima parameter berupa
DataAdapter.

Dim cmd As New OledbCommandBuilder(da)

Setelah itu kita dapat menggunakan method Update untuk melakukan Update data dari DataSet
ke database. Method update ini menggunakan parameter DataTable yang ingin diupdate.

da.Update(dt)

atau

da.Update(ds.Tables(“Pelanggan”))

ADO.NET Page 17 of 45
Pada saat method Update dipanggil maka semua DataRow pada DataTable akan dicek satu per
satu RowStatenya. Setiap DataRow memiliki RowState yang berbeda-beda. Pada awalnya
RowStatenya adalah Unchanged. Kemudian setelah data pada DataTable diubah maka
statusnya pun berubah-ubah ada yang Added, Modified, Deleted. Pada saat method update
DataAdapter akan mengecek statusnya masing-masing dan melakukan proses insert,update atau
delete bila dibutuhkan disesuaikan dengan status rownya. Jika menemukan status Added berarti
DataAdapter akan menyuruh InsertCommand untuk melakukan proses insert ke database
demikian pula dengan yang lainnya.

Setelah proses Update selesai dan tidak terjadi masalah maka status pada masing-masing row
akan kembali diset menjadi Unchanged.

Setiap data table menyimpan data original dan data current. Data original adalah data yang
sesuai dengan pertama kali DataTable tersebut difill oleh DataAdapter. Sedangkan data current
adalah data yang sedang digunakan atau dapat diubah-ubah.

Untuk mengembalikan data current menjadi data original dapat menggunakan method
RejectChanges. Maka semua data original akan dicopykan dan menimpa data current sehingga
data kembali seperti semula seperti saat pertama kali diload dari database. Kebalikan dari
method ini adalah AcceptChanges di mana semua status pada data current untuk masing-
masing DataRownya dijadikan Unchanged.

Pada saat melakukan perintah Update sebaiknya menggunakan Try-Catch karena pada saat
update dijalankan kemungkinan bisa terjadi Exception yang disebabkan oleh masalah
Concurrency. Ini disebut dengan DBConcurrencyException.

Hal ini terjadi pada saat program disconnected data source di mana multiuser sedang berusaha
untuk mengupdate data yang sama. Karena sifatnya yang disconnected maka pengupdatean
data yang dilakukan oleh satu user tidak diketahui oleh user lain hingga user tersebut berusaha
mengupdate dan mendapatkan pesan error. Maka user tersebut harus merefresh kembali data
terakhir dari database dengan cara melakukan fill kembali pada DataTable.

ADO.NET Page 18 of 45
ADO.NET Page 19 of 45
Bagian 6
DataSet Structure

Struktur DataSet

DataRow
DataSet

DataTable

DataColumn

DataTable

DataTable

Mendapatkan jumlah baris

Dim jumlah As Integer = dt.Rows.Count

Mendapatkan jumlah kolom

Dim jumlah As Integer = dt.Columns.Count

Mendapatkan nama kolom

Dim str As String = dt.Columns(0).ColumnName

ADO.NET Page 20 of 45
Mendapatkan data pada cell tertentu

Dim str As String = dt.Rows(0)(0)

Code di atas kita mengambil data pada baris ke-0 ( paling atas ) dan kolom ke-0 ( paling kiri ).
Atau dapat pula menggunakan string seperti berikut.

Dim str As String = dt.Rows(0)(“Nomor”)

Membuang semua baris


dt.Rows.Clear()

Mendefine Primary Key untuk DataTable

Dim arr(0) As DataColumn

arr(0) = dt.Columns(“Nomor”)

dt.PrimaryKey = arr

Dengan memberikan Primary Key pada DataTable kita dapat menggunakan method seperti Find
dan Contains untuk mencari data pada DataTable.

Menambahkan DataRow baru ke dalam DataTable

Dim dr As DataRow = dt.NewRow

dr(“No”) = “1”
dr(“Nama”) = “Johny”
dr(“Telp”) = “08159126556”

dt.Rows.Add(dr)

Mengubah data pada DataRow

Dim dr As DataRow = dt.Rows.Find(“1”)

dr(“Nama”) = “Johny”
dr(“Telp”) = “08159126556”

ADO.NET Page 21 of 45
Contoh di atas adalah mengubah DataRow yang Nomornya 1. Method Find akan mencari pada
DataTable dan mengembalikan instance dari DataRownya. Pastikan anda sudah memberikan
Primary Key pada DataTable baru method Find bisa digunakan.

Menghapus data row dari DataTable

Dim dr As DataRow = dt.Rows.Find(“1”)

dt.Rows.Remove(dr)

Code di atas digunakan untuk membuang record yang Nomornya 1. Atau dapat menggunakan
indeks seperti berikut ini.

dt.Rows.RemoveAt(0)

Kita dapat membuat kolom sendiri pada DataTable. Kemudian kita bisa menentukan tipe datanya
dan membuat column expression.

Dim dt As New DataTable

dt.Columns.Add(“Nama Barang”)
dt.Columns.Add(“Harga”)
dt.Columns.Add(“Jumlah”)
dt.Columns.Add(“Sub Total”)

dt.Columns(“Harga”).DataType = System.Type.GetType(“System.Decimal”)
dt.Columns(“Jumlah”).DataType = System.Type.GetType(“System.Int32”)
dt.Columns(“Sub Total”).DataType = System.Type.GetType(“System.Decimal”)
dt.Columns(“Sub Total”).Expression = “Harga * Jumlah”

Kemudian bisa ditampilkan ke datagrid.


Untuk menambahkan datarow masih tetap menggunakan cara seperti di atas termasuk cara
pengubahan dan penghapusan datarow.

DataGrid1.DataSource = dt

ADO.NET Page 22 of 45
Menggunakan TableMappingStyle

Buatlah DataGrid kemudian masuk ke properties TableStyles. Kemudian akan muncul tampilan
seperti di bawah ini. Tambahkanlah style baru. Pada bagian MappingName masukkan nama
DataTablenya. Nama DataTable sesuai dengan pada saat dideklarasikan.
Dim dt As New DataTable(“NamaTable”)

Maka semua settingan yang berlaku di TableStyle adalah untuk DataTable yang bernama
“NamaTable”. Kita dapat melakukan berbagai macam settingan , seperti warna, status ReadOnly,
ukuran barisnya dan juga mengatur kolom-kolomnya. Untuk mengatur kolom-kolomnya masuk ke
properties GridColmnStyles.

ADO.NET Page 23 of 45
Di sini untuk setiap kolomnya kita masukkan nilai MappingName sesuai dengan nama pada
DataColumn dari DataTable. HeaderText untuk teks pada header kolom, setting alignment,status
read only per kolom, dan NullText untuk mengatur teks pengganti nilai null.

ADO.NET Page 24 of 45
Bagian 7
Penggunaan Stored Procedure
dan Transaction

Stored Procedure

Stored Procedure adalah sebuah proses / prosedur yang dibuat dan disimpan terintegrasi
dengan database, sehingga pada aplikasi tinggal memanggil stored procedure tersebut dengan
mengirimkan parameter-parameter yang dibutuhkan.

Misalkan kita memiliki tabel dengan struktur sebagai berikut.

create table Teman


[id] int,
[nama] varchar(30),
[telp] varchar(15),
PRIMARY KEY [id]
)

Misalkan kita buat dulu stored procedure di SQL Server.

create procedure INSERT_DATA


@id as int,
@nama as varchar(30),
@telp as varchar(15)
As
INSERT INTO Teman VALUES(@id,@nama,@telp)

Kemudian di aplikasi yang kita buat kita dapat memanggil stored procedure dengan
menggunakan Command sebagai berikut.

ADO.NET Page 25 of 45
Imports System.Data.SqlClient

Dim con As New SqlConnection


Dim cmd As New SqlCommand

con.ConnectionString = “Provider=SQLOLEDB.1;uid=sa;pwd=evotraining;Data
Source=.;Initial Catalog=Teman;Persist Security Info=true”

cmd.Connection = con
cmd.CommandType = CommandType.StoredProcedure

cmd.CommandText = “INSERT_DATA”
cmd.Parameters.Add(“@id”, SqlDbType.Int )
cmd.Parameters.Add(“@nama”, SqlDbType.Varchar, 30)
cmd.Parameters.Add(“@telp”, SqlDbType.VarChar, 15 )

cmd.Parameters(“@id”).Value = 1
cmd.Parameters(“@nama”).Value = “Andy Yulianto”
cmd.Parameters(“@telp”).Value = “0815915565”

con.Open()
cmd.ExecuteNonQuery()
con.Close()

Transaction
Transaction digunakan untuk mengatur pemanipulasian data. Data akan benar-benar disimpan
ke database setelah proses Commit, jika terjadi kegagalan kita lakukan proses Rollback.

Imports System.Data.SqlClient

Dim con As New SqlConnection


Dim cmd As SqlCommand
Dim trans As SqlTransaction

con.ConnectionString = “Provider=SQLOLEDB.1;uid=sa;pwd=evotraining;Data
Source=.;Initial Catalog=Teman;Persist Security Info=true”

Try
con.Open()
cmd = con.CreateCommand()
trans = con.BeginTransaction()
cmd.Connection = con
cmd.Transaction = trans
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = “INSERT_DATA”
cmd.Parameters.Add(“@id”, SqlDbType.Int )
cmd.Parameters.Add(“@nama”, SqlDbType.Varchar, 30)
cmd.Parameters.Add(“@telp”, SqlDbType.VarChar, 15 )
cmd.Parameters(“@id”).Value = 1
cmd.Parameters(“@nama”).Value = “Andy Yulianto”
cmd.Parameters(“@telp”).Value = “0815915565”
cmd.ExecuteNonQuery()
trans.commit()
Catch ex As Exception
trans.rollback()
End Try
If con.State=ConnectionState.Open Then con.Close()

ADO.NET Page 26 of 45
Bagian 8
DataView
Dalam bab ini kita dapat melakukan filtering dan sorting secara local tanpa harus query ke
database dengan menggunakan dataview.

Imports System.Data.SqlClient

Dim con As New SqlConnection


Dim da As New SqlDataAdapter(“select * from Customers”,con)
Dim dt As New DataTable(“Customers”)
Dim dv As DataView

con.ConnectionString = “Provider=SQLOLEDB.1;uid=sa;pwd=evotraining;Data
Source=.;Initial Catalog=Northwind;Persist Security Info=true”

da.fill(dt)

dv = new DataView(dt)

datagrid1.DataSource = dv

Untuk melakukan filter misalkan yang CompanyName-nya diawali dengan huruf “A”.

dv.RowFilter = “CompanyName LIKE ‘A%’”

Penggunaan filter hamper sama dengan penggunaan WHERE pada SQL statement.
Untuk melakukan sorting berdasarkan field tertentu.

dv.Sort = “CompanyName ASC”

Maka data yang akan ditampilkan pada DataGrid menurut RowFilter dan Sort yang ada. Jika
ingin menghilangkan efe filter dapat mengeset nilai RowFilter ke keadaan string kosong.
Demikian pula dengan sort.

dv.RowFilter = “”
dv.Sort =””

ADO.NET Page 27 of 45
Bab 9
Crystal Report
Pada bagian awal Crystal Report pilih Blank Report untuk membuat report baru.

ADO.NET Page 28 of 45
Kemudian kita diharuskan memilih data source untuk reportnya. Untuk memilih file access pilih
Databae Files, untuk Microsoft SQL Server bisa ditemukan di More Data Sources > Microsoft
SQL Server.

Masukkan informasi untuk melakukan koneksi. Kemudian akan dimunculkan tabel-tabel yang ada
di database.

ADO.NET Page 29 of 45
Pilih salah satu tabel misalkan [Products by Category].

ADO.NET Page 30 of 45
Pada pembuatan Crystal Report ada Field Explorer. Pada bagian Database Fields masukkan
field-field [Products by Category] ke bagian detail.

Untuk melihat hasilnya tekan tombol Refresh di bagian atas.

Grouping
Dalam contoh ini kita masih menggunakan database NorthWind, menggunakan view [Products
By Category]. Di sini kita tambahkan Group. Pilih menu Insert ► Group

ADO.NET Page 31 of 45
ADO.NET Page 32 of 45
Kita bisa menambahkan Box untuk membuat kerangka pada laporan.

ADO.NET Page 33 of 45
Membuat laporan dari transaksi

Untuk laporan transaksi kita gunakan beberapa tabel. Laporan yang ingin dibuat adalah laporan
transaksi mencakup tanggal transaksi, customernya siapa, daftar barang yang dibeli apa saja,
jumlah yang dibeli dan sebagainya.

Tabel : Orders, [Order Details], Customers, Products

ADO.NET Page 34 of 45
Menambahkan Formula

Buat formula dengan nama SubTotal di mana menggunakan rumus perkalian antara harga dikali
dengan jumlah yang dibeli.

ADO.NET Page 35 of 45
Mengintegrasikan report ke dalam aplikasi

Dalam mengintegrasikan laporan ke aplikasi terdapat beberapa cara. Cara yang pertama adalah
kita membuat rancangan report dengan Crystal Report yang mengambil data dari database
secara langsung. Dari sisi aplikasi kita tinggal menampilkan report tersebut dengan
menggunakan CrystalReportViewer. Cara kedua kita dapat menggunakan Typed DataSet, di
mana data laporan yang dibutuhkan kita buat view-nya terlebih dahulu (dalam Microsoft Access
disebut dengan Query), kemudian data tersebut kita load ke dalam DataSet kemudian dipakai
untuk report.

Cara yang pertama, setelah kita buat rancangan reportnya dengan Crystal Report (dalam hal ini
Crystal Report 8.5), tambahkan form untuk menampilkan reportnya di mana terdapat
CrystalReportViewer.

ADO.NET Page 36 of 45
FormReportIntegration.vb

FormReport.vb

Kemudian drag-n-drop lah CrysalReportViewer ke dalam form. Ubahlah properties dari


CrystalReportViewer tersebut sebagai berikut:

Properties Value
(Name) CRV
Dock Fill

ADO.NET Page 37 of 45
1. Add Reference
Pilih Project > Add Reference

2. Tambahkan code berikut

Imports CrystalDecisions.CrystalReports.Engine

Public Class FormReportIntegration


Private Sub btnShow_Click(sender As Object,e As EventArgs) handles btnShow.Click

Dim oRpt As New ReportDocument


oRpt.Load(Application.StartupPath & "\ReportFile.rpt")
oRpt.SetDatabaseLogon("sa", "evotraining", "(local)", "Northwind")

Dim f As New FormReport


f.CRV.ReportSource = oRpt
f.WindowState = FormWindowState.Maximized
f.ShowDialog()

End Sub

End Class

ReportDocument adalah class untuk abstraksi objek report yang akan ditampilkan. Method Load
digunakan untuk membaca file report yang sudah dirancang. Spesifikasikan letak file report di
sini. Kemudian SetDatabaseLogon untuk mengirimkan informasi user, password, nama server,
dan nama database yang dibutuhkan untuk koneksi ke database. Setelah itu baru tampilkan
melalui FormReport dengan CrystalReportViewer.

ADO.NET Page 38 of 45
Cara Kedua adalah dengan menggunakan Typed DataSet. Pada Solution Explorer, klik kanan
pada project pilih Add > Add New Item > DataSet. Kemudian isi nama dataset pada kotak dialog
yang tampil.

Kemudian akan tampil layar di mana kita dapat mendefinisikan schema DataSet dalam bentuk
format XML. Pada bagian kiri Toolbox terdapat berbagai macam pilihan seperti Element, Attribute
dan sebagainya sesuai dengan standard penulisan XML. Pada bagian bawah terdapat pilihan
DataSet untuk menampilkan perancangan dengan drag-n-drop, dan XML untuk menampilkan
dalam format XML.

ADO.NET Page 39 of 45
Tampilan XSD dalam bentuk format XML

ADO.NET Page 40 of 45
Untuk memudahkan data yang dibutuhkan laporan biasanya merupakan hasil join dari beberapa
tabel. Sebaiknya dari semua tabel-tabel tersebut kita gabungkan (join) dan dibuat dalam bentuk
view (Query di Microsoft Access). Setelah itu tampilkan Server Explorer (Ctrl+Alt+S).

Pilihlah salah satu view yang tersedia, drag-n-drop pada bagian berwarna kuning. Maka
rancangan tabelnya dalam DataSet akan di-generate secara otomatis.

ADO.NET Page 41 of 45
Dengan membuat Typed DataSet, berarti kita telah membuat suatu class turunan dari DataSet, di
mana di dalamnya terdefinisi DataTable apa saja yang ada di dalam DataSet tersebut, berbeda
seperti Untyped DataSet yang di mana DataTable-nya terbentuk karena proses fill dari
DataAdapter. Langkah selanjutnya adalah kita melakukan koneksi ke database, mengambil data
dari view tersebut ke dalam DataTable yang ada di dalam DataSet, kemudian dipakai sebagai
data source untuk Report. Crystal Report yang digunakan untuk metode ini adalah Crystal Report
10 yang sudah terintegrasi dengan Visual Studio.NET 2003 sendiri. Pada Solution Explorer, klik
kanan pada Project, pilih Add > Add New Item > Crystal Report.

ADO.NET Page 42 of 45
Pada bagian kanan klik kanan pada Database Fields > Pilih Add/Remove Database

ADO.NET Page 43 of 45
Kemudian Add Data Source yang diinginkan.

Kemudian rancanglah tampilan report seperti biasa. Gunakanlah database field yang disediakan.
Pada bagian Database Fields. Setelah rancangan report selesai dibuat maka langkah-
langkahnya sebagai berikut :

1. Buat koneksi ke database


2. Load data dari database ke dalam DataTable di dalam DataSet (Typed DataSet)
3. SetDataSource objek ReportDocument yang digunakan
4. Tampilkan dengan CrystalReportViewer

ADO.NET Page 44 of 45
Pada saat menampilkan report terdapat sedikit modifikasi pada code sebagai berikut:

Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data.Oledb

Public Class FormReportIntegration


Private Sub btnShow_Click(sender As Object,e As EventArgs) handles btnShow.Click


Dim con As New OledbConnection(“ … connection string here … “)
Dim da As New OledbDataAdapter(“select * from [Products By Category]”, con)
Dim ds As New dsReport ‘using typed data set
da.fill(ds.Tables(“Products_by_Category”))

Dim oRpt As New ReportDocument


oRpt.Load(Application.StartupPath & "\ReportFile.rpt")
oRpt.SetDataSource(ds.Tables(“Products_by_Category”))

Dim f As New FormReport


f.CRV.ReportSource = oRpt
f.WindowState = FormWindowState.Maximized
f.ShowDialog()

End Sub

End Class

ADO.NET Page 45 of 45
Filename: ADO.NET.doc
Directory: D:\Evo\RnD\diktat\special\ADO.NET
Template: C:\Documents and Settings\EVO\Application
Data\Microsoft\Templates\Normal.dot
Title:
Subject:
Author: Administrator
Keywords:
Comments:
Creation Date: 7/21/2005 1:54:00 PM
Change Number: 210
Last Saved On: 4/12/2006 12:58:00 PM
Last Saved By: EVO
Total Editing Time: 1,146 Minutes
Last Printed On: 4/27/2006 3:41:00 PM
As of Last Complete Printing
Number of Pages: 45
Number of Words: 3,543 (approx.)
Number of Characters: 20,201 (approx.)

You might also like