Spiga

Update data saat runtime di .NET 2.0 yang membingungkan

Bingung! Itu pertama kali yang saya rasakan saat pertama kali menggunakan .NET 2.0 dengan database SQLServer 2005 Express minggu lalu.

Seperti di tulisan lalu, saya mencoba membuat clone dari www.ilmukomputer.com dengan menggunakan VWD2005. Karena saya ingin mempelajari penggunaan database pada .NET 2.0, maka saya merubah data2 detail penulis dari file *.php menjadi record2 di database saya.

Saya membuat dan mengisi beberapa data awal dengan menggunakan SQL Server 2005 Express Management CTP. Karena menggunakan program itu agak2 ribet untuk melakukan input data, maka saya buat program kecil untuk input data dengan menggunakan C#.

Saya nggak usah cerita betapa mudahnya membuat aplikasi ini (hint: drag & drop). Hei! Emang ini aplikasi kecil, kok! Saya paling bikin kode untuk nge-save- data.

Aplikasi berjalan lancar. Data awal yang saya isi sebelumnya muncul dengan manisnya. Kemudian saya input beberapa data baru. Saya simpan. OK, selesai.

Saya jalankan website clone yang saya buat sebelumnya. Baru kelihatan masalahnya. Data baru yang saya input sebelumnya HILANG TAK BERBEKAS! Nah luh! Kemana perginya tuh bocah?

Saya cari deh. Saya pake SQL Server 2005 Express Management untuk membuka database tersebut. Eh, ternyata emang bener! Gak ada sama sekali data yang saya tambahkan tadi. Hmmm.... mulai bingung.

Cari di help (MSDN 2005 Express local). Gak ada (atau emang gak ketemu). Mau online gak bisa, PC di rumah bebas internet soalnya :(

OK, saya pikir saya yang salah. Saya bikin aplikasi yang sama, kali ini dengan menggunakan VB. Ini lebih gampang lagi, nggak ada satu code yang saya buat, termasuk untuk nge-save-nya! Kok bisa nggak sama feature-nya dengan C#, ya?

Saya jalanin itu aplikasi, isi dengan beberapa data baru. Close program. Run sekali lagi... ENG ING ENG.... Data yang baru tetep gak ada! Saya coba bolak balik tetap nggak ada perubahan. Pasti ada setting-an (properties) yang nggak beres nih. Saya utak atik beberapa properties, nggak ada yg ngaruh.

Ada satu property yg saya curigain, yaitu property "Copy to Output Directory" dari database object (klik database-nya dari Solution Explorer, terus liat dari Properties Window). Saya udah rubah2 isi property tsb, malah bikin error. Jadinya balikin lagi ke default-nya.

Cari punya cari, akhirnya ketemu solusinya. Alhamdulillah... :)

Dari ebook "Visual C# 2005 Express Edition: Let's Build a Program Now!" yang dikasih gratis bagi yg udah register VS2005 Express, ada satu boks yang sangat penting untuk dibaca. Di sana disebutkan bahwa kalo mau bikin aplikasi database harus diperhatikan konsep build-nya. Maksudnya, saat melakukan build, compiler akan membuat copy dari file database ke dalam folder [nama project]/bin/debug. Sehingga file database menjadi 2 buah (yg original dan yg dalam folder bin/debug). Yang pakai saat kita menggunakan database explorer adalah yang asli, sedangkan yang dipakai saat program dijalankan adalah ang terdapat dalam folder bin/debug.

Pantesan...

Work around yang disarankan dalam buku itu adalah dengan cara melakukan copy file database ke dalam folder bin/debug kemudian merubah property "Copy to Output Directory" dari database object menjadi "Do not copy". Kekurangannya adalah, bila kita ingin menggunakan database tersebut, baik dalam web application atau mau merubah struktur database, anda harus melakukan copy dari "bin/debug" ke folder aslinya.

Gitu lho....

biar jelasnya maen ke sini aja:
http://blogs.msdn.com/smartclientdata/archive/2005/08/26/456886.aspx