Lập trình Windows
Chương 5.2. Lấy dữ liệu theo cách Disconnected
1
Nội dung
• Khái niệm DataSet
• Khái niệm DataAdapter
• Lớp DataAdapter
• Truy vấn 1 bảng
• Truy vấn nhiều bảng
• Truy vấn lược đồ CSDL
• Ánh xạ - Mapping
2
Khái niệm DataSet
• 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
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
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
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
6
Lớp DataSet
Sơ đồ lớp
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
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
9
Lớp DataSet
3 thuộc tính quan trọng trong DataSet
• 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
10
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, …)
11
Lớp DataSet
Tạo đối tượng DataSet
• Cách 1: Dùng constructor
DataSet ds = new DataSet();
DataSet ds = new DataSet("TenDataSet");
Nếu không chỉ rõ tên của đối tượng DataSet thì tên
này sẽ là “NewDataSet”
Cách 2: Dựa trên 1 đối tượng DataSet có sẵn
DataSet
…
DataSet
DataSet
DataSet
DataSet
ds1;
ds2
ds3
ds4
ds5
=
=
=
=
ds1.Clone();
ds1.Copy();
ds1.GetChanges();
ds1.GetChanges(DataRowState.Added);
12
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()
13
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
14
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
15
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
16
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
17
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
18
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
Lớp DataTable
Thêm đối tượng DataTable vào DataSet
tenDS.Tables.Add(tenBang);
20
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)
21
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
22
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)
23
Lớp DataColumn
Tạo đối tượng DataColumn
• Cách 1: Constructor
DataColumn
DataColumn
DataColumn
DataColumn
col
col
col
col
=
=
=
=
new
new
new
new
DataColumn();
DataColumn(“tenCot”);
DataColumn(“tenCot”, typeof(kieu));
DataColumn(“tenCot”, typeof(kieu), expr);
Cách 2: Vừa tạo cột vừa thêm vào bảng
DataColumn
DataColumn
DataColumn
DataColumn
col
col
col
col
=
=
=
=
tenBang.Columns.Add();
tenBang.Columns.Add(“tenCot”);
tenBang.Columns.Add(“tenCot”, typeof(kieu));
tenBang.Columns.Add(“tenCot”, typeof(kieu), expr);
24
Lớp DataColumn
Thêm đối tượng DataColumn vào DataTable
tenTable.Columns.Add(tenColumn);
25