Lập trình web Asp.net với C# - Chương 7: Lập trình web form với ado.net

7.1 Tổng quan về ADO.Net 7.2 Các đối tượng trong ADO.Net 7.3 Xây dựng lớp xử lý dữ liệu 7.4 Xử lý giỏ hàng cho website thương mại điện tử

pdf62 trang | Chia sẻ: thuychi16 | Lượt xem: 863 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Lập trình web Asp.net với C# - Chương 7: Lập trình web form với ado.net, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Giảng Viên: Th.S Phạm Đào Minh Vũ Email: phamdaominhvu@yahoo.com 1 LẬP TRÌNH WEB ASP.NET VỚI C# 263 Chương 7 Lập Trình Web Form Với ADO.Net Khoa CNTT, Trường CĐ CNTT TP.HCM 7.1 Tổng quan về ADO.Net 7.2 Các đối tượng trong ADO.Net 7.3 Xây dựng lớp xử lý dữ liệu 7.4 Xử lý giỏ hàng cho website thương mại điện tử 264 7.1. Tổng Quan Về ADO.Net 7.1.1 Giới thiệu Khoa CNTT, Trường CĐ CNTT TP.HCM 7.1.2 Kiến trúc ADO .Net 7.1.3 Minh họa tạo kết nối CSDL 265 Hầu hết ứng dụng windows hay website đều cần có CSDL, để lưu trữ, xử lý, tìm kiếm và báo cáo Khi dữ liệu trở thành trung tâm của ứng dụng thì việc cung cấp các chức năng tới người dùng phụ thuộc vào khả năng thao tác dữ liệu, vấn đề cần quan tâm là: Lưu dữ liệu tập trung. Đảm bảo toàn vẹn dữ liệu. Đảm bảo khả năng truy xuất đồng thời. Đảm bảo thời gian hồi đáp ngắn. Bảo mật dữ liệu. Trao đổi dữ liệu giữa các hệ thống khác nhau Khoa CNTT, Trường CĐ CNTT TP.HCM 7.1.1 Giới Thiệu 266 Vấn đề này được giải quyết dựa vào khả năng của các Hệ QTCSDL. .Net truy xuất DL qua ADO.NET, đặc điểm chính của ADO.NET là:  Khả năng làm việc với DL không kết nối: DL được lưu trữ trong bộ nhớ như một CSDL thu nhỏ (dataset), nhằm tăng tốc độ xử lý tính toán và hạn chế sử dụng tài nguyên.  Khả năng xử lý dữ liệu chuẩn XML (Có thể trao đổi giữa bất kỳ hệ thống nào) Khoa CNTT, Trường CĐ CNTT TP.HCM 267 7.1.2 Kiến Trúc ADO.Net Khoa CNTT, Trường CĐ CNTT TP.HCM MANAGED PROVIDER CONTENT COMPONENT 268 Kiến trúc ADO.NET có thể chia làm 2 phần chính: Managed Provider Component: Bao gồm các đối tượng như DataAdapter, DataReader, giữ nhiệm vụ làm việc trực tiếp với dữ liệu như database, file, Content Component: Bao gồm các đối tượng như DataSet, DataTable, đại diện cho dữ liệu thực sự cần làm việc. Khoa CNTT, Trường CĐ CNTT TP.HCM 269  DataReader: Là đối tượng giúp truy cập dữ liệu nhanh chóng.  DataSet: Là một bản sao thu nhỏ của CSDL trong bộ nhớ với nhiều bảng và các mối quan hệ.  DataAdapter: Là đối tượng kết nối giữa DataSet và CSDL, nó bao gồm 2 đối tượng Connection và Command để cung cấp dữ liệu cho DataSet cũng như cập nhật dữ liệu từ DataSet xuống CSDL. Khoa CNTT, Trường CĐ CNTT TP.HCM 270 7.1.3 Minh họa tạo kết nối CSDL Khoa CNTT, Trường CĐ CNTT TP.HCM Cơ bản các bước thực hiện với database Bước 1: Tạo kết nối Bước 2: Mở kết nối dữ liệu Bước 3: Tạo lệnh điều khiển truy vấn SQL Bước 4: Thực thi lệnh Bước 5: Đóng kết nối Bước 6: in kết quả 271 Khoa CNTT, Trường CĐ CNTT TP.HCM using System; using System.Data; using System.Data.SqlClient; public partial class vd1 : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { //Khai báo và khởi tạo biến Connection SqlConnection cnn = new SqlConnection("Data Source=(local); Initial Catalog=QLbansach;User ID=sa;Password="); cnn.Open(); //Mở kết nối //Command điều khiển truy vấn sql SqlCommand cmd = cnn.CreateCommand(); cmd.CommandText="select TenKH from Khachhang where MaKH=5"; //lấy về chuỗi giá trị trong cơ sở dữ liệu string result = (string)cmd.ExecuteScalar(); cnn.Close(); //đóng kết nối Response.Write(result); //in giá trị ra màn hình } } Ví dụ: 272 7.2. Các đối tượng trong ADO.Net 7.2.1 Connection 7.2.2 Command Khoa CNTT, Trường CĐ CNTT TP.HCM 273 7.2.1 Connection Vai trò của Connection trong ADO.net là tạo kết nối giữa ứng dụng với CSDL Data Provider System.Data.Oledb : Sử dụng với Access System.Data.SqlCient : Sử dụng với SQLServer Ứng với mỗi tên miền: System.Data.Oledb.OledbConnection System.Data.SqlClient.SqlConnection Và các Data Provider khác: System.data.OcracleClient(Ocracle) MicroSoft.data.Odbc(Thông qua ODBC của HĐH) Microsoft.Data.Sqlxml (XML trên Sqlserver) Khoa CNTT, Trường CĐ CNTT TP.HCM 274 Connection String: Khi thực hiện kết nối cần khai báo các thông tin cho Connection thông qua thuộc tính Connection String. Tùy thuộc vào Data Provider: Khoa CNTT, Trường CĐ CNTT TP.HCM Nếu kết nối với CSDL Access Provider: Khai báo Data Provider của Access Data Source: Tên tập tin CSDL (.mdb) User ID: Tên người dùng Password : Mật khẩu 275 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ: Tạo kết nối với CSDL Access using System; using System.Data; using System.Data.OleDb; public partial class VD2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { String StrCnn="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/App_Data/QLBansach.mdb"); OleDbConnection cnn = new OleDbConnection (StrCnn); cnn.Open(); //Truy xuất, xử lý dữ liệu cnn.Close(); } } 276 Khoa CNTT, Trường CĐ CNTT TP.HCM Nếu kết nối với CSDL SQLServer Data Source/Server: Tên Server Initial Catalog/DataBase: Tên CSDL User ID/UID: Tên người dùng Password/ PWD: Mật khẩu Integrated Security: Cơ chế chứng thực đăng nhập true: tài khoản Windows; false: Tài khoản SqlServer (ví dụ: sa) 277 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ: Tạo kết nối với CSDL SQLServer using System; using System.Data; using System.Data.sqlClient; public partial class KetnoiCSDL : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { String StrCnn= @"Data Source=MINHVU-PC\SQLEXPRESS; Initial Catalog=QLbansach; User ID=sa;Password=;"; SqlConnection cnn = new SqlConnection(StrCnn); cnn.Open(); //Truy xuất, xử lý dữ liệu cnn.Close(); } } 278 Các thuộc tính Của Connection Database: Tên CSDL Data Source: Tên Server Provider: Tương ứng với Provider của HQTCSDL State: Tình trạng kết nối của Connection: Broken: Kết nối đã bị ngắt khi đã kết nối Closed: Kết nối đã đóng Connecting: Đang kết nối Executing: Kết nối đang thực hiện một lệnh Fetching: Kết nối đang truy xuất dữ liệu Open: Kết nối đang mở Khoa CNTT, Trường CĐ CNTT TP.HCM 279 Các phương thức Change Database: Thay đổi Database làm việc Close : Đóng kết nối Dispose: Giải phóng bộ nhớ Open: Thực hiện kết nối Khoa CNTT, Trường CĐ CNTT TP.HCM 280 7.2.2 Command Sau khi tạo kết nối CSDL, mọi thao tác với nguồn dữ liệu có thể được thực hiện thông qua Command. Tùy theo loại Connection đối tượng Command thuộc tên miền: System.Data.OleDb.OleDbCommand System.Data.SqlClient.SqlCommand Khoa CNTT, Trường CĐ CNTT TP.HCM 281 Tạo Command Cú pháp: As New ; .Connection=; .CommandText=Lệnh SQL>; Hoặc As New (); .Connection=; Khoa CNTT, Trường CĐ CNTT TP.HCM 282 Các thuộc tính Của Command CommandText: Lệnh SQL hay tên Procedure CommandType: Loại Command Text: (Mặc định): Là câu lệnh SQL StoredProcedure: Tên thủ tục TableDirect: Tên của table (SQLProvider không hỗ trợ) VD: SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandType = CommandType.Text; cmd.CommandText = "Select * From Khachhang"; Khoa CNTT, Trường CĐ CNTT TP.HCM 283 VD: khai báo câu lệnh SQL trong SqlCommand SqlCommand cmd = new SqlCommand("select * from Khachhang",cnn); cnn : biến connection hoặc chuỗi connection string Khoa CNTT, Trường CĐ CNTT TP.HCM VD: Khai báo sử dụng 1 StoredProcedure SqlCommand cmd = new SqlCommand; cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "Sachtheogia"; 284 Parameters  Lệnh SQL trong commandText có thể sử dụng  ? (khi sử dụng Access)  @Tênbiến (khi sử dụng SQLServer) thay cho trị chưa xác định và khi thực hiện sẽ dùng đối tượng Parameters để truyền giá trị vào dấu ?/ @Tênbiến.  Tùy theo Command Parameter sẽ khai báo khác nhau Khoa CNTT, Trường CĐ CNTT TP.HCM 285 Access Khoa CNTT, Trường CĐ CNTT TP.HCM OleDbParameter = new OleDbParameter(); OleDbParameter = new OleDbParameter (); OleDbParameter = new OleDbParameter (,); 286 Các thuộc tính cần chú ý: Direction: Giá trị cho biết lọai tham số Input: (mặc định) Loại tham số đầu vào InputOutput: Loại tham số đầu vào và ra Output: Loại tham số đầu ra ReturnValue: Loại tham số nhận trị trả về OleDbType / SqlDbType: Kiểu dữ liệu của tham số. ParameterName: Tên tham số Value: Giá trị tham số Khoa CNTT, Trường CĐ CNTT TP.HCM 287 VD: Khi sử dụng OleDbCommand cmd.CommandText="Select * From KhachHang Where MaKH=?"; OleDbParameter Par = new OleDbParameter(); Par = cmd.CreateParameter(); Par.Value="KH01"; cmd.Parameters.Add(Par); VD: Khi sử dụng SqlDbCommand cmd.CommandText="Select * From KhachHang Where MaKH=@MaKH"; SqlParameter Par = new SqlParameter(); Par = cmd.CreateParameter(); Par.ParameterName="@MaKH"; Par.Value="KH01"; cmd.Parameters.Add(Par); Khoa CNTT, Trường CĐ CNTT TP.HCM 288 Đưa tham số vào tập hợp Parameters VD: Khi sử dụng OleDbCommand Khoa CNTT, Trường CĐ CNTT TP.HCM cmd.CommandText= "Select * From BangDiem Where Masv=? And MaMH=?"; OleDbParameter Par1 = new OleDbParameter(); cmd.CreateParameters.Add("Sinhvien",OleDbType.Char,4); Par1.Value="SV01"; OleDbParameter Par2 = new OleDbParameter(); cmd.CreateParameters.Add("Monhoc",OleDbType.Char,4); Par2.Value="MH01"; 289 VD: Khi sử dụng SqlDbCommand Khoa CNTT, Trường CĐ CNTT TP.HCM cmd.CommandText="Select * From BangDiem Where Masv=@MaSV and MaMH = @MaMH "; SqlParameter Par1 = new SqlParameter(); Par1 = cmd.Parameters.Add("@MaSV",SqlType.Char,4); Par1.Value="SV01"; SqlParameter Par2 = new SqlParameter(); cmd.CreateParameters.Add("@MaMH",SqlType.Char,4); Par2.Value="MH01"; 290 Tạo tham số và đưa vào tập hợp Parameters VD: Procedure SpKetQuaThi cần 2 tham số đầu vào: @MaSV , @MaMH và trả về Điểm thi của Môn học của sinh viên đó. Khoa CNTT, Trường CĐ CNTT TP.HCM 291 cmd.CommandText="spKetQuaThi"; cmd.CommandType=CommandType.StoredProcedure; OleDbParameter ts3 = new OleDbParameter(); ts3.Direction=ParameterDirection.ReturnValue; ts3.OleDbType=OleDb.OleDbType.Int; cmd.parameters.Add(ts3); OleDbParameter ts1 = new OleDbParameter(); cmd.Parameters.Add("@MaSV",OleDbType.Char,4); ts1.Value="SV01"; OleDbParameter ts2 = new OleDbParameter(); cmd.Parameters.Add("@MAMH",OleDbType.Char,4); ts2.Value="MH01"; Khoa CNTT, Trường CĐ CNTT TP.HCM 292 CREATE PROC SpKetQuaThi ( @MaSV varchar(2), @MaMH varchar(2), @DiemThi int output ) AS Select @DiemThi=DiemThi from SVMH where MaSV=@MaSV & MaMH = @MaMH; Khoa CNTT, Trường CĐ CNTT TP.HCM 293 SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; //bien connection; cmd.CommandText = "SVMH"; cmd.CommandType = CommandType.StoredProcedure; SqlParameter ts1 = new SqlParameter("@MaSV",SqlDbType.VarChar,4); SqlParameter ts2 = new SqlParameter("@MaMH",SqlDbType.VarChar,4); ts1.Value = "SV01"; ts2.Value = "MH01"; cmd.Parameters.Add(ts1); cmd.Parameters.Add(ts2); SqlParameter ts3 = new SqlParameter("@DiemThi",SqlDbType.Int); ts3.Direction = ParameterDirection.Output ; cmd.Parameters.Add(ts3); cmd.ExecuteNonQuery(); Label1.Text = cmd.Parameters["@DiemThi"].Value.ToString(); Khoa CNTT, Trường CĐ CNTT TP.HCM 294 Thực hiện Command:  Phương thức ExecuteReader: Trả về đối tượng DataReader để đọc dữ liệu mỗi lần một dòng với phương thức Read.(DataReader đọc dữ liệu trực tiếp từ nguồn nên phải duy trì kết nối đến khi đọc xong) SqlDataReader ; = .ExecuteReader(); VD: Khoa CNTT, Trường CĐ CNTT TP.HCM SqlDataReader dr; dr = cmd.ExecuteReader; while (dr.Read()) { Label1.Text += dr["MaNXB"] + ", " + dr["TenNXB"] + ""; } 295 Thực hiện Command:  Phương thức ExcuteNoneQuery: Dùng thực thi các phát biểu T-Sql như: Insert, Update, Delete, Create, Phương thức này trả về số dòng dữ liệu chiệu tác động, ngược lại trả về -1. VD : cmd.ExcuteNonQuery()  Phương thức ExcuteScalar: Trả về từ phát biểu SQL dạng Select chỉ có một cột một hàng, thường được dùng để thực thi các câu lệnh SQL như Count, Sum, Max, Min, AVG, Khoa CNTT, Trường CĐ CNTT TP.HCM 296 try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; //Loại command là câu lệnh SQL cmd.CommandText = "Select Count(*) From Chude"; cmd.CommandType = CommandType.Text; //Mở kết nối và lấy dữ liệu cnn.Open(); int count = (int)cmd.ExecuteScalar(); response.write(count.ToString()); cnn.Close(); } catch (Exception) { response.write("Không thành công!"); } Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 1: Sử dụng Command với câu lệnh Select 297 try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; //Biến Commnad thao tác Insert, Update, Delete cmd.CommandText = "Insert Into Chude(tencd) Values(n'văn hóa')"; cmd.CommandType = CommandType.Text; cnn.Open(); cmd.ExecuteNonQuery(); response.write("Thành công!"); cnn.Close(); } catch (Exception) { response.write("Thất bại!"); } Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 2: Sử dụng Command với lệnh Insert,Update,Delete 298 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 3: Command với lệnh Insert,Update,Delete + Tham số try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = "INSERT INTO CHUDE VALUES(@TENCHUDE)"; SqlParameter parTenLinhVuc = new SqlParameter("@TENCHUDE", SqlDbType.NVarChar, 50); cmd.CommandType = CommandType.Text; cmd.Parameters.Add(parTenLinhVuc); parTenLinhVuc.Value = TextBox1.Text; cnn.Open(); cmd.ExecuteNonQuery(); cnn.Close(); response.write("Thành công!"); } catch (Exception) { response.write("Thất bại!"); } 299 7.2.3 DataReader Là đối tượng truy cập dữ liệu trực tiếp, sử dụng con trỏ phía Server và duy trì kết nối với Server trong suốt quá trình đọc dữ liệu, Tùy theo loại Connection mà DataReader thuộc tên miền: System.Data.OleDb.OleDbDataReader System.Data.SqlClient.SqlDataReader Khoa CNTT, Trường CĐ CNTT TP.HCM 300 Các thuộc tính  FieldCout: Số cột trên dòng hiện hành của DataReader  IsClosed : Cho biết dataReader đã đóng  Item: giá trị của cột truyền vào. Tham số truyền vào là tên cột hoặc số thứ tự tính từ 0. Khoa CNTT, Trường CĐ CNTT TP.HCM 301 Các phương thức  Close: Đóng DataReader  GetFieldType: Trả về kiểu dữ liệu của tham số truyền vào.  GetName: Trả về tên của cột truyền vào  GetValue: Trả về trị của cột truyền vào  Read: Di chuyển đến dòng kế tiếp và trả về true nếu còn dòng để di chuyển, ngược lại trả về False. Trong khi dataReader đang mở các thao tác dữ liệu trên nguồn dữ liệu đều không thể cho đến khi dataReader đóng lại bằng lệnh Close Khoa CNTT, Trường CĐ CNTT TP.HCM 302 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 1:DataReader với lệnh Insert,Update,Delete +Tham số try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = "SELECT * FROM Nhaxuatban"; cmd.CommandType = CommandType.Text; cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) { list = list + dr["TenNXB"].ToString().Trim() + " "; } dr.Close(); response.write(list.ToString()); cnn.Close(); } catch (Exception) { response.write("Thất bại!"); } 303 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 2: DataReader + gọi procedure (VD: Getnhaxuatban) try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand("Getnhaxuatban", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) { list = list + dr["TenNXB"].ToString(); } dr.Close(); response.write(list.ToString()); cnn.Close(); } catch (Exception) { response.write("Thất bại!"); } 304 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 2: DataReader + gọi procedure có tham số Create Procedure GetchudeByMaCD @Machude char(15) AS Begin Select * From Chude Where MaCD=@Machude End 305 Khoa CNTT, Trường CĐ CNTT TP.HCM try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Ctalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand("GetchudeByMaCD", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; SqlParameter parMALINHVUC = new SqlParameter("@Machude", SqlDbType.NChar, 10); parMAVHUDE.Value = TextBox1.Text; cmd.Parameters.Add(parMACHUDE); cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) { list = list + dr["Tenchude"].ToString(); } dr.Close(); response.write(list.ToString()); cnn.Close(); } catch (Exception) { response.write("Thất bại!"); } 306 7.2.4 DataAdapter  Để lấy dữ liệu từ nguồn dữ liệu về cho ứng dụng, chúng ta sử dụng đối tượng DataAdapter. Đối tượng này cho phép ta lấy cấu trúc và dữ liệu của các bảng.  DataAdapter là một bộ gồm 4 đối tượng:  SelectCommand: Cho phép lấy thông tin từ nguồn.  InsertCommand: Cho phép thêm dữ liệu vào bảng trong nguồn.  UpdateCommand: Cho phép điều chỉnh dữ liệu của bảng trong nguồn.  DeleteCommand: Cho phép xóa dữ liệu của bảng trong nguồn. Khoa CNTT, Trường CĐ CNTT TP.HCM 307  Tạo DataAdapter Cú pháp: DataAdapter = New DataAdapter(,) Khoa CNTT, Trường CĐ CNTT TP.HCM DataAdapter chỉ thao tác với nguồn dữ liệu qua đối tượng connection đang kết nối, khi Connection chưa mở thì DataAdapter sẽ tự động mở kết nối khi cần và đóng lại 308 Khoa CNTT, Trường CĐ CNTT TP.HCM  Các thuộc tính của DataAdapter  DeleteCommand: Đối tượng Command chứa nội dung lệnh hủy các mẫu tin trên nguồn dữ liệu.  InsertCommand: Đối tượng Command chứa nội dung lệnh thêm các mẫu tin trên nguồn dữ liệu.  SelectCommand: Đối tượng Command chứa nội dung lệnh truy xuất các mẫu tin trên nguồn dữ liệu.  UpdateCommand: Đối tượng Command chứa nội dung lệnh sửa các mẫu tin trên nguồn dữ liệu. 309 Khoa CNTT, Trường CĐ CNTT TP.HCM  Các chức năng của DataAdapter  Lấy dữ liệu từ nguồn: - DataTable: Fill() - DataSet: Fill() Dữ liệu lấy về DataSet dưới dạng các dataTable với tên là: Table0,Table1, Table2. . . - Đổ dữ liệu vào Datset cho bảng DataTable nếu chưa có sẽ tạo mới: Fill(,) 310 Khoa CNTT, Trường CĐ CNTT TP.HCM  Phương thức trả về số mẫu tin lấy được Dataset DS as New Dataset() Integer so; so= DA.Fill(DS, “Sinhvien”)  Để cập nhật dữ liệu về nguồn Update(): Cập nhật các dòng (Các đối tượng DataRow) vào nguồn dữ liệu. Update(): Cập nhật các thay đổi trên tất cả các bảng của Dataset vào nguồn dữ liệu. Update(): Cập nhật tất cả các thay đổi trên DataTable vào nguồn dữ liệu. Update(,) Cập nhật các thay đổi trên bảng trong Dataset vào nguồn. 311 7.2.5 Dataset  Dataset là một mô hình CSDL quan hệ thu nhỏ đáp ứng nhu cầu của ứng dụng.  Dataset chứa các bảng (DataTable), các quanhệ (DataRelation) và các ràng buộc (constraint)  Dataset thuộc tên miền: System.Data.Dataset.  Khai báo New System.Data.Dataset() Hoặc New System.Data.Dataset() Khoa CNTT, Trường CĐ CNTT TP.HCM 312 Khoa CNTT, Trường CĐ CNTT TP.HCM  Các phương thức Thêm một bảng vào Dataset Tables.Add() Một bảng mới tự động đ