54
DataSets Chương 3

03 chuong3-datasets-140404114719-phpapp02

Embed Size (px)

Citation preview

Page 1: 03 chuong3-datasets-140404114719-phpapp02

DataSetsChương 3

Page 2: 03 chuong3-datasets-140404114719-phpapp02

2

Nội dung

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

Page 3: 03 chuong3-datasets-140404114719-phpapp02

3

Khái niệm DataSet

DataSet là gì• DataSet là một đối tượng cho phép

– Nạ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 Disconnected• DataSet không phụ thuộc vào loại data source

Page 4: 03 chuong3-datasets-140404114719-phpapp02

4

Khái niệm DataSet

Cấu trúc cơ bản của lớp DataSet• Gồm 1 tập các bảng – DataTable• Gồm 1 tập các quan hệ – DataRelation

DataSet

DataTable

DataTable

DataRelation

Page 5: 03 chuong3-datasets-140404114719-phpapp02

5

Lớp DataSet

Sơ đồ lớp 3 thuộc tính quan trọng trong DataSet Tạo đối tượng DataSet Một số thuộc tính/phương thức trong DataSet

Page 6: 03 chuong3-datasets-140404114719-phpapp02

6

Lớp DataSetSơ đồ lớp

Page 7: 03 chuong3-datasets-140404114719-phpapp02

7

Lớp DataSet3 thuộc tính quan trọng trong DataSet

Lớp DataSet có 3 collection properties quan trọng• Tables• Relations• ExtendedProperties

Page 8: 03 chuong3-datasets-140404114719-phpapp02

8

Lớp DataSet3 thuộc tính quan trọng trong DataSet

Tables property• Là đố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 Source

Relations property• Là đố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ại

Page 9: 03 chuong3-datasets-140404114719-phpapp02

9

Lớp DataSet3 thuộc tính quan trọng trong DataSet

ExtendedProperties property• Là đố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ĩa

• Thường được dùng để lưu các dữ liệu kèm theo DataSet (vd thời gian DataSet được tạo, …)

Page 10: 03 chuong3-datasets-140404114719-phpapp02

10

Lớp DataSetTạo đối tượng DataSet

Cá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ẵn

• Chú ý: 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);

Page 11: 03 chuong3-datasets-140404114719-phpapp02

11

Lớp DataSet Một số thuộc tính/phương thức trong DataSet

Properties • DataSetName

Method • void Clear()• void AcceptChanges()• bool HasChanges()• bool HasChanges(DataRowState rowStates)• void RejectChanges()

Page 12: 03 chuong3-datasets-140404114719-phpapp02

12

Lớp DataTable

Khái niệm DataTable 3 thuộc tính quan trọng trong DataTable Tạo đối tượng DataTable Thêm đối tượng DataTable vào đối tượng DataSet Một số thuộc tính/phương thức trong DataTable

Page 13: 03 chuong3-datasets-140404114719-phpapp02

13

Lớp DataTableKhái niệm DataTable

DataTable 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.NET• Có thể dùng độc lập với DataSet

Page 14: 03 chuong3-datasets-140404114719-phpapp02

14

Lớp DataTable3 thuộc tính quan trọng trong DataTable

Lớp DataTable có 3 collection properties quan trọng• Columns• Constraints• Rows

Cấu trúc của Table

Page 15: 03 chuong3-datasets-140404114719-phpapp02

15

Lớp DataTable3 thuộc tính quan trọng trong DataTable

Columns property• Là đố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 property• Là đố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

DataTable

Page 16: 03 chuong3-datasets-140404114719-phpapp02

16

Lớp DataTable3 thuộc tính quan trọng trong DataTable

Constraints property• Là đối tượng của lớp ConstraintCollection, có

thể chứa 0 hay nhiều đối tượng ForeignKeyConstraint và/hay UniqueConstraint

Page 17: 03 chuong3-datasets-140404114719-phpapp02

17

Lớp DataTableTạo đối tượng DataTable

Cá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();

Page 18: 03 chuong3-datasets-140404114719-phpapp02

18

Lớp DataTableThêm đối tượng DataTable vào DataSet

tenDS.Tables.Add(tenBang);

Page 19: 03 chuong3-datasets-140404114719-phpapp02

19

Lớp DataTableMột số thuộc tính/phương thức trong DataTable

Thuộc tính • string TableName

Phương thức • void Clear()• void AcceptChanges()• void RejectChanges()• DataRow[] Select()• DataRow[] Select(string filterExp)

