Membuat dan Menambah Data di DataSet

Dataset adalah objek yang merepresentasikan data dan relasinya di memory. Strukturnya mirip dengan data di database. Dataset berisi koleksi dari datatable dan datarelation. Berikut adalah contoh dataset sederhana. Dataset Administrasi terdiri dari 2 datatable, Propinsi dan Kabupaten. Kedua datatable saling berhubungan melalui datarelation ‘propinsi-kabupaten’.

Biasanya relasi tabel seperti ini dibuat di database. Untuk dataset, bisa dibuat secara langsung menggunakan schema dengan menambahkan file dataset (xsd) di aplikasi. Baca artikel saya yang ini. Berikut ini adalah cara lain untuk membuat dataset, by code, berdasarkan diagram diatas.

Private Function GetDataSet() As dataset
	'buat dataset baru dengan nama 'Administrasi'
	Dim adm As New DataSet("Administrasi")

	'buat datatable di dalam dataset dengan nama 'propinsi'
	Dim propinsi As DataTable = adm.Tables.Add("Propinsi")

	'buat kolom2 dalam tabel propinsi
	propinsi.Columns.Add("id", GetType(Integer))
	propinsi.Columns.Add("Nama", GetType(String))

	'set kolom id sebagai primary key
	propinsi.PrimaryKey = New DataColumn() {propinsi.Columns("id")}

	'buat datatable kedua dalam dataset dengan nama 'kabupaten'
	Dim kabupaten As DataTable = adm.Tables.Add("Kabupaten")

	'buat kolom2 dalam tabel kabupaten
	kabupaten.Columns.Add("idProp", GetType(Integer))
	kabupaten.Columns.Add("idKab", GetType(Integer))
	kabupaten.Columns.Add("Nama", GetType(String))

	'set kolom idprop dan idkab sebagai primary key
	kabupaten.PrimaryKey = New DataColumn() {kabupaten.Columns("idProp"), kabupaten.Columns("idKab")}

	'buat relasi antara tabel propinsi dan kabupaten
	Dim Relasi As New DataRelation("propinsi_kabupaten", propinsi.Columns("id"), kabupaten.Columns("idProp"))
	adm.Relations.Add(Relasi)

	Return adm
End Function

Untuk menambahkan data kedalam datatable, tabel propinsi perlu diisi terlebih dahulu karena adanya relasi antara tabel propinsi dan kabupaten.

Dim ds As DataSet = GetDataSet()
Dim dtpropinsi As DataTable = ds.Tables("Propinsi")
Dim dtkabupaten As DataTable = ds.Tables("Kabupaten")

'menambah data ke table propinsi
Dim rowPropinsi As DataRow = dtpropinsi.NewRow()
rowPropinsi("id") = 31
rowPropinsi("Nama") = "DKI Jakarta"
dtpropinsi.Rows.Add(rowPropinsi)

'menambah data ke tabel kabupaten
Dim rowkabupaten As DataRow = dtkabupaten.NewRow()
rowkabupaten("idProp") = 31
rowkabupaten("idKab") = 71
rowkabupaten("Nama") = "Jakarta Selatan"
dtkabupaten.Rows.Add(rowkabupaten)

rowkabupaten = dtkabupaten.NewRow()
rowkabupaten("idProp") = 31
rowkabupaten("idKab") = 72
rowkabupaten("Nama") = "Jakarta Timur"
dtkabupaten.Rows.Add(rowkabupaten)

rowkabupaten = dtkabupaten.NewRow()
rowkabupaten("idProp") = 31
rowkabupaten("idKab") = 73
rowkabupaten("Nama") = "Jakarta Pusat"
dtkabupaten.Rows.Add(rowkabupaten)

Contoh diatas berjalan dengan baik, datatable dan kolomnya diakses berdasarkan string nama. Namun jika nama tabel atau nama kolom salah tulis, pasti akan muncul error. Ini akan merepotkan kalau dataset yang dibuat cukup besar, karena nama tabel dan nama-nama kolom di datatable harus ditulis secara tepat.

Cara lain yang lebih aman adalah dengan membuat strong typed dataset. Dengan strong type dataset, nama tabel dan kolom akan dedefinisikan sebagai property. Sehingga untuk mengkases datatable propinsi menjadi

Dim dtpropinsi As DataTable = Admin.Propinsi

Untuk membuat strong typed dataset diperlukan XML Schema. Berdasarkan dataset yang kita buat sebelumnya, kita cukup menjalankan method WriteXmlSchema()

Dim ds As DataSet = GetDataSet()
Dim fileschema As String = Server.MapPath("App_Code\Administrasi.xsd")
ds.WriteXmlSchema(fileschema)

Berikut contoh kode untuk menambahkan data ke dataset berdasarkan schema yang terbentuk.

Dim admin As New Administrasi

'menambah data ke table propinsi
Dim rowPropinsi As Administrasi.PropinsiRow = admin.Propinsi.AddPropinsiRow(31, "DKI Jakarta")

'menambah data ke tabel kabupaten
Dim rowkabupaten As Administrasi.KabupatenRow = admin.Kabupaten.NewRow()
rowkabupaten.PropinsiRow = rowPropinsi
rowkabupaten.idKab = 71
rowkabupaten.Nama = "Jakarta Selatan"
admin.Kabupaten.AddKabupatenRow(rowkabupaten)

rowkabupaten = admin.Kabupaten.NewRow()
rowkabupaten.PropinsiRow = rowPropinsi
rowkabupaten.idKab = 72
rowkabupaten.Nama = "Jakarta Timur"
admin.Kabupaten.AddKabupatenRow(rowkabupaten)

rowkabupaten = admin.Kabupaten.NewRow()
rowkabupaten.PropinsiRow = rowPropinsi
rowkabupaten.idKab = 73
rowkabupaten.Nama = "Jakarta Pusat"
admin.Kabupaten.AddKabupatenRow(rowkabupaten)

Bandingkan antara cara kedua ini dengan cara pertama. Cara kedua lebih aman, karena untuk mengakses datatabel dan kolom tidak lagi mengacu pada string ‘nama’.
Masih banyak hal tentang dataset yang tidak ditulis disini. Semoga bisa dituliskan lain kali.

Semoga bermanfaat. Happy coding

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 23 Maret 2011, in .NET and tagged , . Bookmark the permalink. 5 Komentar.

  1. brow.. cara untuk strong typed dataset bisa diperjelas… soalnya method Server.MapPath not declaration refrensinya dari mana…?
    thanks..

  2. om kalau Crystal reportnya melalui dataset seperti di atas, codingnya gimana om,,,

  3. Mas kalau untuk 3 tabel, caranya bagaimana yah ?, saya buat untuk report di xtrareport. thq sebelumnya.

  4. Gan bisa kasih tau gak, sumber sama tahun dr postingan agan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: