DataSet trong C#

DataSet trong C#

  1. DataSet trong C# là gì ?
  2. Một số điểm nổi bật của DataSet
  3. Liên tưởng đến Diagram SQL Server, Relationship trong Access
  4. Cấu trúc của DataSet và DataTable
  5. Tạo DataRelation (relationship) giữa các table trong DataSet
  6. Bàn về sự vận dung linh hoạt để đẩy nhanh tốc độ xử lý phần mềm

1. DataSet trong C# là gì ?

DataSet trong C# là một lớp thuộc thư viện System.Data, được sử dụng để lưu trữ dữ liệu trong bộ nhớ, dưới dạng nhiều bảng, các bảng có mối quan hệ các cột với nhau nếu cần sự liên kết. DataSet thường được các đối tượng từ ADO lấy dữ liệu từ SQL Server / Access ... trả về.

2. Một số điểm nổi bật của DataSet

    Tập hợp nhiều bảng: DataSet có thể chứa nhiều bảng dữ liệu (DataTable), cho phép bạn quản lý dữ liệu phức tạp hơn.

    Quan hệ giữa các bảng (nếu có): Bạn có thể xác định các mối quan hệ giữa các bảng thông qua đối tượng DataRelation.

    Làm việc dạng offline: DataSet hoạt động ở chế độ không kết nối, có nghĩa là bạn có thể làm việc với dữ liệu mà không cần duy trì kết nối liên tục với cơ sở dữ liệu, bởi có DataRelation.

    Hỗ trợ cho việc đồng bộ hóa: Bạn có thể sử dụng DataSet để lưu trữ dữ liệu tạm thời và sau đó đồng bộ hóa với cơ sở dữ liệu khi cần thiết, bởi có DataRelation.

3. Liên tưởng đến Diagram SQL Server, Relationship trong Access

Nếu bạn đã từng nghiên cứu qua relationship trong Access, diagram trong SQL Server thì khi tạo 1 relationship giữa các table cũng giống như việc tạo 1 dataset nhiều table có mối liên hệ với nhau.

Theo quan điểm lập trình hướng đối tượng C#, thì đối tượng DataSet giống nhưng relationship của Access hay Diagram SQL Server, My SQL , nhưng nó xử lý hoàn toàn trên bộ nhớ RAM, giúp tạo ra các liên kết các cột giữa các table với nhau, nên dựa vào tính năng này có thể hỗ trợ cho việc đồng bộ hóa CSDL.

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


  // khai báo biến dt kiểu DataTable
 DataTable dtLop = new DataTable();
 dtLop.TableName = "lop";

 // thêm cột vào biến dtLop
 dtLop.Columns.Add("MaLop", typeof(int));
 dtLop.Columns.Add("TenTop", typeof(string));
 // thêm giá trị vào biến DataTable cách 1
 DataTable dtHocSinh = new DataTable();
 // thêm cột vào biến dtHocSinh
 dtHocSinh.Columns.Add("MaHocSinh", typeof(int));
 dtHocSinh.Columns.Add("TenHocSinh", typeof(string));
 dtHocSinh.Columns.Add("MaLop", typeof(int));
 dtHocSinh.TableName = "hocsinh";

 // khai báo biến DataSet chèn vào dtLop và dtHocSinh vào
 DataSet ds = new DataSet();
 ds.Tables.Add(dtHocSinh);
 ds.Tables.Add(dtLop);

5. Tạo DataRelation (relationship) giữa các table trong DataSet

Tại sao lại cần tạo DataRelation trong DataSet ? giống cho dữ liệu các cột đã chỉ định đồng nhất với nhau. (nếu ai từng làm bên SQL, MS Access sẽ hiểu rõ).


 //Tạo liên kết, bước này giống với tạo liên kết 2 cột trong Access, SQL Server
 // DataRelation ("tên", cột khóa chính, cột khóa phụ
 DataRelation relation = new DataRelation("Lop_LienKet",
 dtLop.Columns["MaLop"] ,dtHocSinh.Columns["MaLop"]);
 ds.Relations.Add(relation);

 // Thêm dữ liệu vào dtLop
 dtLop.Rows.Add(1, "Lop A");
 dtLop.Rows.Add(2, "Lop B");

 // Thêm dữ liệu vào dtHocSinh
 dtHocSinh.Rows.Add(1, "Tran Van A",1);
 dtHocSinh.Rows.Add(2, "Tran Van A", 2);

 // Thử nghiệm DataRelation như  thế nào ?
 dtLop.Rows[0]["MaLop"] = 4;
 // Chạy qua đoạn cocde trên ta debug và xem lại dtHocSinh cột lớp = 1, có chuyển thành lớp=4 hay không ?

Giải thích code: sau khi qua lệnh  dtLop.Rows[0]["MaLop"] = 4; thì các giá trị cột lớp =1 ở bảng tbHocSinh cũng tự động thay đổi theo. => Đây chính là cái hay của DataSet

6. Bàn về sự vận dung linh hoạt để đẩy nhanh tốc độ xử lý phần mềm

Một số lập trình viên C# đã qua cứng nhắc trong việc ứng dụng, khi nghiên cứu về DataSet thấy nó có vẻ quá phức tạp, nên đã bỏ nó không thèm ứng dụng.

Nhưng hãy nhìn 1 cách đơn giản, nếu như ta đã làm relationship bên CSDL rồi, thì ta không sử dụng DataRelation bên code C# nữa.

Dựa vào tính năng DataSet nó chỉ là đối tượng để chứa các đối tượng con là DataTable.

Nắm được điều này khi lập trình C# lấy dữ liệu từ SQL Server thì giúp ta làm phần mềm chạy nhanh khi nắm kỹ thuật này.

Cách code 1:  câu SQL truyền vào có 2 dòng select:
DataSet ds= getDataSet("Select * From A;Select * From B");
Sau đó ta tách table ra bằng cách
DataTable tb1= ds.Tables[0];
DataTable tb2= ds.Tables[0];
=> Như vậy khi connect đến SQL truyền câu sql trên vào sẽ trả về 1 DataSet có chứa 2 table A,B
=> Chỉ 1 lần connect đến SQL Server.

Cách code 2:
Nếu lập trình viên C# không kinh nghiệm, làm rời rạc thì ra về riêng 2 table, làm chậm kết nối
DataTable tb1= getDataTable("Select * From A");
DataTable tb1= getDataTable("Select * From B");
=> Code trên tốn 2 lần connet đến SQL Server
Thật là lãng phí, không cần thiết cho ông lập trình viên làm cách 2

 

Tìm kiếm: dataset trong c# la gi ?;mot so diem noi bat cua dataset;lien tuong den diagram sql server, relationship trong access;cau truc cua dataset va datatable;tao datarelation (relationship) giua cac table trong dataset;ban ve su van dung linh hoat de day nhanh toc do xu ly phan mem;