Page 20: 03 chuong3-datasets-140404114719-phpapp02

20

Lớp DataColumn

Khái niệm DataColumn Tạo đối tượng DataColumn Thêm đối tượng DataColumn vào DataTable Một số thuộc tính/phương thức trong

DataColumn

Page 21: 03 chuong3-datasets-140404114719-phpapp02

21

Lớp DataColumnKhái niệm DataColumn

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)

DataColumn tạo nên cấu trúc của bảng (lược đồ của bảng – schema)

Page 22: 03 chuong3-datasets-140404114719-phpapp02

22

Lớp DataColumnTạo đối tượng DataColumn

Cá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);

Page 23: 03 chuong3-datasets-140404114719-phpapp02

23

Lớp DataColumnThêm đối tượng DataColumn vào DataTable

tenTable.Columns.Add(tenColumn);

Page 24: 03 chuong3-datasets-140404114719-phpapp02

24

Lớp DataColumnMột số thuộc tính/phương thức trong DataColumn

Thuộc tính • bool AllowDBNull• bool AutoIncrement• long AutoIncrementSeed• long AutoIncrementStep• string Caption• string ColumnName• Type DataType• object DefaultValue • string Expression• string MaxLength• bool ReadOnly• bool Unique• int Ordinal

Phương thức • void SetOrdinal(int ordinal)

Page 25: 03 chuong3-datasets-140404114719-phpapp02

25

Lớp DataRow

Khi 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ảng

Thêm dữ liệu vào bảng:• Thêm đối tượng DataRow vào

DataTable.Rows collection

Page 26: 03 chuong3-datasets-140404114719-phpapp02

26

Lớp DataRow

Các bước thêm dữ liệu vào DataTable• B1: DataRow row=tenBang.NewRow();• B2: Thiết lập các giá trị cho đối tượng row

row[“tenCot”] = giatrirow[index] = giatrirow[dataColObject] = giatri

• B3: tenBang.Rows.Add(row);

Page 27: 03 chuong3-datasets-140404114719-phpapp02

27

Constraints

Khái niệm và phân loại ForeignKeyConstraint UniqueConstraint

Page 28: 03 chuong3-datasets-140404114719-phpapp02

28

ConstraintsKhái niệm và phân loại

Khá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 đổi

Phân loại constraints• ForeignKeyConstraint• UniqueConstraint.

Page 29: 03 chuong3-datasets-140404114719-phpapp02

29

ConstraintsForeignKeyConstraint

ForeignKeyConstraint 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);

Page 30: 03 chuong3-datasets-140404114719-phpapp02

30

ConstraintsForeignKeyConstraint

Định nghĩa hành vi cascade• DeleteRule• UpdateRule

fk.DeleteRule = Rule.Cascade; // defaultfk.DeleteRule = Rule.SetNull;fk.DeleteRule = Rule.SetDefault;fk.DeleteRule = Rule.None;

Page 31: 03 chuong3-datasets-140404114719-phpapp02

31

ConstraintsUniqueConstraint

UniqueConstraint 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) ConstraintException

• Nếu nhập giá trị vi phạm ràng buộc thì chương trình sẽ ném ra ngoại lệ ConstraintException

UniqueConstraint uc = new UniqueConstraint(DataColumn col);UniqueConstraint uc = new UniqueConstraint(DataColumn[] col);

tenBang.Constraints.Add(uc);

Page 32: 03 chuong3-datasets-140404114719-phpapp02

32

Primary key

Khóa chính trong DataTable• Khó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 DataTable

tenTable.PrimaryKey = new DataColumn[]{col1, col2, …};

Page 33: 03 chuong3-datasets-140404114719-phpapp02

33

Lớp DataRelation

Khái niệm và chức năng của DataRelation Tạo đối tượng DataRelation Thêm đối tượng DataRelation vào DataSet Truy cập các dòng dữ liệu có liên quan

Page 34: 03 chuong3-datasets-140404114719-phpapp02

34

Lớp DataRelationKhái niệm và chức năng của DataRelation

Khá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 chung

2 chức năng của DataRelation• Tì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ếu

Page 35: 03 chuong3-datasets-140404114719-phpapp02

35

Lớp DataRelationTạo đối tượng DataRelation

Tạo đối tượng DataRelationDataRelation r = new DataRelation(“ten”,

DataColumn parentCol, DataColumn childCol);

DataRelation r = new DataRelation(“ten”, DataColumn[] parentCol, DataColumn[] childCol);

Page 36: 03 chuong3-datasets-140404114719-phpapp02

