Vote nếu thấy có ích post

DataSet là một bước tăng trưởng lớn trong việc tăng trưởng ứng dụng cơ sở tài liệu đa hệ. Và đối tượng người tiêu dùng này có mối quan hệ gì với DataTable ? Hôm nay hãy cùng Blog ATP Academy khám phá Dataset là gì ngay nhé .

Dataset là gì?

DataSet là một bước phát triển lớn trong việc phát triển phần mềm cơ sở dữ liệu đa hệ. Khi lấy và chỉnh sửa dữ liệu, duy trì liên tục kết nối tới Data Source trong khi chờ user yêu cầu thì rõ ràng là tốn tài nguyên máy rất nhiều.

DataSet giúp ích ở đây rất lớn vì DataSet cho phép lưu trữ dữ liệu và chỉnh sửa tại ‘local cache’, hay gọi là offline mode. Có thể xem xét và xử lý thông tin trong khi ngắt kết nối. Một khi chỉnh sửa và xem xong thì tạo một kết nối và update dữ liệu từ local vào Data Source.
Dữ liệu trong DataSet được lưu giữ dưới dạng một Collection các Tables và bạn phải cần phải xử lý thông qua các lớp DataTable -> DataRow và DataColumn. Bảng dưới đây là kiến trúc DataSet:

photo1

– Giới thiệu về DataAdapter
Bạn chỉ cần tưởng tượng rằng : bạn có một cái bể nước (DataSource), một cái máy bơm (DataAdapter) và một cái thùng đựng nước (DataSet). Thì khi lấy nước sử dụng cái bơm lấy nước từ bể, kiểm tra và lọc nước sau đó lại dùng cái bơm hút lại về cái bể nước.

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

Namespace: System.Data

Một DataSet tựa như như một tập tin database vật lý hoàn hảo nhưng được lưu trong bộ nhớ. DataSet gồm có những DataTable, DataTable gồm có những DataColumn, DataRow, những constraint được minh họa như hình dưới :

dataset datatable structure

Các property của DataSet và DataTable dùng để tàng trữ những collection theo hình minh họa trên .

DataSet:

Type Name Description
DataTableCollection Tables Gets the collection of tables contained in the System.Data.DataSet
DataRelationCollection Relations Get the collection of relations that đường link tables and allow navigation from parent tables to child tables.

DataTable:

Type Name Description
DataColumnCollection Columns Gets the collection of columns that belong to this table.
DataRowCollection Rows Gets the collection of rows that belong to this table.
ConstraintCollection Constraints Gets the collection of constraints maintained by this table.

Nạp dữ liệu vào DataTable và DataSet

Để triển khai những ví dụ với DataSet và DataTable, tôi đã chuẩn bị sẵn sàng một database thuận tiện trên SQL Server gồm hai bảng. Để làm được bước này, yên cầu bạn nên có sẵn kiến thức và kỹ năng về liên kết database trong ADO.Net. Bạn sẽ xem tại link sau :

Dữ liệu minh họa

group user relation

Table Groups:

GroupID GroupName
1 Member
2 Moderator
3 Super Moderator
4 Admin

Table Us

UserID UserName GroupID
1 Adon 1
2 Akuma 2
3 Balrog 1
4 Bison 1
5 Blanka 3
6 Cammy 1
7 ChunLi 1
8 Cod 4
9 Dan 1
10 DeeJay 1

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

Phương thức sau sẽ link đến database SQL Server, sau đấy nạp hai table User và nhóm vào DataSet. Khi làm VD, bạn hãy sửa chuỗi liên kết theo máy bạn và tạo những table tương ứng .

private static DataSet LoadData()
var conn = new SqlConnection ( " Server = YINYANG \ \ SQLEXPRESS ; Database = YinYangDB ; Trusted_Connection = true " ) ; conn. Open ( ) ; var cmd = " Select * from Users " ; var dataAdapter = new SqlDataAdapter ( cmd, conn ) ; var dataSet = new DataSet ( ) ; dataAdapter. Fill ( dataSet, " User " ) ; dataAdapter. SelectCommand. CommandText = " Select * from Groups " ; dataAdapter. Fill ( dataSet, " Group " ) ; conn. Close ( ) ; return dataSet ;

