Bài giảng Lập trình cơ sở dữ liệu - Chương 3: DataSets
Khái niệm DataSet Lớp DataSet Lớp DataTable Lớp DataColumn Lớp DataRow Constraints Primary key Lớp DataRelation DataSet kiểu mạnh
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 3: DataSets, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
DataSetsChương 3Nội dungKhái niệm DataSetLớp DataSetLớp DataTableLớp DataColumnLớp DataRowConstraintsPrimary keyLớp DataRelationDataSet kiểu mạnhKhái niệm DataSetDataSet là gìDataSet là một đối tượng cho phépNạp 1 phần dữ liệu của data source lên bộ nhớLưu trữ dữ liệu theo mô hình quan hệDataSet thuộc kiến trúc DisconnectedDataSet không phụ thuộc vào loại data sourceKhái niệm DataSetCấu trúc cơ bản của lớp DataSetGồm 1 tập các bảng – DataTableGồm 1 tập các quan hệ – DataRelationDataSetDataTableDataTableDataRelationLớp DataSetSơ đồ lớp3 thuộc tính quan trọng trong DataSetTạo đối tượng DataSetMột số thuộc tính/phương thức trong DataSetLớp DataSetSơ đồ lớpLớp DataSet3 thuộc tính quan trọng trong DataSetLớp DataSet có 3 collection properties quan trọngTablesRelationsExtendedPropertiesLớp DataSet3 thuộc tính quan trọng trong DataSetTables propertyLà đối tượng của lớp DataTableCollection, có thể chứa 0 hay nhiều đối tượng DataTableĐối tượng DataTable dùng để lưu trữ 1 tập dữ liệu dạng bảng được trích ra từ Data SourceRelations propertyLà đối tượng của lớp DataRelationCollection, có thể chứa 0 hay nhiều đối tượng DataRelationĐối tượng DataRelation định nghĩa mối quan hệ cha-con giữa 2 bảng dựa vào khóa ngoạiLớp DataSet3 thuộc tính quan trọng trong DataSetExtendedProperties propertyLà đối tượng của lớp PropertyCollection, có thể chứa 0 hay nhiều đối tượng thuộc tính do người dùng tự định nghĩaThường được dùng để lưu các dữ liệu kèm theo DataSet (vd thời gian DataSet được tạo, )Lớp DataSetTạo đối tượng DataSetCách 1: Dùng constructorDataSet ds = new DataSet();DataSet ds = new DataSet("TenDataSet");Cách 2: Dựa trên 1 đối tượng DataSet có sẵnChú ý: Nếu không chỉ rõ tên của đối tượng DataSet thì tên này sẽ là “NewDataSet”DataSet ds1;DataSet ds2 = ds1.Clone();DataSet ds3 = ds1.Copy();DataSet ds4 = ds1.GetChanges();DataSet ds5 = ds1.GetChanges(DataRowState.Added);Lớp DataSet Một số thuộc tính/phương thức trong DataSetProperties DataSetNameMethod void Clear()void AcceptChanges()bool HasChanges()bool HasChanges(DataRowState rowStates)void RejectChanges()Lớp DataTableKhái niệm DataTable3 thuộc tính quan trọng trong DataTableTạo đối tượng DataTableThêm đối tượng DataTable vào đối tượng DataSet Một số thuộc tính/phương thức trong DataTableLớp DataTableKhái niệm DataTableDataTable dùng để lưu trữ 1 tập dữ liệu dạng bảng được trích ra từ Data SourceĐặc điểm của DataTable Là trung tâm của kiến trúc ADO.NETCó thể dùng độc lập với DataSetLớp DataTable3 thuộc tính quan trọng trong DataTableLớp DataTable có 3 collection properties quan trọngColumnsConstraintsRowsCấu trúc của TableLớp DataTable3 thuộc tính quan trọng trong DataTableColumns propertyLà đối tượng của lớp DataColumnCollection, có thể chứa 0 hay nhiều đối tượng DataColumnĐối tượng DataColumn dùng để định nghĩa các thuộc tính của mỗi cột của bảng (tên cột, kiểu dữ liệu lưu trữ, khóa chính, seed, step)Rows propertyLà đối tượng của lớp DataRowCollection, có thể chứa 0 hay nhiều đối tượng DataRowĐối tượng DataRow chứa dữ liệu thực sự trong DataTableLớp DataTable3 thuộc tính quan trọng trong DataTableConstraints propertyLà đối tượng của lớp ConstraintCollection, có thể chứa 0 hay nhiều đối tượng ForeignKeyConstraint và/hay UniqueConstraintLớp DataTableTạo đối tượng DataTableCách 1: Dùng ConstructorDataTable table = new DataTable();DataTable table = new DataTable("TenBang");Cách 2: Vừa tạo bảng vừa thêm vào DataSetDataTable table = tenDS.Tables.Add();DataTable table = tenDS.Tables.Add("TenBang");Cách 3: Dựa trên 1 đối tượng DataTable có sẵnDataTable table = tenTable.Clone();DataTable table = tenTable.Copy();Lớp DataTableThêm đối tượng DataTable vào DataSettenDS.Tables.Add(tenBang);Lớp DataTableMột số thuộc tính/phương thức trong DataTableThuộc tính string TableNamePhương thức void Clear()void AcceptChanges()void RejectChanges()DataRow[] Select()DataRow[] Select(string filterExp)Lớp DataColumnKhái niệm DataColumnTạo đối tượng DataColumnThêm đối tượng DataColumn vào DataTableMột số thuộc tính/phương thức trong DataColumnLớp DataColumnKhái niệm DataColumnDataColumn dùng để định nghĩa các thuộc tính của mỗi cột của bảng (tên cột, kiểu dữ liệu lưu trữ, khóa chính, seed, step)DataColumn tạo nên cấu trúc của bảng (lược đồ của bảng – schema)Lớp DataColumnTạo đối tượng DataColumnCách 1: Constructor DataColumn col = new DataColumn();DataColumn col = new DataColumn(“tenCot”);DataColumn col = new DataColumn(“tenCot”, typeof(kieu));DataColumn col = new DataColumn(“tenCot”, typeof(kieu), expr);Cách 2: Vừa tạo cột vừa thêm vào bảngDataColumn col = tenBang.Columns.Add();DataColumn col = tenBang.Columns.Add(“tenCot”); DataColumn col = tenBang.Columns.Add(“tenCot”, typeof(kieu));DataColumn col = tenBang.Columns.Add(“tenCot”, typeof(kieu), expr);Lớp DataColumnThêm đối tượng DataColumn vào DataTabletenTable.Columns.Add(tenColumn);Lớp DataColumnMột số thuộc tính/phương thức trong DataColumnThuộc tính bool AllowDBNullbool AutoIncrementlong AutoIncrementSeedlong AutoIncrementStepstring Captionstring ColumnNameType DataTypeobject DefaultValue string Expressionstring MaxLengthbool ReadOnlybool Uniqueint OrdinalPhương thức void SetOrdinal(int ordinal)Lớp DataRowKhi DataTable đã được xây dựng và các DataColumn đã được định nghĩa chúng ta có thể thêm dữ liệu vào bảngThêm dữ liệu vào bảng:Thêm đối tượng DataRow vào DataTable.Rows collection Lớp DataRowCác bước thêm dữ liệu vào DataTableB1: DataRow row=tenBang.NewRow();B2: Thiết lập các giá trị cho đối tượng row row[“tenCot”] = giatri row[index] = giatri row[dataColObject] = giatriB3: tenBang.Rows.Add(row); ConstraintsKhái niệm và phân loạiForeignKeyConstraintUniqueConstraintConstraintsKhái niệm và phân loạiKhái niệm Constraints Là những quy tắc (rules) áp dụng cho một cột hay các cột để xác định hành động khi dữ liệu của cột đó bị thay đổiPhân loại constraintsForeignKeyConstraintUniqueConstraint.ConstraintsForeignKeyConstraintForeignKeyConstraint dùng đểRàng buộc tham chiếu Định nghĩa hành vi cascade (khi giá trị trong cột của bảng cha bị thay đổi hay xóa thì ForeignKeyConstraint sẽ định nghĩa bảng con phản ứng như thế nào)ForeignKeyConstraint fk = new ForeignKeyConstraint(“tenFK”, parentCol, childCol);tenBang.Constraints.Add(fk);ConstraintsForeignKeyConstraintĐịnh nghĩa hành vi cascadeDeleteRuleUpdateRulefk.DeleteRule = Rule.Cascade; // defaultfk.DeleteRule = Rule.SetNull;fk.DeleteRule = Rule.SetDefault;fk.DeleteRule = Rule.None;ConstraintsUniqueConstraintUniqueConstraint dùng đểĐịnh nghĩa giá trị không được trùng trên 1 cột hay nhiều cột (giá trị duy nhất)ConstraintExceptionNếu nhập giá trị vi phạm ràng buộc thì chương trình sẽ ném ra ngoại lệ ConstraintExceptionUniqueConstraint uc = new UniqueConstraint(DataColumn col);UniqueConstraint uc = new UniqueConstraint(DataColumn[] col); tenBang.Constraints.Add(uc);Primary keyKhóa chính trong DataTableKhóa chính trong DataTable là một mảng các DataColumn được dùng để xác định 1 DataRow duy nhất trong DataTabletenTable.PrimaryKey = new DataColumn[]{col1, col2, };Lớp DataRelationKhái niệm và chức năng của DataRelationTạo đối tượng DataRelationThêm đối tượng DataRelation vào DataSetTruy cập các dòng dữ liệu có liên quanLớp DataRelationKhái niệm và chức năng của DataRelationKhái niệm DataRelation DataRelation dùng để thiết lập mối quan hệ giữa bảng cha (parent – master) và bảng con (child – detail) dựa trên khóa chung2 chức năng của DataRelationTìm kiếm những dòng dữ liệu liên quan đến dòng dữ liệu đang xử lýThực hiện ràng buộc tham chiếuLớp DataRelationTạo đối tượng DataRelationTạo đối tượng DataRelationDataRelation r = new DataRelation(“ten”, DataColumn parentCol, DataColumn childCol);DataRelation r = new DataRelation(“ten”, DataColumn[] parentCol, DataColumn[] childCol);Lớp DataRelationTruy cập các dòng dữ liệu có liên quanThêm đối tượng DataRelation vào DataSetDataRelation r;ds.Relations.Add(r);Truy cập các dòng dữ liệu liên quanDataRow[] rows;DataRow row;rows = parentTable.Rows[index].GetChildRows(relation);row = childTable.Rows[index].GetParentRow(relation);DataSet kiểu mạnhGiới thiệu DataSet kiểu mạnhTạo DataSet kiểu mạnh Sử dụngDataSet kiểu mạnhGiới thiệu DataSet kiểu mạnhSo sánh 2 đoạn mãDataSet kiểu yếurow = tenDS.Tables[“bangSV”].Rows[0];MessageBox.Show(row[“MaSV”]); MessageBox.Show(tenDS.bangSV[0].MaSV); DataSet kiểu mạnhDataSet kiểu mạnhTạo DataSet kiểu mạnhB1: Tạo DataSetClick phải chuột lên tên Project Add New Item: Chọn DataSetDataSet kiểu mạnhTạo DataSet kiểu mạnhB2: Tạo bảng Kéo DataTable vào Designer DataSet kiểu mạnhTạo DataSet kiểu mạnhB3: Tạo cột Click phải lên bảng trong designer Add ColumnDataSet kiểu mạnhTạo DataSet kiểu mạnhB4: Tạo khóa chính Chọn các cột Click phải lên cột Set Primary Key DataSet kiểu mạnhTạo DataSet kiểu mạnhB5: Thiết lập quan hệKéo Relation từ toolbox vào DesignerDataSet kiểu mạnhTạo DataSet kiểu mạnhDataSet kiểu mạnhSử dụngCác lớp dữ liệu được tạo ra trong lớp DataSetXLXeDataSet.NhanVienDataTableXLXeDataSet.XeDataTableXLXeDataSet.PhanCongDataTableXLXeDataSet.NhanVienRowXLXeDataSet.XeRowXLXeDataSet.PhanCongRowDataSet kiểu mạnhSử dụngTruy cập các đối tượng bảng thông qua propertyXLXeDataSet ds = new XLXeDataSet();ds.Xeds.NhanViends.PhanCongDataSet kiểu mạnhSử dụngTruy cập các đối tượng dòng thông qua propertyds.Xe[int index] hay ds.Xe.Rows[int index] ds.NhanVien[int index] hay ds.NhanVien.Rows[int index] ds.PhanCong[index] hay ds.PhanCong.Rows[int index] Thêm/Xoa đối tượng dòng: Phương thức Add/Removeds.Xe.AddXeRow(XeRow row)ds.Xe.AddNhanVienRow(NhanVienRow row)ds.Xe.AddPhanCongRow(PhanCongRow row)DataSet kiểu mạnhSử dụngTruy cập các giá trị thông qua propertyds.NhanVien[i].MaNVds.NhanVien[i].Hods.NhanVien[i].Tends.NhanVien[i].NgayVaoLamLấy những dòng có liên quanDataRow[] rows = ds.NhanVien[i].GetChildRows();DataRow row = ds.NhanVien[i].GetParentRow();Một số đoạn mãDuyệt qua các bảng trong DataSetDuyệt qua các dòng trong DataTableDuyệt qua các cột trong DataTableMột số đoạn mãDuyệt qua các bảng trong DataSetMột số đoạn mãDuyệt qua các dòng trong DataTableMột số đoạn mãDuyệt qua các cột trong DataTableTóm tắt chương 3