36

Lớp DataRelationTruy cập các dòng dữ liệu có liên quan

Thê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);

Page 37: 03 chuong3-datasets-140404114719-phpapp02

37

Page 38: 03 chuong3-datasets-140404114719-phpapp02

38

DataSet kiểu mạnh

Giới thiệu DataSet kiểu mạnh Tạo DataSet kiểu mạnh Sử dụng

Page 39: 03 chuong3-datasets-140404114719-phpapp02

39

DataSet kiểu mạnhGiới thiệu DataSet kiểu mạnh

So sánh 2 đoạn mã• DataSet kiểu yếu

row = tenDS.Tables[“bangSV”].Rows[0];MessageBox.Show(row[“MaSV”]);

MessageBox.Show(tenDS.bangSV[0].MaSV);

• DataSet kiểu mạnh

Page 40: 03 chuong3-datasets-140404114719-phpapp02

40

DataSet kiểu mạnhTạo DataSet kiểu mạnh

B1: Tạo DataSetClick phải chuột lên tên Project Add New Item: Chọn DataSet

Page 41: 03 chuong3-datasets-140404114719-phpapp02

41

DataSet kiểu mạnhTạo DataSet kiểu mạnh

B2: Tạo bảngKéo DataTable vào Designer

Page 42: 03 chuong3-datasets-140404114719-phpapp02

42

DataSet kiểu mạnhTạo DataSet kiểu mạnh

B3: Tạo cộtClick phải lên bảng trong designer

Add Column

Page 43: 03 chuong3-datasets-140404114719-phpapp02

43

DataSet kiểu mạnhTạo DataSet kiểu mạnh

B4: Tạo khóa chính Chọn các cột Click phải lên cột

Set Primary Key

Page 44: 03 chuong3-datasets-140404114719-phpapp02

44

DataSet kiểu mạnhTạo DataSet kiểu mạnh

B5: Thiết lập quan hệKéo Relation từ toolbox vào Designer

Page 45: 03 chuong3-datasets-140404114719-phpapp02

45

DataSet kiểu mạnhTạo DataSet kiểu mạnh

Page 46: 03 chuong3-datasets-140404114719-phpapp02

46

DataSet kiểu mạnhSử dụng

Các lớp dữ liệu được tạo ra trong lớp DataSet• XLXeDataSet.NhanVienDataTable• XLXeDataSet.XeDataTable• XLXeDataSet.PhanCongDataTable

• XLXeDataSet.NhanVienRow• XLXeDataSet.XeRow• XLXeDataSet.PhanCongRow

Page 47: 03 chuong3-datasets-140404114719-phpapp02

47

DataSet kiểu mạnhSử dụng

Truy cập các đối tượng bảng thông qua property• XLXeDataSet ds = new XLXeDataSet();

– ds.Xe– ds.NhanVien– ds.PhanCong

Page 48: 03 chuong3-datasets-140404114719-phpapp02

48

DataSet kiểu mạnhSử dụng

Truy cập các đối tượng dòng thông qua property• ds.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/Remove• ds.Xe.AddXeRow(XeRow row)• ds.Xe.AddNhanVienRow(NhanVienRow row)• ds.Xe.AddPhanCongRow(PhanCongRow row)

Page 49: 03 chuong3-datasets-140404114719-phpapp02

49

DataSet kiểu mạnhSử dụng

Truy cập các giá trị thông qua property• ds.NhanVien[i].MaNV• ds.NhanVien[i].Ho• ds.NhanVien[i].Ten• ds.NhanVien[i].NgayVaoLam

Lấy những dòng có liên quan• DataRow[] rows = ds.NhanVien[i].GetChildRows();• DataRow row = ds.NhanVien[i].GetParentRow();

Page 50: 03 chuong3-datasets-140404114719-phpapp02

50

Một số đoạn mã

Duyệt qua các bảng trong DataSet Duyệt qua các dòng trong DataTable Duyệt qua các cột trong DataTable

Page 51: 03 chuong3-datasets-140404114719-phpapp02

51

Một số đoạn mãDuyệt qua các bảng trong DataSet

Page 52: 03 chuong3-datasets-140404114719-phpapp02

52

Một số đoạn mãDuyệt qua các dòng trong DataTable

Page 53: 03 chuong3-datasets-140404114719-phpapp02

53

Một số đoạn mãDuyệt qua các cột trong DataTable

Page 54: 03 chuong3-datasets-140404114719-phpapp02

54

Tóm tắt chương 3