Apa yang akan saya pelajari?
Saya akan menjelaskan pengeditan data dalam kerangka .NET yang akan mencakup penyisipan, pemutakhiran dan penghapusan data, serta mencakup pengeditan data transaksional.
Requirements
- NET Framework
- Perpustakaan DAAB
Difficulty
- Intermediate.
Tutorial Contents
- Memasukkan data dengan ADO.NET
- Memasukkan Data dengan DAAB
- Memasukkan Data dengan Stored Procedure
- Mengedit dan Memperbarui Data
- Pengeditan Data Kustom
- Menghapus data
- Penyuntingan transaksional
Memasukkan data dengan ADO.NET
Memasukkan data dengan ADO.NET adalah konsep yang sangat sederhana, dan contoh pertama kami akan menunjukkan dengan jelas hal ini. Terlebih lagi, dengan setiap bagian berikut kita akan memperluas contoh utama ini saat kita mengedit data dan menghapusnya.
Sekarang, sebelum benar-benar memasukkan data, kami akan secara singkat memeriksa perbedaan utama antara ADO.NET dan DAAB konvensional. Pertama, DAAB adalah bagian dari ADO.NET, namun perbedaan utamanya adalah cara DAAB furthers dan merangkum metode ADO.NET standar. Akses dan manipulasi data pra-DAAB biasanya dikelola dengan menggunakan objek Connection, Command dan atau DataAdapter. Pendekatan akses data ini membayangi ASP klasik. Sekarang mari lihat sisipan data ADO.NET yang khas:
Tapi tunggu dulu, bandingkan sekarang dengan prosedur yang sama persis menggunakan DAAB:
Perbedaan besar, bukan? Itulah keindahan dan alasannya dalam menerapkan Blok Aplikasi Akses Data mulai dari sini.
Memasukkan Data dengan DAAB
Sekarang, mari kita lihat contoh pertama kami di bawah ini, pada Gambar 1. Apa yang kita miliki di sini, adalah halaman .aspx yang terdiri dari beberapa kolom formulir, dan datagrid untuk hasil kita. Tujuan kami di sini adalah agar formulir diisi, diserahkan dan data dimasukkan ke database kami dengan hasilnya ditampilkan kembali kepada kami.
Curriculum
Sekarang mari kita lihat bagaimana kita bisa melakukannya. Pertama, seperti ADO.NET biasa, baik System.Data dan System.Data.SqlClient Namespaces masih diperlukan. Dan karena kita akan berurusan dengan DAAB secara ketat, kita harus mengimpor namespace ini juga:
Tercantum di bawah ini adalah keseluruhan kode yang akan memasukkan data ke dalam database kita menggunakan query teks sederhana. Salin dan tempelkan ini ke editor teks Anda, dan siapkan semuanya, dan kami akan memeriksa apa yang akan terjadi setelahnya.
<%@ Page Language="C#" Debug="False" Strict="True" Explicit="True" %><%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="Microsoft.ApplicationBlocks.Data" %><html>
<script language="C#" runat="server">
SqlConnection objConnect;protected void Page_Load(Object Src, EventArgs E) {objConnect = new SqlConnection ("server=(local);database=pubs;uid=sa;pwd=;");if (!IsPostBack) {BindData();
}
}
public void AddNewStore(Object sender, EventArgs E) {String insertSQL = "Insert into Stores (stor_id, stor_name, stor_address, city, state, zip) values ('" + storeid.Value + "', '" + storename.Value + "', '" + address.Value + "', '" + city.Value + "', '" + state.Value + "', '" + zip.Value + "')";try {SqlHelper.ExecuteNonQuery (objConnect, CommandType.Text, insertSQL);
} catch (SqlException err) {if (err.Number == 2627) {OutputMsg.InnerHtml = "<font size=4><b>Sorry, record already exists. Please try again.</b></font>";
} else {OutputMsg.InnerHtml = err.Message.ToString();
}OutputMsg.Style["color"] = "red";
}BindData();ClearAll(); //Clear form fields after insert
}
public void BindData() {String sqlQuery = "Select stor_id As Id, stor_name As Store, stor_address As Address, City, State, Zip from Stores";MyDataGrid.DataSource = SqlHelper.ExecuteDataSet (objConnect, CommandType.Text, sqlQuery);
MyDataGrid.DataBind();
}
public void ClearAll() {storeid.Value = "";
storename.Value = "";
address.Value = "";
city.Value = "";
state.Value = "";
zip.Value = "";
}
</script><body onLoad="document.forms[0].elements[1].focus();">
<form runat="server"><h3>Inserting Data into a database</h3><table width="75%">
<tr>
<td valign="top"><table>
<tr>
<td>Store ID: </td>
<td><input type="text" id="storeid" runat="server" /> - 1234<br></td>
</tr>
<tr>
<td>Store Name: </td>
<td><input type="text" id="storename" runat="server" /> - Cafe Luminesce<br></td>
</tr>
<tr>
<td>Address: </td>
<td><input type="text" id="address" runat="server" /> - 15 Miami Way<br> </td>
</tr>
<tr>
<td>City: </td>
<td><input type="text" id="city" runat="server" /> - Tampa Bay<br></td>
</tr>
<tr>
<td>State: </td>
<td><input type="text" id="state" runat="server" /> - FL<br></td>
</tr>
<tr>
<td>Zip Code: </td>
<td><input type="text" id="zip" runat="server" /> - 34902<br></td>
</tr>
<tr>
<td><input type="submit" OnServerClick="AddNewStore" value="Add Store" runat="server" /></td>
</tr>
</table>
</td>
</tr>
</table><br>
<ASP:DataGrid id="MyDataGrid" runat="server"
Width="700"
BackColor="white"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Size="8pt"
HeaderStyle-BackColor="darkred"
HeaderStyle-ForeColor="white"
/><br><br><span id="OutputMsg" EnableViewState="false" runat="server"/>
</form></body>
Contoh kita di atas terdiri dari dua metode utama:
AddNewStore - untuk memasukkan data, dan BindData - untuk mengembalikan perubahan kita. Setelah formulir dikirimkan kembali dengan menekan tombol "Add Store" (perhatikan bahwa itu dihubungkan dengan OnServerClick = "AddNewStore"), ini akan memanggil metode AddNewStore untuk menjalankan SQL terhadap database, dengan perintah SqlHelper.ExecuteNonQuery milik DAAB. Perintah ini menerima tiga parameter - string koneksi Anda, CommandType objek (apakah itu string teks atau Sproc), dan query SQL yang terdiri dari SQL dan teks masukan yang umum dari kolom formulir kami. Selain itu, perhatikan juga bahwa saya menerapkan penanganan pengecualian try-catch untuk menangkap kesalahan apa pun, dengan kesalahan SqlException '2627' yang membantu kami menunjukkan rekaman yang sudah ada, dan menulis ini ke kontrol rentang kami - OutputMsg.
Salah satu penyimpangan, dalam tutorial saya sebelumnya saya menyebutkan bahwa Command.ExecuteNonQuery hanya digunakan untuk Stored Procedures, namun itu tidak sepenuhnya benar. Meskipun perintah ini lebih umum diarahkan pada Stored Procedures karena tidak mengembalikan data apapun, sangat dapat diterima untuk digunakan dengan string T-SQL standar, seperti pada contoh di atas. Sekarang kembali, setelah AddNewStore dipanggil, metode BindData (yang memanfaatkan perintah SqlHelper.ExecuteDataSet DAAB dan menerima tiga parameter yang sama), sekaligus mengikat datagrid kami dengan perubahan kami, karena penyisipan data kami ditunjukkan pada Gambar 2.
Figure 2
Nah, itu benar-benar sejauh itu; DAAB pasti membuat hidup lebih mudah. Saya juga harus menunjukkan bahwa DAAB memiliki serangkaian anggota untuk semua hal yang ADO.NET pra-DAAB juga miliki. Sekarang, sebelum kita mengedit data kami, selanjutnya kita akan memeriksa bagaimana kita bisa memasukkan data menggunakan Stored Procedure.
Inserting Data with a Stored Procedure
Menggunakan Stored Procedures untuk setiap tugas data jelas mengenai keuntungan mereka. Mereka dapat menyimpan banyak set pernyataan SQL, dipatuhi di server, menghemat jumlah memori, pemrosesan dan kekuatan jaringan yang signifikan saat digunakan secara berulang. Selain itu, mereka juga menawarkan tindakan keamanan yang baik terhadap penggunaan yang tidak sah, karena konten mereka tidak ditulis sisi klien.
Ingat kembali ke atas untuk metode pertama kami untuk memasukkan data, di mana kami menggunakan kelas SQLHelper kami untuk menjalankan pernyataan Transact-SQL standar. Pada bagian ini kita akan melakukan hal yang sama, kecuali kita akan menggunakan Stored Procedure.
Jadi, alih-alih menulis ulang kode di atas, saya hanya akan mencantumkan metode AddNewStore yang dimodifikasi. Antara contoh ini dan artikel saya sebelumnya, Anda harus memiliki pemahaman yang baik tentang menulis dan menggunakan Stored Procedures untuk setiap tugas data, baik dengan menggunakan ADO.NET atau DAAB konvensional.
Tercantum di bawah ini adalah Prosedur Tersimpan StStStStore. Kebetulan, praktik yang baik untuk mematuhi saat menamai prosedur Anda tidak pernah awalan mereka dengan "sp_", karena SQL akan selalu menafsirkan ini sebagai sistem yang tersimpan prosedur, dan menggunakan sumber daya yang tidak perlu untuk memverifikasi bahwa itu bukan masalah.
Seperti yang disebutkan di atas, metode AddNewStore yang tercantum di bawah ini diubah untuk mengakomodasi Stored Procedure kami. Alih-alih hanya menggabungkan teks bidang formulir kami dalam string SQL sebelumnya, di sini kita perlu menyiapkan parameter array untuk Sproc untuk berinteraksi dengannya. Kami memulai metode kami di bawah ini dengan menyiapkan jumlah bidang yang kami butuhkan atau rangkaian Parameter SQL kami, di mana masing-masing diatur ke masing-masing tipe data dan panjangnya, dan masing-masing mengambil nilai bidang teks, dan selanjutnya mengkonsolidasikan variabel array kami, sqlParams, yang dibutuhkan oleh perintah SqlHelper.ExecuteNonQuery kami saat dijalankan.
Setelah ini, kami menggunakan SqlHelper.ExecuteNonQuery untuk menjalankan semuanya terhadap database kami. Tidak seperti sebelumnya, dalam hal ini ExecuteNonQuery sekarang membutuhkan empat parameter - connection string, tipe perintah, nama Sproc dan akhirnya teks perintah, dalam hal ini menjadi array dari parameter SQL - sqlParams. Dan dengan itu di tempat, Anda siap untuk roll.publik void AddNewStore (pengirim Objek, EventArgs E) {
SqlParameter [] sqlParams = new SqlParameter[6];sqlParams[0] = new SqlParameter("@storeid", SqlDbType.Char, 4);
sqlParams[0].Value = storeid.Value;sqlParams[1] = new SqlParameter("@storename", SqlDbType.VarChar, 40);
sqlParams[1].Value = storename.Value;sqlParams[2] = new SqlParameter("@address", SqlDbType.VarChar, 40);
sqlParams[2].Value = address.Value;sqlParams[3] = new SqlParameter("@city", SqlDbType.VarChar, 20);
sqlParams[3].Value = city.Value;sqlParams[4] = new SqlParameter("@state", SqlDbType.Char, 2);
sqlParams[4].Value = state.Value;sqlParams[5] = new SqlParameter("@zip", SqlDbType.Char, 5);
sqlParams[5].Value = zip.Value;
try {SqlHelper.ExecuteNonQuery (objConnect, CommandType.StoredProcedure, "InsertStore", sqlParams);
} catch (SqlException err) {if (err.Number == 2627) {OutputMsg.InnerHtml = "<font size=4><b>Sorry, record already exists. Please try again.</b></font>";
} else {OutputMsg.InnerHtml = err.Message.ToString();
}
}BindData();
ClearAll();}
Dengan DAAB tidak banyak kode yang bisa dilihat. Itulah keindahannya, bersihkan kode ringkasnya! Tidak hanya itu, tapi dengan DAAB juga menawarkan Kelas SqlHelperParameterCache yang memungkinkan Anda untuk men-cache parameter yang akan dijalankan terhadap database Anda. Barang yang benar-benar keren Selanjutnya, di situlah kesenangan dimulai dimana kita akan membahas cara mengedit dan mengupdate database kita.
Mengedit dan Memperbarui Data
Biasanya, kapan saja Anda memutuskan untuk mengedit data dalam aplikasi, Anda biasanya memiliki halaman dengan field yang terisi dari database bergantung pada permintaan yang dibuat untuk itu, biasanya dari formulir di halaman sebelumnya, halaman yang sama, atau dari string kueri Banyak aplikasi ASP lama menggunakan pendekatan ini dengan cara yang sama. Namun, jumlah kode yang di lakukan seperti itu, menurut standar .NET, sangat merepotkan dan berantakan. Di sini kita akan menunjukkan hal yang sama dengan kode yang jauh lebih sedikit, semuanya dengan DAAB dan ADO.NET.
Melihat kembali ke datagrid contoh sebelumnya, tidak ada yang tidak biasa. Namun dalam contoh ini, datagrid kami mulai sekarang akan menggabungkan beberapa metode baru yang akan kami panggil untuk tugas data kami yang akan datang. Perhatikan di bawah metode datagrid kami yang baru ditambahkan. Metode "On ... Command =" baru ini diperlukan agar datagrid kami dapat menangani fungsi pengeditan dan pemutakhiran yang akan diminta.
Untuk mencapai hal ini, kami perlu memodifikasi datagrid kami untuk menyertakan kolom baru, yang akan ditambahkan pada awal datagrid kami. Kolom khusus ini akan bertanggung jawab untuk mengizinkan kami mengedit baris yang diberikan. Dan setelah diinisialisasi, kami dapat memilih untuk memperbarui baris itu atau membatalkan tindakan sama sekali.
Silahkan lihat:
<asp:EditCommandColumn ButtonType="PushButton" EditText="Edit" CancelText="Cancel" UpdateText="Update" ItemStyle-Wrap="false"/><asp:BoundColumn HeaderText="ID" Datafield="ID" runat="server"/> // New Custom Columns below<asp:TemplateColumn>
<HeaderTemplate><b>Store</b>
</HeaderTemplate><ItemTemplate><asp:Label Text='<%# DataBinder.Eval (Container.DataItem, "Store") %>' runat="server" />
</ItemTemplate><EditItemTemplate><asp:DropDownList ID="DropList1"
DataSource='<%# DropData() %>'
DataTextField="Store"
DataValueField="Store"
runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
Kolom Template baru yang ditambahkan ke kode kami sekarang akan mengubah DataGrid yang dapat diedit dari Gambar 4 menjadi Gambar 5 yang berisi DropDownList saat melakukan pengeditan:
Figure 5
Apa yang terjadi di sini adalah kami memodifikasi BoundColumn Store awal kami. Kami mengganti ini dengan TemplateColumn yang berisi **HeaderTemplate **untuk teks tajuk kami, ItemTemplate yang berisi label hanya untuk menampilkan nama toko kami dari database kami, dan **EditItemTemplate **kami yang memiliki kontrol DropDownList kami yang akan menampilkan daftar semua nama toko dari database kami, setelah pengeditan telah diinisialisasi.
Untuk mendapatkan semua data ini ke kontrol DropDownList kami, kami harus menyiapkan kedua DataTextField (nilainya yang ditampilkan dalam daftar) dan DataValueField (nilai yang ditetapkan dilewatkan untuk memperbarui) ke bidang Store. Dan untuk mendapatkan daftar semua nama toko kami, kami telah menetapkan DataSource untuk menghubungi metode DropData kami di bawah ini:
public SqlDataReader DropData() { SqlDataReader reader = SqlHelper.ExecuteReader(objConnect, CommandType.Text, "Select stor_name As Store from Stores");return reader; }
Bicara sederhana. Ingat juga dalam contoh pemutakhiran sebelumnya dimana kami mendapatkan nilai textbox kami dengan menggunakan:
string field1 = ((TextBox) e.Item.Cells[2].Controls[0]).Text;
Karena sifat templat khusus, sekarang kami akan mengambil nilai DropDownList dengan menggunakan metode FindControl dan properti SelectedItem.Text kontrol sebagai gantinya, untuk menyelesaikan pekerjaan:
string field1 = ((ListControl) e.Item.FindControl("DropList1")).SelectedItem.Text;
Hal-hal keren :-) Ini menjelaskan alasan fungsionalitas tambahan yang dapat dilakukan dengan penyesuaian semacam itu. Selain benar-benar menambahkan template khusus, Anda mungkin juga ingin sisa kolom tetap ada, tanpa kustomisasi tertentu yang dilakukan sebelumnya. Nah, untuk melakukannya, cukup buat BoundColumns kustom untuk bidang Anda yang lain, seperti:
<asp:BoundColumn HeaderText="ID" Datafield="ID" runat="server"/> //... Template Column code above <asp:BoundColumn HeaderText="Address" Datafield="Address" runat="server"/> //... Continue with rest of controls here, etc.
Tidak terlalu lusuh, seperti yang kita hadapi dengan cukup sedikit. Dengan itu sekarang selesai, kita akan menekan dan mendemonstrasikan kemudahan menghapus data dari database.
Menghapus data
Menghapus data adalah konsep yang cukup sederhana; Anda tidak memerlukan data tertentu, dan Anda ingin menghapusnya dari database Anda. Di sini kita akan menunjukkan dengan tepat bagaimana melakukan ini, dan menambahkan kemampuan menghapus ke DataGrid kami dengan membuat kolom lain ke bagian Kolom yang akan menangani permintaan kami untuk menghapus deretan data tersebut. Sebelumnya kami menambahkan tiga datagram baru pada ... Metode perintah. Di sini kita perlu menambahkan dua tambahan yang akan melakukan dua hal:
Hapus baris data dari grid kita (OnDeleteCommand), dan
tambahkan peringatan popup yang bagus yang mengkonfirmasikan tindakan yang akan dilakukan (OnItemCreated):
<ASP:DataGrid id="MyDataGrid" runat="server"
Width="700"
BackColor="white"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Size="8pt"
HeaderStyle-BackColor="darkred"
HeaderStyle-ForeColor="white"
OnEditCommand="EditStoreInfo"
OnUpdateCommand="UpdateNewStore"
OnCancelCommand="CancelUpdate"
OnItemCreated="ConfirmDelete"
OnDeleteCommand="DeleteStore"
DataKeyField="Id">
<Columns><asp:EditCommandColumn ButtonType="PushButton" EditText="Edit" CancelText="Cancel" UpdateText="Update" ItemStyle-Wrap="false"/>
<asp:ButtonColumn ButtonType="PushButton" Text="Delete It" CommandName="Delete" ItemStyle-Wrap="false" />
</Columns></ASP:DataGrid>
Figure 6 menunjukkan tombol Delete baru di tempat, di samping Tombol Edit
####Figure 6
Metode OnDeleteCommand DataGrid kami bertanggung jawab dalam bekerja dengan tombol ButtonColumn Anda untuk memproses baris yang dipermasalahkan untuk dihapus.
language
language
public void DeleteStore (Object sender, DataGridCommandEventArgs e){ String deleteSQL = "DELETE from Stores where stor_id ='" + MyDataGrid.DataKeys[(int)e.Item.ItemIndex] + "'";try {SqlHelper.ExecuteNonQuery(objConnect, CommandType.Text, deleteSQL);
OutputMsg.InnerHtml = "<font size=4><b>Store information has been deleted.</b></font>";
OutputMsg.Style["color"] = "green";
} catch (SqlException err) {OutputMsg.InnerHtml = err.Message.ToString(); //"<font size=4><b>An error occurred and the record could not be deleted</b></font>";
OutputMsg.Style["color"] = "red";
}MyDataGrid.EditItemIndex = -1; //Reset grid back to normalBindData(); }
Perhatikan juga bahwa dengan menambahkan semua fungsi ini ke datagrid Anda, metode UpdateNewStore sebelumnya sekarang perlu dimodifikasi untuk mencatat indeks tambahan di DataGrid.
Karena itu,
string field1 = ((TextBox) e.Item.Cells[2].Controls[0]).Text;
becomes
string field1 = ((TextBox) e.Item.Cells[3].Controls[0]).Text;
Sekarang untuk bermain aman, mari kita tambahkan peringatan konfirmasi sehingga pengguna tahu persis apa yang akan mereka lakukan. Di datagrid kami, kami telah menambahkan tombol hapus dan menghubungkan metode ke metode OnItemCreated DataGrid kami. Saat datagrid kami berhasil membuatnya menjalankan metode kami di bawah ini, yang selanjutnya menarik teks kolom yang akan dihapus, dalam hal ini nama toko kami:
public void ConfirmDelete (Object sender, DataGridItemEventArgs e) { WebControl button = (WebControl) e.Item.Controls[1];
button.Attributes.Add ("onclick", "return confirm (\"Are you sure you want to delete " + DataBinder.Eval (e.Item.DataItem, "Store") + "?\");"); }
Pada Gambar 7, kita memilih baris pertama untuk penghapusan dan mendapatkan peringatan konfirmasi kami.
Gambar 7
Di atas, kami merujuk tombol hapus kami menggunakan properti Item DataGridItemEventArgs yang akan dinaikkan saat datagrid sedang dibuat. Dalam contoh ini "e.Item.Controls [1]" menunjukkan tombol kolom kedua kami - "Hapus." Selanjutnya, saya tambahkan ke **atribut tombol **mengumpulkan konfirmasi JavaScript yang mengkonfirmasikan nama Store yang akan dihapus.
Nah, itu dia. Cukup mengagumkan, dan pasti banyak yang bisa dipahami karena ini pasti bagian paling rumit dalam artikel ini; tapi lihatlah apa yang bisa Anda lakukan dengan datagrid sekarang? Semoga Anda mendapatkan semua itu :-) Sekarang, kita beralih ke topik terakhir, bagaimana kita bisa menangani transaksi saat mengedit atau memodifikasi data kita? Nah disini kita pergi.
Penyuntingan transaksional
Saat mengedit data atau hanya memodifikasi dengan cara apa pun, Anda perlu mengambil kepastian bahwa jika terjadi kesalahan, proses data tidak berlanjut dengan potensi merusak hal lain di sepanjang jalan. Untuk mengatasi kemungkinan seperti itu, kita akan memeriksa ulang update, kali ini semua dilakukan secara transaksi. UpdateNewStore kita sekarang menjadi UpdateNewStoreTrans. Semua tetap sama seperti sebelumnya, simpan dimana kita mengatur transaksi kita:
public void UpdateNewStoreTrans(Object sender, DataGridCommandEventArgs e)
{ string colId = MyDataGrid.DataKeys[(int)e.Item.ItemIndex].ToString();
//Index count has to skip first two to account for update & cancel links
string field1 = ((TextBox) e.Item.Cells[3].Controls[0]).Text;
string field2 = ((TextBox) e.Item.Cells[4].Controls[0]).Text;
string field3 = ((TextBox) e.Item.Cells[5].Controls[0]).Text;
string field4 = ((TextBox) e.Item.Cells[6].Controls[0]).Text;
string field5 = ((TextBox) e.Item.Cells[7].Controls[0]).Text;
String insertSQL = "UPDATE Stores SET stor_id = '" + colId + "', stor_name = '" + field1 + "', stor_address = '" + field2 + "', city = '" + field3 + "', state = '" + field4 + "', zip = '" + field5 + "' where stor_id = '" + colId + "'";
objConnect.Open();//Set up transaction
SqlTransaction editTrans = objConnect.BeginTransaction();try {SqlHelper.ExecuteNonQuery(editTrans, CommandType.Text, insertSQL);editTrans.Commit();MyDataGrid.EditItemIndex = -1;OutputMsg.InnerHtml = "<font size=4><b>Update transaction was successful</b></font>";
OutputMsg.Style["color"] = "green";
} catch (SqlException err) {//Rollback any changes
editTrans.Rollback();
//... Our error handlingobjConnect.Close();BindData(); }
Melakukan update transaksional mengharuskan kami mengaturnya melawan koneksi kami dengan membukanya secara eksplisit dan kemudian menyiapkan perintah transaksi kami dengan ini. Ada tiga perintah standar yang melekat pada transaksi yang serupa dengan cara SQL Server menangani mereka dalam prosedurnya: BeginTransaction, Commit, and Rollback. BeginTransaction memulai transaksi. Commit menyetelnya, dan jika ada kesalahan terjadi, Rollback kemudian memastikan semuanya kembali ke tahap pra-komitonya. Dan setelah itu, kami juga menutup koneksi kami.
Itu benar-benar sejauh ini. Namun ini bukan pendekatan terputus untuk transaksi, karena ini terjadi seketika. Ketika berhadapan dengan objek yang terputus seperti DataSet, perubahan akan terjadi terlebih dahulu di dalam data yang di-cache di DataSet, di memori, sebelum dikirim kembali ke database saat update terjadi. DataSet, dalam hal ini menjadi representasi data sisi klien dari database Anda, dan digunakan untuk pengeditan data banyak ditawarkan, bahwa dalam lingkup artikel ini akan menjadi berlebihan. Namun, saya akan mengatakan bahwa DataSet menawarkan transaksi, seperti yang disebutkan. Ini juga dapat memberlakukan batasan ketika ada pemutakhiran yang harus dilakukan, memastikan peraturan bisnis dan integritas data tertentu.
Akhirnya, hal yang sama yang telah kita periksa di sini bisa diterapkan pada objek lain, seperti DataTable, yang memungkinkan interaksi yang lebih terperinci dengan data dan manipulasi. Semua yang disebutkan dapat dipelajari lebih lanjut dalam dokumentasi Microsoft; hanya sesuatu yang perlu diingat.
Conclusion (Kesimpulan)
Sebagai kesimpulan, sama sekali tidak mengedit data relasional yang tercakup di sini; metode masih bisa melampaui lingkup artikel ini. Ada masalah kendala, masalah konkurensi, dll yang perlu diperiksa berdasarkan konfigurasi tabel database dan kebutuhan aplikasi Anda. Intinya di sini adalah untuk menunjukkan bagaimana melakukan tugas pengeditan data umum. Satu hal yang pasti, DAAB tentu saja sangat serius. NET aplikasi harus dan akan pergi.
Jadi, seperti yang telah kita lihat, melakukan berbagai modifikasi data tugas tidak hanya mudah, namun dengan Microsoft Access Data Access Block, lebih bersih. Saya bahkan tidak memikirkan coding dengan cara lama, mengingat perbaikan yang telah kita lihat. Siapa yang ingin menulis dua kali kode? Tentu bukan aku lagi.
See you next time . Happy NET Ting .
regards
Posted on Utopian.io - Rewarding Open Source Contributors
Your contribution cannot be approved because it does not follow the Utopian Rules, and is considered as plagiarism. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever.
Stolen and translated from here.
You can contact us on Discord.
[utopian-moderator]