3. 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
4. 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
5. 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
7. 7
Lớp DataSet
3 thuộc tính quan trọng trong DataSet
Lớp DataSet có 3 collection properties quan
trọng
• Tables
• Relations
• ExtendedProperties
8. 8
Lớp DataSet
3 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
9. 9
Lớp DataSet
3 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,
…)
10. 10
Lớp DataSet
Tạo đối tượng DataSet
Cách 1: Dùng constructor
DataSet 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);
11. 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()
12. 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
13. 13
Lớp DataTable
Khá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
14. 14
Lớp DataTable
3 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
15. 15
Lớp DataTable
3 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
16. 16
Lớp DataTable
3 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
17. 17
Lớp DataTable
Tạo đối tượng DataTable
Cách 1: Dùng Constructor
DataTable table = new DataTable();
DataTable table = new DataTable("TenBang");
Cách 2: Vừa tạo bảng vừa thêm vào DataSet
DataTable table = tenDS.Tables.Add();
DataTable table = tenDS.Tables.Add("TenBang");
Cách 3: Dựa trên 1 đối tượng DataTable có sẵn
DataTable table = tenTable.Clone();
DataTable table = tenTable.Copy();
19. 19
Lớp DataTable
Mộ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)
20. 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
21. 21
Lớp DataColumn
Khá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)
22. 22
Lớp DataColumn
Tạ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ảng
DataColumn 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);
24. 24
Lớp DataColumn
Mộ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)
25. 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
26. 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”] = giatri
row[index] = giatri
row[dataColObject] = giatri
• B3: tenBang.Rows.Add(row);
28. 28
Constraints
Khá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.
29. 29
Constraints
ForeignKeyConstraint
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);
30. 30
Constraints
ForeignKeyConstraint
Định nghĩa hành vi cascade
• DeleteRule
• UpdateRule
fk.DeleteRule = Rule.Cascade; // default
fk.DeleteRule = Rule.SetNull;
fk.DeleteRule = Rule.SetDefault;
fk.DeleteRule = Rule.None;
31. 31
Constraints
UniqueConstraint
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);
32. 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, …};
33. 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
34. 34
Lớp DataRelation
Khá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
35. 35
Lớp DataRelation
Tạo đối tượng DataRelation
Tạo đối tượng DataRelation
DataRelation r = new DataRelation(“ten”,
DataColumn parentCol, DataColumn childCol);
DataRelation r = new DataRelation(“ten”,
DataColumn[] parentCol, DataColumn[] childCol);
36. 36
Lớp DataRelation
Truy cập các dòng dữ liệu có liên quan
Thêm đối tượng DataRelation vào DataSet
DataRelation r;
…
ds.Relations.Add(r);
Truy cập các dòng dữ liệu liên quan
DataRow[] rows;
DataRow row;
rows = parentTable.Rows[index].GetChildRows(relation);
row = childTable.Rows[index].GetParentRow(relation);
46. 46
DataSet kiểu mạnh
Sử 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
47. 47
DataSet kiểu mạnh
Sử 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
48. 48
DataSet kiểu mạnh
Sử 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)
49. 49
DataSet kiểu mạnh
Sử 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();
50. 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
Chỉ có 1 loại DataSet
không có SqlDataSet, OleDbDataset
Gồm 1 tập bảng
Tables Collection hay Tables Property
Tables luu 1 tap cac bảng
To create a copy of a DataSet that only includes schema, use the Clone method of the DataSet
To create an exact copy of the DataSet that includes both schema and data, use the Copy method of the DataSet.
To create a copy of a DataSet that includes schema and only the data representing Added, Modified, or Deleted rows, use the GetChanges method of the DataSet
DataTable có thề là kết quả của một phép kết một số bảng trong CSDL
A ForeignKeyConstraint is intended for use in enforcing referential integrity. In addition, you
can define cascade behavior: When a value in a column in a parent table is changed or deleted,
a ForeignKeyConstraint defines how the child table should react. For example, if a parent record
is deleted, you could specify that all child records should be deleted too—or you could set the
related field in the child records to null or default values, explicitly identifying orphaned records.
This is known as a cascading action, because an action on the parent has consequences that
travel down to affect the child as well.
The action to be taken on the child is defined in the ForeignKeyConstraint.DeleteRule
and/or the ForeignKeyConstraint.UpdateRule property, and can be set to one of four possible
System.Data.Rule enumerators, as shown in Table 6-3
A ForeignKeyConstraint is intended for use in enforcing referential integrity. In addition, you
can define cascade behavior: When a value in a column in a parent table is changed or deleted,
a ForeignKeyConstraint defines how the child table should react. For example, if a parent record
is deleted, you could specify that all child records should be deleted too—or you could set the
related field in the child records to null or default values, explicitly identifying orphaned records.
This is known as a cascading action, because an action on the parent has consequences that
travel down to affect the child as well.
The DataRelation object can perform two functions:
It can make available the records related to a record you are working with. It provides child records if you are in a parent record, and a parent record if you are working with a child record.
It can enforce constraints for referential integrity, such as deleting related child records when you delete a parent record.
The DataRelation object can perform two functions:
It can make available the records related to a record you are working with. It provides child records if you are in a parent record, and a parent record if you are working with a child record.
It can enforce constraints for referential integrity, such as deleting related child records when you delete a parent record.
Nếu nhập vi phạm ngoại lệ sẽ phát sinh ngoại lệ
InvalidConstraintException
Gianh rieng de viet code
Nhan xet
Viết ngắn gọn hơn
Không còn chuỗi
Truy cap bang thong qua property
Truy cap cot chua dữ liệu thong qua property