Bài giảng Lập trình cơ sở dữ liệu - Chương 4: Sắp xếp, tìm kiếm, lọc dữ liệu
Sắp xếp, tìm kiếm, lọc trong DataTable Lớp DataRelation Lớp DataView Tìm 1 dòng Chọn một số dòng Cột tính toán Hàm nhóm trên cột
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình cơ sở dữ liệu - Chương 4: Sắp xếp, tìm kiếm, lọc dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
SẮP XẾP, TÌM KIẾM, LỌC DỮ LIỆUChương 4Nội dungSắp xếp, tìm kiếm, lọc trong DataTableLớp DataRelationLớp DataViewSắp xếp, tìm kiếm, lọc trong DataTableTìm 1 dòngChọn một số dòngCột tính toánHàm nhóm trên cộtSắp xếp, tìm kiếm, lọc trong DataTableTìm 1 dòng“Tìm 1 dòng”: Là lấy thông tin chi tiết của 1 ID hay khóa chính nào đóVí dụ:Tìm thông tin chi tiết của một khách hàng có mã khách hàng cho trước Tìm thông tin chi tiết của hóa đơn có mã hóa đơn cho trước Sắp xếp, tìm kiếm, lọc trong DataTableTìm 1 dòngDatabase: Thực thi câu lệnh SQLSelect From tenBangWhere CotKhoaChinh=giatriDataTable: Dùng phương thức Find của DataTable.Rows (đối tượng của lớp DataRowCollectionSắp xếp, tìm kiếm, lọc trong DataTableTìm 1 dòngCú pháp phương thức FindDataRow DataRowCollection.Find(object key)Chú ýHàm Find tìm giá trị key chỉ trên cột khóa chính table phải có khóa chính Để tạo khóa chính:Dùng DataSet có kiểu mạnhDùng hàm FillSchema Tự tạo khóa bằng codeSắp xếp, tìm kiếm, lọc trong DataTableTìm 1 dòngVí dụmyTable.PrimaryKey = new DataColumn[] { myTable.Columns["CustomerID"] };string s = "primaryKeyValue";DataRow foundRow = myTable.Rows.Find(s);if (foundRow != null) MessageBox.Show(foundRow[1].ToString());else MessageBox.Show("A row with the primary key of " + s + " could not be found");Sắp xếp, tìm kiếm, lọc trong DataTableTìm 1 dòngDataSet kiểu mạnh: Cung cấp sẵn phương thức FindBy(...)NhanVienDataTable nv;string s = "primaryKeyValue";NhanVienRow foundRow = nv.FindByMaNV(s);if (foundRow != null) MessageBox.Show(foundRow.MaNV);else MessageBox.Show("A row with the primary key of " + s + " could not be found");Sắp xếp, tìm kiếm, lọc trong DataTableChọn một số dòng“Chọn một số dòng”: truy vấn 1 số dòng từ 1 bảng cho trước theo 1 điều kiện nào đóDatabase: Thực thi câu lệnh SQLSelect From tenBangWhere tenCot=giatriSelect * From NhanVienWhere Ten like ‘Ta%’Ví dụ:Sắp xếp, tìm kiếm, lọc trong DataTableChọn một số dòngDataTable: Dùng phương thức Select của đối tượng DataTableDataRow[] rows = tenBang.Select();DataRow[] rows = tenBang.Select(string dk);DataRow[] rows = tenBang.Select(string dk, string sort);DataRow[] rows = tenBang.Select(string dk, string sort, DataRowState state);DataRow[] rows = dt.Select("ho like '%Tr%'");DataRow[] rows = dt.Select("ho like '%Tr%'“, “ten asc”);Ví dụSắp xếp, tìm kiếm, lọc trong DataTableCột tính toán“Cột tính toán”: là cột được sinh ra từ các phép toán trên các cột khácDatabase: Thực thi câu lệnh SQLSelect , cot1 cot2 as TenCot, From tenBangVí dụSelect ProductID,Price,Tax,(Price+Price*Tax) as TotalPriceFrom ProductsSắp xếp, tìm kiếm, lọc trong DataTableCột tính toánDataTable: Chỉ ra expression (biểu thức) cho cột mới (thuộc tính Expression của lớp DataColumn)DataTable table;DataColumn col = new DataColumn(“TenCot”);col.Expression = “bieu thuc”;table.Columns.Add(col);Ví dụDataColumn totalPrice = new DataColumn(“Total Price”);totalPrice.Expression = “Price + Price*Tax”;table.Columns.Add(col);Sắp xếp, tìm kiếm, lọc trong DataTableCột tính toánChú ýCột tính toán trên DataSet có kiểu làm tương tựĐiều kiện rất quan trọng để cột tính toán có thể hoạt động được là các cột tham gia vào biểu thức phải có kiểu tương ứng với phép toán (các cột mặc định có kiểu string) Dùng DataSet có kiểuChỉ rõ kiểu bằng thuộc tính DataType của lớp DataColumnDataColumn col;col.DataType = typeof(kieu);Sắp xếp, tìm kiếm, lọc trong DataTableHàm nhóm trên cộtDatabase: Thực thi câu lệnh SQLSelect min() From Select max() From Select avg() From Select count() From Select sum() From Select sum(price) From Products;Sắp xếp, tìm kiếm, lọc trong DataTableHàm nhóm trên cộtDataTable: Dùng phương thức Compute của lớp DataTableobject table.Compute(“biểu thức”, “bộ lọc”)“biểu thức”: giống mệnh đề select Max(cột)Min(cột)Sum(cột)Count(cột)Avg(cột)“bộ lọc”: giống mệnh đề whereSắp xếp, tìm kiếm, lọc trong DataTableHàm nhóm trên cộtVí dụ:int p;p = int.Parse(table.Compute(“sum(Price)”, “”);Chú ýDùng lớp Convert hay hàm Parse để chuyển sang kiểu dữ liệu tương ứngint p;p = int.Parse(table.Compute(“sum(Price)”, “Price<100”);Lớp DataRelationDatabaseCho phép tạo quan hệ giữa các bảngCho phép kết (join) giữa các bảngDataTable:Cho phép tạo quan hệ giữa các bảng bằng đối tượng DataRelationKhông cho phép kết (join) giữa các bảngCho phép lấy các “dòng con” của 1 dòngCho phép lấy “dòng cha” của 1 dòngLớp DataRelationLấy các “dòng con” và “dòng cha”DataRow[] rows;DataRow row;rows = parentTable.Rows[index].GetChildRows(relation);row = childTable.Rows[index].GetParentRow(relation);Tạo quan hệ (Chương 5)ds.Relations.Add(new DataRelation());Lớp DataViewKhái niệm DataViewTạo DataViewSắp xếp, tìm kiếm, lọc trong DataViewChuyển DataView thành DataTableLớp DataViewKhái niệm DataViewĐối tượng DataView thay thế cho câu lệnh Select của đối tượng DataTableĐặc điểm DataViewDataView có thể binding vào control (Kết quả của câu lệnh Select thì không thể)DataView chỉ cho phép làm việc trên 1 bảng – không cho phép chọn 1 tập con các cộtNếu DataTable gồm có các DataRows thì DataView gồm có các DataRowViewsLớp DataViewTạo DataViewCác cách tạo DataViewDataView vw = new DataView();DataView vw = new DataView(table);DataView vw = new DataView(table, “ĐKLoc”, “CotSXep”, ĐK RowState);Trong đóĐKLoc: điều kiện lọc dữ liệuCotSXep: Tên cột dùng để sắp xếpĐK RowState: DataViewRowState.Unchanged, Lớp DataView Sắp xếp, tìm kiếm, lọc trong DataViewThuộc tính của DataViewRowFilter: Chỉ ra điều kiện lọc giống câu lệnh Select. Ví dụ: “Ho like ‘Tr%’”Sort: chỉ ra thứ tự sort. Ví dụ: “MaSV asc”Phương thức của DataViewint Find(object): Trả về chỉ số dòng thỏa điều kiện tìm kiếmDataRowView[] FindRows(object hay object[]): Trả về 1 số DataRowView thỏa điểu kiện tìm kiếm Chú ý: 2 Hàm này chỉ tìm kiếm trên các cột được chỉ ra trong thuộc tính Sort của DataViewLớp DataViewChuyển DataView sang DataTableCú phápDataTable vw.ToTable()DataTable vw.ToTable("ten bang")DataTable vw.ToTable(boolean, mảng chuỗi cột)DataTable vw.ToTable("ten bang", boolean, mảng chuỗi cột)Trong đóboolean: true – loại bỏ những dòng trùng lắp (distinct)Tóm tắt chương 4