7/25/2019 Laporan Pemrogaman Chapter 12
1/17
LAPORAN PEMROGAMAN
BASIS DATA JARINGAN
Using Data Readers
Disusun oleh:
Ajeng Yona Falah
Informatika 3A
3.34.12.0.01
PROGAM STUDI TEKNIK INFORMATIKA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2014/2015
7/25/2019 Laporan Pemrogaman Chapter 12
2/17
I. Tujuan Instruksional Khusus
Setelah menyelesaikan praktikum ini, mahasiswa diharapkan mampu:
1.
Mengerti penggunaan Data Reader secara umum
2.
Memperoleh informasi tentang Data3. Memperoleh informasi tentang Table
4.
Menggunakan multiple result sets dengan Data Reader
II. Dasar Teori
A. Memahami Data Reader Secara Umum
Komponen ketiga penyedia data, selain koneksi dan perintah, adalah pembaca
data. Setelah Anda terhubung ke database dan tanya, Anda perlu beberapa carauntuk mengakses hasil set. Di sinilah pembaca data masuk.
Data Reader adalah objek yang mengimplementasikan interface
System.Data.IDataReader. Seorang pembaca data yang cepat, unbuffered,
forward-only, read-only terhubung sungai yang mengambil data secara aper-
baris. Bunyinya satu baris pada satu waktu karena loop melalui hasil set.
Anda tidak dapat langsung instantiate pembaca data; sebagai gantinya, Anda
membuat satu dengan metode ExecuteReader dari perintah. Misalnya, dengan
asumsi cmd adalah objek perintah SqlClient untuk query, berikut adalah cara
untuk membuat pembaca data SqlClient:
Rdr redup Sebagai SqlDataReader = cmd.ExecuterReader
Anda sekarang dapat menggunakan ini pembaca data untuk mengakses
permintaan itu hasil set.
B. Penggunaan Ordinal Indexer
Anda menggunakan pengindeks ordinal untuk mengambil data kolom dari hasil
yang ditetapkan. Mari kita belajar lebih banyak tentang pengindeks ordinal.
Kode rdr.GetValue (0) adalah referensi ke item properti pembaca data dan
mengembalikan nilai dalam kolom tertentu untuk baris saat ini. Nilai
dikembalikan sebagai objek.
C. Penggunaan Column Name Indexer
Sebagian ofthe waktu kita tidak melacak nomor kolom dan lebih memilih
mengambil nilai-nilai dengan nama kolom masing-masing, hanya karena itu
7/25/2019 Laporan Pemrogaman Chapter 12
3/17
jauh lebih mudah untuk mengingat mereka dengan nama mereka, yang juga
membuat kode lebih mendokumentasikan diri.
Anda menggunakan nama kolom pengindeksan dengan menentukan nama
kolom bukannya indeks ordinal
angka. Hal ini memiliki keuntungan. Misalnya, meja dapat diubah dengan
penambahan atau penghapusan satu atau lebih kolom, mengganggu kolom
pemesanan dan meningkatkan pengecualian dalam kode yang lebih tua yang
menggunakan pengindeks ordinal. Menggunakan nama kolom pengindeks akan
menghindari masalah ini, tetapi pengindeks ordinal lebih cepat, karena mereka
referensi kolom langsung daripada melihat mereka dengan nama.
Potongan kode berikut mengambil kolom yang sama (CompanyName dan
ContactName) bahwa contoh terakhir lakukan, menggunakan nama kolom
pengindeks:
'loop through result set
While (rdr.Read)
Console.WriteLine(" {0} | {1}", _
rdr("companyname").ToString().PadLeft(25), _
rdr("contactname").ToString().PadLeft(20))
End While
D.
Penggunaan Type Accessor Methods
Ketika pembaca ADATA mengembalikan nilai dari sumber data, nilai yang
dihasilkan diambil dan disimpan secara lokal di jenis NET daripada asli jenis
sumber data. Ini fitur jenis konversi di tempat adalah trade-off antara konsistensi
dan kecepatan, sehingga untuk memberikan beberapa kontrol atas data yang
diambil, pembaca data yang mengekspos diketik metode accessor yang dapat
Anda gunakan jika Anda tahu jenis spesifik nilai yang akan dikembalikan .
Metode accessor diketik semuanya dimulai dengan Dapatkan, mengambil
indeks ordinal untuk pengambilan data, dan tipe yang aman; Visual Basic .NET
tidak akan memungkinkan Anda untuk pergi dengan gips tidak aman. Metode
ini ternyata lebih cepat dari kedua ordinal dan metode pengindeks nama kolom.
Menjadi lebih cepat dari nama kolom pengindeksan tampaknya logis, karena
metode accessor yang diketik mengambil ordinals untuk referensi; Namun, kita
perlu menjelaskan bagaimana hal itu lebih cepat dari pengindeksan ordinal.
Hal ini karena meskipun kedua teknik mengambil di sejumlah kolom, metodepengindeksan ordinal konvensional perlu mencari tipe data sumber data dari
7/25/2019 Laporan Pemrogaman Chapter 12
4/17
hasil dan kemudian pergi melalui jenis konversi. Ini overhead mencari skema
dihindari dengan accesor diketik.
Jenis NET dan mengetik metode accessor tersedia untuk hampir semua jenis
data yang didukung oleh SQL Server dan database OLE DB.
Tabel 12-1 harus memberikan Anda ide yang singkat ketika menggunakan
accesor diketik dan dengan apa tipe data. Itu daftar tipe data SQL Server, jenis
NET mereka sesuai, NET diketik accesor, dan SQL Server-spesifik accesor
diketik khusus yang dirancang khusus untuk mengembalikan objek tipe
System.Data.SqlTypes .
E. Mendapatkan Informasi Tentang Tables
Term schema ini memiliki beberapa arti dalam hal database relasional. Di sini,
kita menggunakannya untuk merujuk pada desain struktur data, terutama tabel
database. Tabel terdiri dari baris dan kolom, dan setiap kolom dapat memiliki
tipe data yang berbeda. Kolom dan atribut mereka (tipe data, panjang, dan
sebagainya) membuat skema tabel.
Untuk mengambil informasi skema mudah, Anda dapat memanggil metode
GetSchemaTable pada pembaca data. Seperti namanya, metode ini
mengembalikan sebuah objek System.Data.DataTable, yang merupakan
representasi (skema) dari tabel bertanya dan berisi kumpulan baris dan kolom
dalam bentuk DataRow dan DataColumn objek. Ini baris dan kolom
dikembalikan sebagai koleksi benda-benda dengan sifat Baris dan Kolom dari
kelas DataTable.
Namun, di sinilah sedikit kebingungan biasanya terjadi. Benda kolom Data
adalah nilai-nilai tidak kolom; bukan, mereka adalah definisi kolom yang
mewakili dan mengontrol perilaku kolom individu. Mereka dapat dilingkarkan
melalui dengan menggunakan nama kolom pengindeks, dan mereka dapat
memberitahu Anda banyak tentang dataset.
F. Menggunakan Multiple Result Sets dengan Data Reader
Kadang-kadang anda mungkin ingin mendapatkan pekerjaan dilakukan dengan
cepat dan juga ingin query database dengan dua atau lebih pertanyaan pada
waktu yang sama. Dan, Anda tidak ingin kinerja aplikasi secara keseluruhan
menderita dengan cara apapun baik dengan instantiating lebih dari satu perintah
atau data reader atau dengan mendalam menggunakan benda-benda yang sama
berulang-ulang, menambah kode saat Anda pergi.
7/25/2019 Laporan Pemrogaman Chapter 12
5/17
Jadi, apakah ada cara Anda bisa mendapatkan pembaca data tunggal untuk loop
melalui beberapa set hasil? Ya, pembaca data yang memiliki metode,
NextResult (), bahwa kemajuan pembaca untuk hasil set berikutnya.
III. Alat dan Bahan
1. SQL Server 2014
2. Visual Basic NET
3. Northwind Sample Database
IV. Langkah Kerja
A.
Looping Melalui Sebuah Kumpulan Hasil1. Buat Projek Visual Basic Console Aplication baru dengan nama Chapter12.
2. Ubah nama projek Chapter12 menjadi DataLooper. Ubah nama file
Module1.vb menjadi DataLooper.vb.
3.
Ketikkan kode berikut pada halaman kode DataLooper.vb
ImportsSystemImportsSystem.DataImportsSystem.Data.SqlClientModuleDataLooper
SubMain()
7/25/2019 Laporan Pemrogaman Chapter 12
6/17
Dimconnstring AsString= ("Data Source=AJENG; IntegratedSecurity=True; database=northwind")
'create command (with both text and connection)Dimsql AsString= "select contactname from customers"'create connectionDimconn AsSqlConnection= NewSqlConnection(connstring)'membuat variabel timer
Dimtimer AsStopwatch= Stopwatch.StartNewTry
'Open connectionconn.Open()Dimcmd AsSqlCommand= NewSqlCommand(sql, conn)'create data readerDimrdr AsSqlDataReader= cmd.ExecuteReader'loop through result setWhile(rdr.Read)
'print one row at a timeConsole.WriteLine("{0}", rdr.GetValue(0))
EndWhile'close data readerrdr.Close()
Catche AsExceptionConsole.WriteLine("Error Occurred:"& e.ToString)
Finally' Close connectionconn.Close()
EndTry'menghenitkan penghitungan waktutimer.Stop()Console.WriteLine()Console.WriteLine("Total waktu = "&
timer.Elapsed.TotalSeconds & "detik")
EndSub
EndModule4. Jalankan DataLooper dengan menekan tombol Ctrl+F5
B. Menggunakan Ordinal Indexers
1. Tambahkan projek Visual Basic Console Aplication baru dengan nama
OrdinalIndexer pada Chapter12 solution.
7/25/2019 Laporan Pemrogaman Chapter 12
7/17
2. Ubah nama file Module1.vb menjadi OrdinalIndexer.vb
3.
Ketikkan kode berikut pada halaman kode OrdinalIndexer.vb
ImportsSystemImportsSystem.DataImportsSystem.Data.SqlClientModuleOrdinalIndexer
SubMain()Dimconnstring AsString= ("Data Source=AJENG; Integrated
Security=True; database=northwind")'create command (with both text and connection)Dimsql AsString= "select companyname,contactname from
customers where contactname like 'M%'"'create connectionDimconn AsSqlConnection= NewSqlConnection(connstring)'membuat variabel timerDimtimer AsStopwatch= Stopwatch.StartNewTry
'Open connectionconn.Open()Dimcmd AsSqlCommand= NewSqlCommand(sql, conn)'create data readerDimrdr AsSqlDataReader= cmd.ExecuteReader'print headings
Console.WriteLine("{0} {1}", _"Company Name".PadRight(28), _"Contact Name".PadRight(20))Console.WriteLine("{0} {1}", _"============".PadRight(28), _"============".PadRight(20))'loop through result setWhile(rdr.Read)
Console.WriteLine(" {0} | {1}", _rdr(0).ToString().PadLeft(25), _rdr(1).ToString().PadLeft(20))
EndWhile'close data readerrdr.Close()
Catche AsExceptionConsole.WriteLine("Error Occurred:"& e.ToString)
Finally' Close connectionconn.Close()
EndTry'menghenitkan penghitungan waktutimer.Stop()Console.WriteLine()Console.WriteLine("Total waktu = "&
timer.Elapsed.TotalSeconds & "detik")EndSub
EndModule
4.
Jalankan OrdinalIndexer dengan menekan tombol Ctrl+F5
7/25/2019 Laporan Pemrogaman Chapter 12
8/17
C. Menggunakan Type Accessor Methods
1. Tambahkan projek Visual Basic Console Aplication baru dengan nama
TypedAccessors pada Chapter12 solution.
2. Ubah nama file Module1.vb menjadi TypedAccessors.vb
3.
Ketikkan kode berikut pada halaman kode TypedAccessors.vb
ImportsSystemImportsSystem.DataImportsSystem.Data.SqlClientModuleTypedAccessors
SubMain()Dimconnstring AsString= ("Data Source=AJENG; Integrated
Security=True; database=northwind")'create command (with both text and connection)Dimsql AsString= "select
productname,unitprice,unitsinstock,discontinued from products"'create connectionDimconn AsSqlConnection= NewSqlConnection(connstring)'membuat variabel timerDimtimer AsStopwatch= Stopwatch.StartNewTry
'Open connectionconn.Open()'create commandDimcmd AsSqlCommand= NewSqlCommand(sql, conn)'create data readerDimrdr AsSqlDataReader= cmd.ExecuteReader'loop through result setWhile(rdr.Read)
7/25/2019 Laporan Pemrogaman Chapter 12
9/17
Console.WriteLine("{0} {1} {2} {3}", _rdr.GetString(0).PadRight(35), _rdr.GetDecimal(1), _rdr.GetInt16(2), _rdr.GetBoolean(3))
EndWhile'close data reader
rdr.Close()Catche AsException
Console.WriteLine("Error Occurred:"& e.ToString)Finally
' Close connectionconn.Close()
EndTry'menghenitkan penghitungan waktutimer.Stop()Console.WriteLine()Console.WriteLine("Total waktu = "&
timer.Elapsed.TotalSeconds & "detik")EndSub
EndModule4. Jalankan TypedAccessors dengan menekan tombol Ctrl+F5
D. Mendapatkan Informasi sebuah Result Set Menggunakan Data Reader
1. Tambahkan projek Visual Basic Console Aplication baru dengan nama
ResultSetInfo pada Chapter12 solution.
2.
Ubah nama file Module1.vb menjadi ResultSetInfo.vb
3. Ketikkan kode berikut pada halaman kode ResultSetInfo.vb
7/25/2019 Laporan Pemrogaman Chapter 12
10/17
ImportsSystemImportsSystem.DataImportsSystem.Data.SqlClientModuleResultSetInfo
SubMain()Dimconnstring AsString= ("Data Source=AJENG; Integrated
Security=True; database=northwind")'create command (with both text and connection)Dimsql AsString= "select contactname,contacttitle from
customers where contactname like 'M%'"'create connectionDimconn AsSqlConnection= NewSqlConnection(connstring)'membuat variabel timerDimtimer AsStopwatch= Stopwatch.StartNewTry
'Open connectionconn.Open()'create commandDimcmd AsSqlCommand= NewSqlCommand(sql, conn)'create data reader
Dimrdr AsSqlDataReader= cmd.ExecuteReader'get column namesConsole.WriteLine("Column Name:{0} {1}", _rdr.GetName(0).PadRight(20), _rdr.GetName(1))'get column data typesConsole.WriteLine("Data Type:{0} {1}", _rdr.GetDataTypeName(0).PadRight(20), _rdr.GetDataTypeName(1))Console.WriteLine()'loop through result setWhile(rdr.Read)
'get column values for all rowsConsole.WriteLine("{0} {1}", _
rdr.GetString(0).ToString().PadRight(25), _rdr.GetString(1))
EndWhile'get number of columnsConsole.WriteLine()Console.WriteLine("Number of columns in a row: {0}", _rdr.FieldCount)'get info about each columnConsole.WriteLine("'{0}' is at index {1} "& _"and its type is: {2}", _rdr.GetName(0), _rdr.GetOrdinal("contactname"), _rdr.GetFieldType(0))Console.WriteLine("'{0}' is at index {1} "& _
"and its type is: {2}", _rdr.GetName(1), _rdr.GetOrdinal("contacttitle"), _rdr.GetFieldType(1))'close data readerrdr.Close()
Catche AsExceptionConsole.WriteLine("Error Occurred:"& e.ToString)
Finally' Close connectionconn.Close()
EndTry'menghenitkan penghitungan waktutimer.Stop()
Console.WriteLine()Console.WriteLine("Total waktu = "&
timer.Elapsed.TotalSeconds & "detik")
7/25/2019 Laporan Pemrogaman Chapter 12
11/17
EndSub
EndModule
4. Jalankan ResultSetInfo dengan menekan tombol Ctrl+F5
E.
Mendapatkan Informasi Skema
1. Tambahkan projek Visual Basic Console Aplication baru dengan nama
SchemaTable pada Chapter12 solution.
2. Ubah nama file Module1.vb menjadi SchemaTable.vb
3. Ketikkan kode berikut pada halaman kode SchemaTable.vb
ImportsSystemImportsSystem.DataImportsSystem.Data.SqlClientModuleSchemaTable
SubMain()Dimconnstring AsString= ("Data Source=.\sqlexpress;
Integrated Security=True; database=northwind")'create command (with both text and connection)Dimsql AsString= "select * from employees"'create connectionDimconn AsSqlConnection= NewSqlConnection(connstring)'membuat variabel timerDimtimer AsStopwatch= Stopwatch.StartNewTry
'Open connectionconn.Open()'create command
7/25/2019 Laporan Pemrogaman Chapter 12
12/17
Dimcmd AsSqlCommand= NewSqlCommand(sql, conn)'create data readerDimrdr AsSqlDataReader= cmd.ExecuteReader'store Employees schema in a data tableDimschema AsDataTable= rdr.GetSchemaTableDimrow AsDataRowForEachrow Inschema.Rows
Dimcol AsDataColumnForEachcol Inschema.Columns
Console.WriteLine _((col.ColumnName + " = "+ row(col).ToString))
NextcolConsole.WriteLine("----------------")
Nextrow'close data readerrdr.Close()
Catche AsExceptionConsole.WriteLine("Error Occurred:"& e.ToString)
Finally' Close connectionconn.Close()
EndTry'menghenitkan penghitungan waktutimer.Stop()Console.WriteLine()Console.WriteLine("Total waktu = "&
timer.Elapsed.TotalSeconds & "detik")EndSub
EndModule
4. Jalankan SchemaTable dengan menekan tombol Ctrl+F5
F. Menanggani Multiple Result set
1. Tambahkan projek Visual Basic Console Aplication baru dengan nama
MultipleResult pada Chapter12 solution.
2. Ubah nama file Module1.vb menjadi MultipleResult.vb
7/25/2019 Laporan Pemrogaman Chapter 12
13/17
3. Ketikkan kode berikut pada halaman kode MultipleResult.vb
ImportsSystemImportsSystem.DataImportsSystem.Data.SqlClientModuleMultipleResult
SubMain()Dimconnstring AsString= ("Data Source=.\sqlexpress;
Integrated Security=True; database=northwind")
'query1Dimsql1 AsString= "select companyname,contactname fromcustomers where companyname like 'A%'"
'query2Dimsql2 AsString= "select firstname,lastname from
employees"'combine queriesDimsql AsString= sql1 + sql2'create connectionDimconn AsSqlConnection= NewSqlConnection(connstring)'membuat variabel timerDimtimer AsStopwatch= Stopwatch.StartNewTry
'Open connectionconn.Open()'create commandDimcmd AsSqlCommand= NewSqlCommand(sql, conn)'create data readerDimrdr AsSqlDataReader= cmd.ExecuteReaderDo
Whilerdr.Read()' Print one row at a timeConsole.WriteLine("{0} : {1}", rdr(0), rdr(1))
EndWhileConsole.WriteLine("".PadLeft(60, "=".ToString))
LoopWhilerdr.NextResult()Catche AsException
Console.WriteLine("Error Occurred:"& e.ToString)Finally
' Close connectionconn.Close()
EndTry'menghenitkan penghitungan waktutimer.Stop()Console.WriteLine()Console.WriteLine("Total waktu = "&
timer.Elapsed.TotalSeconds & "detik")EndSub
EndModule
4. Jalankan MultipleResult dengan menekan tombol Ctrl+F5
7/25/2019 Laporan Pemrogaman Chapter 12
14/17
V. Lembar Kerja
No Judul / Hasil / Analisa
1 Looping Melalui Sebuah Kumpulan Hasil
Ketika kita memanggil metode Read, nilai dari baris berikutnya akan disimpan di
objek SqlDataReader. Karena ini dilakukan looping, maka metode read dilakukan
berulangkali hingga batas akhir baris. Dan karena SqlDataReader berupa objek,
maka untuk dapat menampilkannya ke layar, harus diubah terlebih dahulu ke
String. Waktu yang dibuttuhkan untuk mengambil dan menampilkan data
adalah 1.7262174 detik.
2 Menggunakan Ordinal Indexers
Ordinal Indexer digunakan untuk mengambil data kolom dari hasil yang
ditetapkan. Dalam hal ini mengambil data dari kolom Contactname dengan
awalan M. Waktu yang dibuttuhkan untuk mengambil dan menampilkan
data adalah 0.0425616 detik.
3 Menggunakan Type Accessor Methods
7/25/2019 Laporan Pemrogaman Chapter 12
15/17
Teknik ini cepat dan aman, bahkan lebih cepat dari metode ToString.
Metode ini langsung mengambil data sesuai dengan type nya, sehinga
langsung dapat ditampilkan ke layar. Sedangkan metode ToString, data
yang diambil berupa objek, dan harus di konversikan ke dalam bentuk
String agar dapat ditampilkan. Waktu yang dibutuhkan untuk metode ini
adalah 0.90335587 detik.
4 Mendapatkan Informasi sebuah Result Set Menggunakan Data
Reader
Program ini digunakan untuk menampilkan data result dari kolom
contactname dan contacttitle dengan contactname diawali huruf M
menggunakan metode looping. bukan hanya data dari tabel yang
ditampilkan, tetapi informasi yang berkaitan dengan data juga ditampilkan.
Waktu yang dibutuhkan adaalh 0.0710254
5 Mendapatkan Informasi Skema
7/25/2019 Laporan Pemrogaman Chapter 12
16/17
Menampilkan data dari tabel employees beserta struktur datanya
menggunakan looping dan metode GetValue dan ToString. Waktu yang
dibutuhkan dalam sekali running adalah 5.9525474 detik
6 Menanggani Multiple Result set
Dalam kode program ini, diberikan contoh bagaimana dua perintah
sekaligus atau lebih dalam satu waktu.
7/25/2019 Laporan Pemrogaman Chapter 12
17/17
VI. Kesimpulan
Data Reader adalah objek yang mengimplementasikan interface
System.Data.IDataReader. merupakan pembaca data yang cepat, unbuffered,
forward-only, read-only yang terhubung dan mengambil data dari tabel perbaris.
Untuk menggunakan DataReader, kita tidak dapat langsung mendeklarasikan
DataReader. Kita juga harus membuat satu metode ExecuteReader, untuk
menjalankan DataReader.
Metode Accessor lebih cepat dan aman dari metode GetValue dan ToString
yang langsung mengambil data dari database sesuai dengan type datanya, tanpa
harus mengkonversikan type data terlebih dahulu.