Phương thức Fill ( DataSet ) của DataAdapter tự động hóa tích lũy tên bảng mà bạn đặt trong CommandText để đặt tên cho DataTable, tuy nhiên để chắc như đinh 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 những table .
Thay vì Fill ( ) vào DataSet, bạn hoàn toàn có thể dùng Fill ( DataTable ) để làm ra một DataTable mới, sau đó chèn vào DataSet :

var table=new DataTable("Group");

dataAdapter.Fill(table);

dataSet.Tables.Add(table);

Một số tên table hoàn toàn có thể trùng với từ khóa mà SQL dùng ( ví dụ : User ), mặc dầu việc này ít khi Open tuy nhiên bạn sẽ đề phòng trước bẳng cách 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 tài liệu từ datatable, bạn cũng hoàn toàn có thể tạo tài liệu động cho DataTable trải qua những collection Columns và Rows. Phần sau sẽ trình làng về cách thực thi này .

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

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

DataColumn col = new DataColumn("ID", typeof(int));

col.AllowDBNull = false;
col.AutoIncrement = true;
col.AutoIncrementSeed = 1;
col.Unique = true;

Các DataColumn quan trọng phải có hai thông tin là tên và kiểu dữ liệu. Khi đã có một DataTable rỗng, hoạt động thêm các DataColumn vào rất dễ dàng. VD 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 table = new DataTable("Persons");

DataColumn col = new DataColumn("ID", typeof(int));

col.AllowDBNull = false;
col.AutoIncrement = true;
col.AutoIncrementSeed = 1;
col.Unique = true;

table.Columns.Add(col);
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Birthday", typeof(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(). Cách làm 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. Hoạt động thêm dữ liệu cũng rất dễ dàng, phụ thuộc vào hai overload của DataRowCollection.Add() như bạn thấy dưới đây:

DataRow newRow = table.NewRow();

newRow["ID"] = 1; // remove this line
newRow["Name"] = "Boo";
newRow["Birthday"] = new DateTime(1990,3,4);

table.Rows.Add(newRow);
table.Rows.Add(null, "Bee", new DateTime(1989, 5, 3));

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

foreach (DataRow row in table.Rows)
Console. WriteLine ( " ID = 0, Name = 1, Birthday = 2 ", row [ " ID " ], row [ " Name " ], row [ " Birthday " ] ) ;

Output :
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.

So sánh DataSet và DataReader

Nếu bạn đơn thuần chỉ muốn thu thập dữ liệu và trình diễn nó ra thôi thì sử dụng DataReader. Đáng chú ý quan tâm trường hợp mà bạn đọc với một số lượng lớn tài liệu, ví như là vòng lặp tới hàng triệu dòng tác dụng tài liệu, bạn mong ước vận tốc đọc nhanh và trình diễn nhanh thì DataReader được dùng cho mục tiêu này, NHANH và TIỆN LỢI, cho việc ĐỌC dữ liệu .
Nếu bạn muốn chỉnh sử tài liệu rồi update thông tin dữ liệu lại database thì bạn sử dụng DataSet. DataAdapter lấp đầy ( fill ) tài liệu vào DataSet bằng việc sử dụng một DataReader, thêm vào đấy resource cần được lưu giữ vào để dùng khi ngắt liên kết. Do đó việc sử dụng DataSet tốn nhiều tài nguyên hơn DataReader rất nhiều, bạn cần xem xét ở đây khi nào dùng thành phần nào thì tốt, tránh lạm dụng quá. Nếu bạn muốn đọc tài liệu và viết ra dưới dạng XML, hoặc export database schema, viết lại db dưới dạng XML, …. thì nên dùng DataReader .

TỔNG KẾT

Trên đây là những san sẻ hàng loạt về Dataset là gì, kỳ vọng những san sẻ trên giúp ích được cho bạn .
Chúc bạn thực thi thành công xuất sắc nha !

>>Có thể bạn đang tìm:

Ngoài ra, chúng tôi dành tặng bộ tài liệu Tổng hợp kiến thức về Code Web và Digital Marketing nếu bạn cần tư vấn thêm hãy để lại SĐT hoặc Email mình sẽ gửi ngay cho nhé!!

Hotline: 0708777767

Zalo: 0708777767 (Leo Minh)

Facebook: https://www.facebook.com/MinhLeATP/

Hẹn gặp lại những bạn trong bài viết sau nha .

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *