Tìm hiểu cấu trúc của DataSet và DataTable trong C# ADO.NET

Trong C# ADO.NET, DataSet là một đối tượng có thể chứa nhiều DataTable cùng với mối liên hệ (relationship) và các ràng buộc (constraint) được lưu hoàn toàn trong bộ nhớ để làm việc offline mà không ảnh hưởng gì tới Database.

Qua bài viết này, bạn có thể hiểu cấu trúc của DataSet, DataTable cũng như nạp dữ liệu, tạo relation, constraint và thao tác dữ liệu trên các đối tượng dữ liệu này.

Cấu trúc của DataSet và DataTable

DataSet là gì? Trong C#, Dataset và DataTable nằm trong Namespace : System.Data. Một DataSet là một ánh xạ của một database vật lý hoàn chỉnh nhưng được lưu trong bộ nhớ. DataSet bao gồm các DataTable, DataTable bao gồm các DataColumn, DataRow, các constraint được minh họa như hình dưới:

Tìm hiểu cấu trúc của DataSet và DataTable trong C# ADO.NETCác thuộc tính của DataSet và DataTable dùng để lưu trữ các collection theo hình minh họa trên.

Dưới đây là bảng mô tả chi tiết cấu trúc của DataSet và DataTable

DataSet:

TypeNameDescription
DataTableCollectionTablesGets the collection of tables contained in the System.Data.DataSet
DataRelationCollectionRelationsGet the collection of relations that link tables and allow navigation from parent tables to child tables.

DataTable:

TypeNameDescription
DataColumnCollectionColumnsGets the collection of columns that belong to this table.
DataRowCollectionRowsGets the collection of rows that belong to this table.
ConstraintCollectionConstraintsGets the collection of constraints maintained by this table.

Để thực hiện các ví dụ với DataSet và DataTable, tôi đã chuẩn bị một database đơn giản trên SQL Server gồm hai bảng Groups và Users

Dữ liệu minh họa

Tìm hiểu cấu trúc của DataSet và DataTable trong C# ADO.NET

Table Groups:

GroupIDGroupName
1Member
2Moderator
3Super Moderator
4Admin

Table Us

UserID

UserName

 GroupID

1Adon

1

2Akuma

 2

3Balrog

1

4Bison

1

5Blanka

3

6Cammy

    1

7ChunLi

1

8Cod

 4

9Dan

1

10DeeJay

  1

Nạp dữ liệu vào DataSet từ database

Phương thức sau sẽ kết nối đến database SQL Server, sau đó nạp hai table User và Group vào DataSet. Khi làm ví dụ, bạn hãy sửa chuỗi kết nối theo máy bạn và tạo các table tương ứng.

Phương thức Fill(DataSet) của DataAdapter tự động lấy tên bảng mà bạn đặt trong CommandText để đặt tên cho DataTable, tuy nhiên để chắc chắn tên bảng đúng trong trường hợp có sửa đổi, tôi dùng overload Fill(DataSet,string) để đặt tên lại cho các table.

Thay vì Fill() vào DataSet, bạn có thể dùng Fill(DataTable) để tạo ra một DataTable mới, sau đó thêm vào DataSet:

Một số tên table có thể trùng với từ khóa mà SQL sử dụng (ví dụ: User), mặc dù điều này ít khi xảy ra nhưng bạn có thể đề phòng trước bẳng cách sử dụng quy tắc đặt tên như sử dụng tiền tố, đặt tên theo danh từ số nhiều,…

Ngoài cách nạp dữ liệu từ datatable, bạn cũng có thể tạo dữ liệu động cho DataTable thông qua các collection Columns và Rows. Phần sau sẽ giới thiệu về cách thực hiện này.

Tạo dữ liệu động cho DataTable

Kiểu dữ liệu DataColumn chứa đầy đủ các property cần thiết để bạn tạo ra một mô hình dữ liệu hoàn chỉnh cho DataTable. Ta có thể tạo một column dùng làm ID với chỉ số tự động tăng bắt đầu từ 1, không cho phép null và là duy nhất như sau:

Các DataColumn cần thiết phải có hai thông tin là tên và kiểu dữ liệu. Khi đã có một DataTable rỗng, công việc thêm các DataColumn vào rất đơn giản. Ví dụ sau tạo một DataTable với tên Persons với ba column là ID, Name và Birthday cùng với kiểu dữ liệu tương ứng là int, string và DateTime:

DataTable của chúng ta vẫn là rỗng vì chưa có dữ liệu (chỉ có mô hình dữ liệu). Để tạo một DataRow ta cần gọi phương thức DataTable.NewRow(). Phương thức này trả về một DataRow với các ô chứa dữ liệu tương ứng với các cột của DataTable. Công việc thêm dữ liệu cũng rất đơn giản, dựa vào hai overload của DataRowCollection.Add() như bạn thấy dưới đây:

Xem thêm:

Một đoạn code nhỏ để in ra kết quả:

Kết quả:

ID=1, Name=Boo, Birthday=04/03/1990 12:00:00 AM

ID=2, Name=Bee, Birthday=03/05/1989 12:00:00 AM

Như bạn thấy cột ID tự động tăng, ngay cả khi bạn xóa bỏ dòng gán newRow[“ID”] = 1.

Nguồn: http://aptech.vn/kien-thuc-tin-hoc/tim-hieu-ve-cau-truc-dataset-trong-ado-net.html

Tìm hiểu cấu trúc của DataSet và DataTable trong C# ADO.NET
5 (100%) 2 đánh giá