Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
Kelas DataSet dan kelas terkait adalah teknologi .NET Framework warisan dari awal 2000-an yang memungkinkan aplikasi untuk bekerja dengan data dalam memori saat aplikasi terputus dari database. Teknologi ini sangat berguna untuk aplikasi yang memungkinkan pengguna memodifikasi data dan mempertahankan perubahan kembali ke database. Meskipun himpunan data adalah teknologi yang terbukti berhasil, pendekatan yang direkomendasikan untuk aplikasi .NET baru adalah menggunakan Entity Framework Core. Entity Framework menyediakan cara yang lebih alami untuk bekerja dengan data tabular sebagai model objek, dan memiliki antarmuka pemrograman yang lebih sederhana.
Himpunan data adalah salinan data dalam memori. Jika Anda memodifikasi data tersebut, adalah praktik yang baik untuk menyimpan perubahan tersebut kembali ke database. Anda melakukan ini dengan salah satu dari tiga cara:
Dengan memanggil salah satu metode
UpdateTableAdapterDengan memanggil salah satu metode
DBDirectdari TableAdapterDengan memanggil
UpdateAllmetode pada TableAdapterManager yang dihasilkan Visual Studio untuk Anda saat himpunan data berisi tabel yang terkait dengan tabel lain dalam himpunan data
Saat Anda mengikat data tabel himpunan data untuk mengontrol pada halaman Formulir Windows atau XAML, arsitektur pengikatan data melakukan semua pekerjaan untuk Anda.
Jika Anda terbiasa dengan TableAdapters, Anda dapat melompat langsung ke salah satu topik berikut:
| Topik | Deskripsi |
|---|---|
| Menyisipkan rekaman baru ke dalam database | Cara melakukan pembaruan dan penyisipan menggunakan objek TableAdapters atau Command |
| Memperbarui data dengan menggunakan TableAdapter | Cara melakukan pembaruan dengan TableAdapters |
| pembaruan hierarkis | Cara melakukan pembaruan dari himpunan data dengan dua atau beberapa tabel terkait |
| Mengatasi pengecualian konkurensi | Cara menangani pengecualian ketika dua pengguna mencoba mengubah data yang sama dalam database secara bersamaan |
| Cara: Menyimpan data dengan menggunakan transaksi | Cara menyimpan data dalam transaksi menggunakan Sistem. Namespace transaksi dan objek TransactionScope |
| Menyimpan data dalam transaksi | Tutorial yang menciptakan aplikasi Windows Forms untuk menunjukkan cara menyimpan data ke dalam database dalam sebuah transaksi |
| Menyimpan data ke database (beberapa tabel) | Cara mengedit rekaman dan menyimpan perubahan dalam beberapa tabel kembali ke database |
| Menyimpan data dari objek ke database | Cara meneruskan data dari objek yang tidak ada dalam himpunan data ke database dengan menggunakan metode TableAdapter DbDirect |
| Menyimpan data dengan metode TableAdapter DBDirect | Cara menggunakan TableAdapter untuk mengirim kueri SQL langsung ke database |
| Menyimpan himpunan data sebagai XML | Cara menyimpan himpunan data ke dokumen XML |
Pembaruan dua tahap
Memperbarui sumber data adalah proses dua langkah. Langkah pertama adalah memperbarui himpunan data dengan rekaman baru, rekaman yang diubah, atau rekaman yang dihapus. Jika aplikasi Anda tidak pernah mengirim perubahan tersebut kembali ke sumber data, maka Anda selesai dengan pembaruan.
Jika Anda mengirim kembali perubahan ke database, langkah kedua diperlukan. Jika Anda tidak menggunakan kontrol terikat data, Anda harus memanggil Update metode TableAdapter (atau adaptor data) yang sama dengan yang Anda gunakan untuk mengisi himpunan data secara manual. Namun, Anda juga dapat menggunakan adaptor yang berbeda, misalnya, untuk memindahkan data dari satu sumber data ke sumber data lain atau untuk memperbarui beberapa sumber data. Jika Anda tidak menggunakan pengikatan data, dan menyimpan perubahan untuk tabel terkait, Anda harus menginstansiasi variabel dari kelas TableAdapterManager yang dibuat secara otomatis secara manual, lalu memanggil metodenya UpdateAll.
Himpunan data berisi kumpulan tabel, yang berisi kumpulan baris. Jika Anda ingin memperbarui sumber data yang mendasar nanti, Anda harus menggunakan metode pada DataTable.DataRowCollection properti saat menambahkan atau menghapus baris. Metode tersebut melakukan pelacakan perubahan yang diperlukan untuk memperbarui sumber data. Jika Anda memanggil RemoveAt koleksi pada properti 'Rows', penghapusan tidak akan diteruskan kembali ke database.
Menggabungkan himpunan data
Anda dapat memperbarui konten himpunan data dengan menggabungkannya dengan himpunan data lain. Ini melibatkan penyalinan konten himpunan data sumber ke dalam himpunan data panggilan (disebut sebagai himpunan data target ). Saat Anda menggabungkan himpunan data, rekaman baru dalam himpunan data sumber ditambahkan ke himpunan data target. Selain itu, kolom tambahan dalam himpunan data sumber ditambahkan ke himpunan data target. Menggabungkan himpunan data berguna saat Anda memiliki himpunan data lokal dan Anda mendapatkan himpunan data kedua dari aplikasi lain. Ini juga berguna ketika Anda mendapatkan himpunan data kedua dari komponen seperti layanan web XML, atau ketika Anda perlu mengintegrasikan data dari beberapa himpunan data.
Saat menggabungkan himpunan data, Anda dapat meneruskan argumen Boolean (preserveChanges) yang memberi tahu Merge metode apakah akan mempertahankan modifikasi yang ada dalam himpunan data target. Karena himpunan data mempertahankan beberapa versi rekaman, penting untuk diingat bahwa lebih dari satu versi rekaman sedang digabungkan. Tabel berikut ini memperlihatkan bagaimana rekaman dalam dua himpunan data digabungkan:
| DataRowVersion | Himpunan data target | Himpunan data sumber |
|---|---|---|
| Versi Asli | James Wilson | James C. Wilson |
| Saat ini | Jim Wilson | James C. Wilson |
Memanggil Merge metode pada tabel sebelumnya dengan preserveChanges=false targetDataset.Merge(sourceDataset) menghasilkan data berikut:
| DataRowVersion | Himpunan data target | Himpunan data sumber |
|---|---|---|
| Versi Asli | James C. Wilson | James C. Wilson |
| Saat ini | James C. Wilson | James C. Wilson |
Memanggil Merge metode dengan preserveChanges = true targetDataset.Merge(sourceDataset, true) menghasilkan data berikut:
| DataRowVersion | Himpunan target data | Himpunan data sumber |
|---|---|---|
| Versi Asli | James C. Wilson | James C. Wilson |
| Saat ini | Jim Wilson | James C. Wilson |
Perhatian
Dalam skenario preserveChanges = true, jika metode RejectChanges dipanggil pada rekaman dalam himpunan data target, maka memulihkan data asli dari himpunan data sumber. Ini berarti bahwa jika Anda mencoba memperbarui sumber data asli dengan himpunan data target, mungkin tidak dapat menemukan baris asli untuk diperbarui. Anda dapat mencegah pelanggaran konkurensi dengan mengisi himpunan data lain dengan rekaman yang diperbarui dari sumber data lalu melakukan penggabungan untuk mencegah pelanggaran konkurensi. (Pelanggaran konkurensi terjadi ketika pengguna lain memodifikasi rekaman di sumber data setelah himpunan data diisi.)
Memperbarui batasan
Untuk membuat perubahan pada baris data yang sudah ada, tambahkan, atau perbarui data di kolom individual. Jika himpunan data berisi batasan (seperti kunci asing atau batasan yang tidak dapat diubah ke null), ada kemungkinan bahwa rekaman dapat sementara berada dalam status kesalahan saat Anda memperbaruinya. Artinya, itu bisa dalam status kesalahan setelah Anda selesai memperbarui satu kolom tetapi sebelum Anda sampai ke kolom berikutnya.
Untuk mencegah pelanggaran batasan dini, Anda dapat menangguhkan sementara batasan pembaruan. Ini melayani dua tujuan:
Ini mencegah kesalahan terjadi setelah Anda selesai memperbarui satu kolom tetapi belum mulai memperbarui kolom lainnya.
Ini mencegah peristiwa pembaruan tertentu dinaikkan (peristiwa yang sering digunakan untuk validasi).
Nota
Di Windows Forms, arsitektur pengikatan data yang disertakan dalam datagrid menangguhkan pemeriksaan batasan hingga fokus bergerak keluar dari baris, dan Anda tidak perlu secara eksplisit memanggil BeginEditmetode , , EndEditatau CancelEdit .
Batasan secara otomatis dinonaktifkan saat Merge metode dipanggil pada himpunan data. Ketika penggabungan selesai, jika ada batasan pada himpunan data yang tidak dapat diaktifkan, akan ConstraintException dilemparkan. Dalam situasi ini, EnforceConstraints properti ditetapkan ke false, dan semua pelanggaran batasan harus diselesaikan sebelum mengatur ulang EnforceConstraints properti ke true.
Setelah menyelesaikan pembaruan, Anda dapat mengaktifkan kembali pemeriksaan batasan, yang juga dapat mengaktifkan kembali peristiwa pembaruan dan menaikkannya.
Untuk informasi selengkapnya tentang menangguhkan peristiwa, lihat Menonaktifkan batasan saat mengisi himpunan data.
Kesalahan pembaruan himpunan data
Saat Anda memperbarui rekaman dalam himpunan data, ada kemungkinan kesalahan. Misalnya, Anda mungkin secara tidak sengaja menulis data dari jenis yang salah ke kolom, atau data yang terlalu panjang, atau data yang memiliki beberapa masalah integritas lainnya. Atau, Anda mungkin memiliki pemeriksaan validasi khusus aplikasi yang dapat menimbulkan kesalahan kustom selama tahap peristiwa pembaruan apa pun. Untuk informasi selengkapnya, lihat Memvalidasi data dalam himpunan data.
Mempertahankan informasi tentang perubahan
Informasi tentang perubahan dalam himpunan data dipertahankan dengan dua cara: dengan menandai baris yang menunjukkan bahwa mereka telah berubah (RowState), dan dengan menyimpan beberapa salinan rekaman (DataRowVersion). Dengan menggunakan informasi ini, proses dapat menentukan apa yang telah berubah dalam himpunan data dan dapat mengirim pembaruan yang sesuai ke sumber data.
Properti RowState
Properti RowStateDataRow objek adalah nilai yang menyediakan informasi tentang status baris data tertentu.
Tabel berikut ini merinci nilai-nilai yang mungkin dari enumerasi DataRowState.
| Nilai DataRowState | Deskripsi |
|---|---|
| Added | Baris telah ditambahkan sebagai item ke DataRowCollection. (Baris dalam status ini tidak memiliki versi asli terkait karena tidak ada saat metode AcceptChanges terakhir kali dipanggil). |
| Deleted | Baris dihapus menggunakan objek DataRowDelete. |
| Detached | Baris telah dibuat tetapi bukan bagian dari DataRowCollection. Objek DataRow berada dalam status ini segera setelah dibuat, sebelum ditambahkan ke koleksi, dan setelah dihapus dari koleksi. |
| Modified | Nilai kolom dalam baris telah berubah dalam beberapa cara. |
| Unchanged | Baris belum berubah sejak terakhir kali AcceptChanges dipanggil. |
Enumerasi DataRowVersion
Himpunan data mempertahankan beberapa versi rekaman. Bidang DataRowVersion digunakan saat mengambil nilai yang ditemukan dalam DataRow dengan menggunakan properti Item[] atau metode GetChildRows dari objek DataRow.
Tabel berikut merinci nilai-nilai yang mungkin dari enumerasi DataRowVersion.
| Nilai DataRowVersion | Deskripsi |
|---|---|
| Current | Versi rekaman saat ini berisi semua modifikasi yang telah dilakukan pada rekaman sejak terakhir kali AcceptChanges dipanggil. Jika baris telah dihapus, tidak ada versi saat ini. |
| Default | Nilai default rekaman, seperti yang ditentukan oleh skema himpunan data atau sumber data. |
| Original | Versi asli rekaman adalah salinan rekaman karena terakhir kali perubahan dilakukan dalam himpunan data. Dalam istilah praktis, ini biasanya adalah versi dari rekaman seperti yang dibaca dari sumber data. |
| Proposed | Versi catatan yang diusulkan yang tersedia sementara saat Anda berada di tengah pembaruan — yaitu, antara saat Anda memanggil metode BeginEdit dan metode EndEdit. Anda biasanya mengakses versi yang diusulkan dari sebuah rekaman dalam handler untuk peristiwa seperti RowChanging. Memanggil CancelEdit metode membalikkan perubahan dan menghapus versi baris data yang diusulkan. |
Versi asli dan saat ini berguna saat informasi pembaruan dikirimkan ke sumber data. Biasanya, ketika pembaruan dikirim ke sumber data, informasi baru untuk database berada dalam versi rekaman saat ini. Informasi dari versi asli digunakan untuk menemukan rekaman yang akan diperbarui.
Misalnya, dalam kasus di mana kunci utama rekaman diubah, Anda memerlukan cara untuk menemukan rekaman yang benar di sumber data untuk memperbarui perubahan. Jika tidak ada versi asli, maka rekaman kemungkinan besar akan ditambahkan ke sumber data, menghasilkan tidak hanya dalam catatan ekstra yang tidak diinginkan, tetapi dalam satu catatan yang tidak akurat dan kedaluarsa. Dua versi juga digunakan dalam kontrol konkurensi. Anda dapat membandingkan versi asli dengan rekaman di sumber data untuk menentukan apakah rekaman telah berubah sejak dimuat ke dalam himpunan data.
Versi yang diusulkan berguna ketika Anda perlu melakukan validasi sebelum benar-benar melakukan perubahan pada himpunan data.
Bahkan jika rekaman telah berubah, tidak selalu ada versi asli atau saat ini dari baris tersebut. Saat Anda menyisipkan baris baru ke dalam tabel, tidak ada versi asli, hanya versi saat ini. Demikian pula, jika Anda menghapus baris dengan memanggil metode tabel Delete , ada versi asli, tetapi tidak ada versi saat ini.
Anda dapat menguji untuk melihat apakah versi rekaman tertentu ada dengan mengkueri metode baris HasVersion data. Anda dapat mengakses salah satu dari kedua versi rekaman dengan meneruskan nilai enumerasi DataRowVersion sebagai argumen opsional saat Anda meminta nilai suatu kolom.
Dapatkan rekaman yang diubah
Ini adalah praktik umum untuk tidak memperbarui setiap rekaman dalam himpunan data. Misalnya, pengguna mungkin bekerja dengan kontrol Windows Forms DataGridView yang menampilkan banyak rekaman. Namun, pengguna mungkin hanya memperbarui beberapa rekaman, menghapus satu, dan menyisipkan yang baru. Himpunan data dan tabel data menyediakan metode (GetChanges) untuk mengembalikan hanya baris yang telah dimodifikasi.
Anda dapat membuat subset rekaman yang diubah menggunakan GetChanges metode tabel data (GetChanges) atau himpunan data (GetChanges) itu sendiri. Jika Anda memanggil metode untuk tabel data, metode tersebut mengembalikan salinan tabel hanya dengan rekaman yang diubah. Demikian pula, jika Anda memanggil metode pada himpunan data, Anda mendapatkan himpunan data baru dengan hanya rekaman yang diubah di dalamnya.
GetChanges dengan sendirinya mengembalikan semua rekaman yang diubah. Sebaliknya, dengan meneruskan DataRowState yang diinginkan sebagai parameter ke metode GetChanges, Anda dapat menentukan subset rekaman yang diubah sesuai keinginan Anda: rekaman yang baru ditambahkan, rekaman yang ditandai untuk penghapusan, rekaman yang dilepas, atau rekaman yang dimodifikasi.
Mendapatkan subset rekaman yang diubah berguna saat Anda ingin mengirim rekaman ke komponen lain untuk diproses. Alih-alih mengirim seluruh himpunan data, Anda dapat mengurangi overhead berkomunikasi dengan komponen lain dengan hanya mendapatkan rekaman yang dibutuhkan komponen.
Menerapkan perubahan dalam himpunan data
Saat perubahan dilakukan dalam himpunan data, properti RowState dari baris yang diubah diperbarui. Versi rekaman asli dan terbaru dibuat, dikelola, dan disediakan untuk Anda oleh properti RowVersion. Metadata yang disimpan di properti baris yang diubah ini diperlukan untuk mengirim pembaruan yang benar ke sumber data.
Jika perubahan mencerminkan status sumber data saat ini, Anda tidak perlu lagi mempertahankan informasi ini. Biasanya, ada dua kali ketika himpunan data dan sumbernya sinkron:
Segera setelah Anda memuat informasi ke dalam himpunan data, seperti saat Anda membaca data dari sumbernya.
Setelah mengirim perubahan dari himpunan data ke sumber data (tetapi tidak sebelumnya, karena Anda akan kehilangan informasi perubahan yang diperlukan untuk mengirim perubahan ke database).
Anda dapat menerapkan perubahan yang tertunda pada himpunan AcceptChanges data dengan memanggil metode . Biasanya, AcceptChanges dipanggil pada waktu berikut:
Setelah Anda memuat himpunan data. Jika Anda memuat himpunan data dengan memanggil metode TableAdapter
Fill, maka adapter secara otomatis melakukan perubahan untuk Anda. Namun, jika Anda memuat himpunan data dengan menggabungkan himpunan data lain ke dalamnya, maka Anda harus melakukan perubahan secara manual.Setelah Anda mengirim perubahan himpunan data ke proses lain, seperti layanan web XML.
Perhatian
Menerapkan perubahan dengan cara ini menghapus informasi perubahan apa pun. Jangan menerapkan perubahan hingga Anda selesai melakukan operasi yang mengharuskan aplikasi Anda mengetahui perubahan apa yang telah dilakukan dalam himpunan data.
Metode ini mencapai hal-hal berikut:
Menulis versi Current dari sebuah rekaman ke dalam versi Original dan menimpa versi aslinya.
Menghapus baris apa pun di mana properti RowState diatur ke Deleted.
Mengatur properti RowState pada sebuah rekaman ke Unchanged.
Metode AcceptChanges ini tersedia pada tiga tingkat. Anda dapat memanggilnya pada DataRow objek untuk menerapkan perubahan hanya untuk baris tersebut. Anda juga dapat memanggilnya pada objek DataTable untuk menyimpan semua baris dalam tabel. Terakhir, Anda dapat memanggilnya pada objek DataSet untuk menerapkan semua perubahan yang tertunda di semua rekaman semua tabel set data.
Tabel berikut menjelaskan perubahan mana yang diterapkan berdasarkan objek apa yang dipanggil metode:
| Metode | Hasil |
|---|---|
| System.Data.DataRow.AcceptChanges | Perubahan hanya diterapkan pada baris tertentu. |
| System.Data.DataTable.AcceptChanges | Perubahan diterapkan pada semua baris dalam tabel tertentu. |
| System.Data.DataSet.AcceptChanges | Perubahan diterapkan pada semua baris di semua tabel himpunan data. |
Nota
Jika Anda memuat himpunan data dengan memanggil metode TableAdapter Fill , Anda tidak perlu menerima perubahan secara eksplisit. Secara default, Fill metode memanggil AcceptChanges metode setelah selesai mengisi tabel data.
Metode terkait, RejectChanges, membalikkan efek perubahan dengan menyalin kembali versi Original ke dalam versi Current dari rekaman. Ini juga mengatur RowState dari setiap rekaman kembali ke Unchanged.
Validasi Data
Untuk memverifikasi bahwa data dalam aplikasi Anda memenuhi persyaratan proses yang diteruskan, Anda sering harus menambahkan validasi. Ini mungkin melibatkan pemeriksaan bahwa entri pengguna dalam formulir sudah benar, memvalidasi data yang dikirim ke aplikasi Anda oleh aplikasi lain, atau bahkan memeriksa informasi yang dihitung dalam komponen Anda termasuk dalam batasan sumber data dan persyaratan aplikasi Anda.
Anda dapat memvalidasi data dengan beberapa cara:
Di lapisan bisnis, dengan menambahkan kode ke aplikasi Anda untuk memvalidasi data. Himpunan data adalah satu tempat Anda dapat melakukan ini. Himpunan data memberikan beberapa keuntungan dari validasi back-end — seperti kemampuan untuk memvalidasi perubahan saat nilai kolom dan baris berubah. Untuk informasi selengkapnya, lihat Memvalidasi data dalam himpunan data.
Di lapisan presentasi, dengan menambahkan validasi ke formulir. Untuk informasi selengkapnya, lihat Validasi input pengguna di Formulir Windows.
Di ujung belakang data, dengan mengirim data ke sumber data — misalnya, database — dan memungkinkannya untuk menerima atau menolak data. Jika Anda bekerja dengan database yang memiliki fasilitas canggih untuk memvalidasi data dan memberikan informasi kesalahan, ini bisa menjadi pendekatan praktis karena Anda dapat memvalidasi data di mana pun asalnya. Namun, pendekatan ini mungkin tidak mengakomodasi persyaratan validasi khusus aplikasi. Selain itu, meminta sumber data untuk memvalidasi data dapat mengakibatkan banyak permintaan ke sumber data, tergantung pada bagaimana aplikasi Anda memfasilitasi mengatasi kesalahan validasi yang dimunculkan oleh back-end.
Penting
Saat menggunakan perintah data dengan CommandType properti yang diatur ke Text, periksa dengan cermat informasi yang dikirim dari klien sebelum meneruskannya ke database Anda. Pengguna berbahaya mungkin mencoba mengirim (menyuntikkan) pernyataan SQL yang dimodifikasi atau tambahan dalam upaya untuk mendapatkan akses yang tidak sah atau merusak database. Sebelum Anda mentransfer input pengguna ke database, selalu verifikasi bahwa informasi tersebut valid. Ini adalah praktik terbaik untuk selalu menggunakan kueri berparameter atau prosedur tersimpan jika memungkinkan.
Mengirimkan pembaruan ke sumber data
Setelah perubahan dilakukan dalam himpunan data, Anda dapat mengirimkan perubahan ke sumber data. Paling umum, Anda melakukan ini dengan memanggil Update metode TableAdapter (atau adaptor data). Metode mengulangi setiap rekaman dalam tabel data, menentukan jenis pembaruan apa yang diperlukan (memperbarui, menyisipkan, atau menghapus), jika ada, lalu menjalankan perintah yang sesuai.
Sebagai ilustrasi tentang bagaimana pembaruan dibuat, misalkan aplikasi Anda menggunakan himpunan data yang berisi satu tabel data. Aplikasi mengambil dua baris dari database. Setelah pengambilan, tabel data dalam memori terlihat seperti ini:
(RowState) CustomerID Name Status
(Unchanged) c200 Robert Lyon Good
(Unchanged) c400 Nancy Buchanan Pending
Aplikasi Anda mengubah status Nancy Buchanan menjadi "Disukai." Akibat perubahan ini, nilai properti untuk baris tersebut RowState berubah dari Unchanged ke Modified. Nilai RowState properti untuk baris pertama tetap Unchanged. Tabel data sekarang terlihat seperti ini:
(RowState) CustomerID Name Status
(Unchanged) c200 Robert Lyon Good
(Modified) c400 Nancy Buchanan Preferred
Aplikasi Anda sekarang memanggil Update metode untuk mengirimkan himpunan data ke database. Metode ini memeriksa setiap baris secara bergantian. Untuk baris pertama, metode tidak mengirimkan pernyataan SQL ke database karena baris tersebut tidak berubah sejak awalnya diambil dari database.
Namun, untuk baris kedua, Update metode secara otomatis memanggil perintah data yang benar dan mengirimkannya ke database. Sintaks spesifik pernyataan SQL bergantung pada dialek SQL yang didukung oleh penyimpanan data yang mendasar. Tetapi, sifat umum berikut dari pernyataan SQL yang dikirimkan patut diperhatikan:
Pernyataan SQL yang ditransmisikan adalah
UPDATE. Adaptor tahu untuk menggunakanUPDATEpernyataan karena nilai RowState properti adalah Modified.Pernyataan SQL yang ditransmisikan mencakup klausa
WHEREyang menunjukkan bahwa target dari pernyataanUPDATEadalah baris di manaCustomerID = 'c400'. Bagian pernyataanSELECTini membedakan baris target dari yang lain karenaCustomerIDadalah kunci utama tabel target. Informasi untukWHEREklausul berasal dari versi asli rekaman (DataRowVersion.Original), jika nilai yang diperlukan untuk mengidentifikasi baris telah berubah.Pernyataan SQL yang ditransmisikan menyertakan
SETklausul, untuk mengatur nilai baru kolom yang dimodifikasi.Nota
Jika properti TableAdapter
UpdateCommandtelah diatur ke nama prosedur tersimpan, adaptor tidak membuat pernyataan SQL. Sebaliknya, ia memanggil prosedur tersimpan dengan parameter yang diteruskan secara sesuai.
Meneruskan parameter
Anda biasanya menggunakan parameter untuk meneruskan nilai untuk rekaman yang akan diperbarui dalam database. Saat metode TableAdapter Update menjalankan UPDATE pernyataan, metode perlu mengisi nilai parameter. Ini mengambil nilai-nilai ini dari koleksi Parameters untuk perintah data yang sesuai — dalam hal ini, objek UpdateCommand di dalam TableAdapter.
Jika Anda telah menggunakan alat Visual Studio untuk menghasilkan adaptor data, UpdateCommand objek berisi kumpulan parameter yang sesuai dengan setiap tempat penampung parameter dalam pernyataan.
Properti System.Data.SqlClient.SqlParameter.SourceColumn setiap parameter menunjuk ke kolom dalam tabel data. Misalnya, properti SourceColumn untuk parameter au_id dan Original_au_id diatur ke kolom dalam tabel data yang berisi id penulis. Ketika metode Update adaptor dijalankan, metode ini membaca kolom id penulis dari catatan yang sedang diperbarui dan mengisi nilai ke dalam pernyataan tersebut.
Dalam pernyataan UPDATE , Anda perlu menentukan nilai baru (nilai yang akan ditulis ke rekaman) serta nilai lama (sehingga rekaman dapat ditemukan di database). Oleh karena itu, ada dua parameter untuk setiap nilai: satu untuk SET klausul dan yang berbeda untuk WHERE klausa. Kedua parameter membaca data dari rekaman yang sedang diperbarui, tetapi mereka mendapatkan versi nilai kolom yang berbeda berdasarkan properti parameter SourceVersion . Parameter untuk SET klausul mendapatkan versi saat ini, dan parameter untuk WHERE klausul mendapatkan versi asli.
Nota
Anda juga dapat mengatur nilai dalam koleksi Parameters sendiri dalam pengkodean, yang biasanya dilakukan dalam penanganan acara untuk acara adaptor data RowChanging.