ADO.NET
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Cách dùng DataSet trong C# [ADO.NET]

Trong bài viết này chúng ta sẽ tìm hiểu xem DataSet trong C# ADO.NET là gì? các thuộc tính, chức năng và cách sử dụng nó như thế nào. Sau đó là một vài ví dụ cụ thể sử dụng DataSet để các bạn có thể hiểu rõ hơn nhé.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Ở bài trước mình đã giới thiệu về DataTable trong ADO.NET, các bạn có thể xem lại để hiểu rõ cách dùng của nó.

1. DataSet trong C# là gì?

DataSet đại diện cho một tập hợp con của cơ sở dữ liệu trong bộ nhớ. Hay nói cách khác, DataSet là một tập hợp các bảng dữ liệu có chứa dữ liệu quan hệ trong bộ nhớ ở định dạng bảng (table).

Nó không yêu cầu kết nối mở hoặc hoạt động liên tục với cơ sở dữ liệu. DataSet được sử dụng để tìm nạp dữ liệu mà không cần tương tác với bất kì nguồn dữ liệu nào.

Bài viết này được đăng tại [free tuts .net]

*Lưu ý: DataSet là thành phần cốt lõi để cung cấp quyền truy cập dữ liệu trong môi trường phân tán và ngắt két nối (disconnected). Class DataSet thuộc namespace System.Data.

Signature của DataSet trong ADO.NET.

public class DataSet : MarshalByValueComponent, IListSource, IXmlSerializable, ISupportInitializeNotification, ISupportInitialize, ISerializable
{
}

2. Cấu trúc của DataSet trong C#

Trong phần này chúng ta sẽ tìm hiểu về cấu trúc của DataSet trong ADO.NET. Cụ thể thì DataSet cung cấp 4 hàm tạo sau đây.

public DataSet();
public DataSet(string dataSetName);
public DataSet(SerializationInfo info, StreamingContext context);
public DataSet(SerializationInfo info, StreamingContext context, bool ConstrucSchema);

Trong đó:

  • DataSet(): Khởi tạo một instance mới của class System.Data.DataSet.
  • DataSet(string dataSetName): Khởi tạo một instance mới của class System.Data.DataSet với tên đã cho.
  • DataSet(SerializationInfo info, StreamingContext context): Khởi tạo một instance mới của class System.Data.DataSet với thông tin dữ liệu và ngữ cảnh (nguồn và đích của một luồng dữ liệu được tuần tự hóa).
  • DataSet(SerializationInfo info, StreamingContext context, bool ConstructSchema): Khởi tạo một instance mới của class System.Data.DataSet.

3. Các thuộc tính và phương thức của DataSet trong C#

Trong phần này mình sẽ giới thiệu về các thuộc tính và các phương thức của DataSet trong ADO.NET, đây là một phần khá quan trọng vì vậy các bạn hãy chú ý nhé.

Các thuộc tính của DataSet trong ADO.NET.

  • CaseSensitive: Được sử dụng để lấy hoặc đặt một giá trị cho biết liệu các so sánh chuỗi trong các đối tượng System.Data.DataTable có phân biệt chữ hoa hoặc chữ thường hay không. Nó trả về true nếu các so sánh chuỗi là chữ hoa hoặc chữ thường, ngược lại là false (mặc định là false).
  • DefaultViewManager: Được sử dụng để có thể xem được chế độ tùy chỉnh dữ liệu có trong System.Data.Set để cho phép lọc, tìm kiếm và điều hướng bằng cách sử dụng System.Data.DataViewManager tùy chỉnh.
  • DataSetName: Được sử dụng để lấy hoặc đặt trên của System.Data.DataSet hiện tại.
  • EnforceConstraints: Được sử dụng để lấy hoặc đặt một giá trị cho biết liệu các quy tắc ràng buộc có được tuân theo khi thực hiện bất kỳ thao tác cập nhật nào hay không.
  • HasErrors: Được sử dụng để nhận một giá trị cho biết liệu có lỗi trong bất kì đối tượng DataTable nào trong DataSet này hay không.
  • IsInitialized: Được sử dụng để nhận một giá trị cho biết liệu DataSet có được khởi tạo hay không. Nó trả về true để cho biết thành phần đã được khởi tạo, ngược lại là false.
  • Prefix: Được sử dụng để lấy hoặc đặt một tiền tố XML làm bí danh cho namespace System.Data.DataSet.
  • Locale: Được sử dụng để lấy hoặc đặt thông tin ngôn ngữ cho việc so sánh các chuỗi trong bảng.
  • Namespace: Được sử dụng để lấy hoặc đặt tên namespace của System.Data.DataSet.
  • Site: Được sử dụng dể lấy hoặc thiết lập một System.ComponentModel.ISite cho System.Data.DataSet.
  • Relations: Được sử dụng để lấy tập hợp các quan hệ liên kết các bảng và cho phép điều hướng từ bảng mẹ sang bảng con.
  • Tables: Được sử dụng để lấy tập hợp các bảng có trong System.Data.DataSet.

Các phương thức của DataSet trong ADO.NET.

  • BeginInit(): Nó bắt đâu khởi tạo System.Data.DataSet được sử dụng trên một biểu mẫu hoặc được sử dụng bởi một component khác. Quá trình khởi tạo này xảy ra tại thời điểm bắt đầu chạy.
  • Clear(): Xóa DataSet của bất kỳ dữ liệu nào, bằng cách xóa tất cả các hàng trong tất cả các bảng.
  • Clone(): Sao chép cấu trúc của DataSet, bao gồm tất cả các Schema, quan hệ và ràng buộc DataTable. Nhưng ngược lại nó sẽ không sao chép bất kỳ dữ liệu nào.
  • Copy(): Sao chéo cả cấu trúc và dữ liệu của DataSet được chọn.
  • CreateDataReader(): Trả về một DataTableReader với một tập kết quả cho mỗi DataTable, theo trình tự giống như các bảng xuất hiện trong System.Data.DataSet.Tables.
  • CreateDataReader(params DataTable[] dataTables): Trả về một System.Data.DataTableReader với một tập kết quả cho mỗi System.Data.DataTable.
  • EndInit(): Nó kết thúc việc khởi tạo DataSet, được sử dụng trên một biễu mẫu hoặc được sử dụng bởi một component khác.
  • GetXml(): Trả về biểu diễn XML của dữ liệu được lưu trữ trong DataSet.
  • GetXmlSchema(): Trả về Schema XML cho biểu diễn XML của dữ liệu được lưu trữ trong DataSet.

4. So sánh giữa DataReader và DataSet trong C#

Trong phần này mình sẽ đưa ra một vài chức năng của hai class trong C# ADO.NET đó là DataReader và DataSet, để các bạn có thể so sánh và lựa chọn sử dụng trong các trường hợp khác nhau.

Một vài chức năng của DataSet.

  • ​Khi muốn lưu dữ liệu vào bộ nhớ đệm cục bộ trong ứng dụng của mình để bạn có thể thao tác dữ liệu.
  • Khi muốn tương tác động với dữ liệu, tức là ràng buộc dữ liệu với điều khiển winforms.
  • Khi muốn làm việc với architecture bị ngắt kết nối.

Một vài chức năng của DataReader.

  • Nếu muốn thêm một số chức năng khác được đề cập ở trên, thì cần sử dụng DataReader để làm đa dạng ứng dụng.
  • DataReader hoạt động trên architecture kết nối, tức là nó yêu cầu có kết nối mở với cơ sở dữ liệu.

5. Ví dụ sử dụng DataSet trong C#

Trong ví dụ này mình sẽ hướng dẫn cụ thể các bước tạo và sử dụng một DataSet trong C# ADO.NET, các bạn chú ý theo dõi nhé.

Tạo bảng dữ liệu Customer.

// Tạo một bảng Customer
DataTable Customer = new DataTable("Customer");

//Tạo các cột và các schema
DataColumn CustomerId = new DataColumn("ID", typeof(Int32));
Customer.Columns.Add(CustomerId);
DataColumn CustomerName = new DataColumn("Name", typeof(string));
Customer.Columns.Add(CustomerName);
DataColumn CustomerMobile = new DataColumn("Mobile", typeof(string));
Customer.Columns.Add(CustomerMobile);

//Thêm các hàng dữ liệu vào bảng Customer
Customer.Rows.Add(101, "Van Quyen", "118001229");
Customer.Rows.Add(202, "Freetuts.net", "1234567890");

Như các bạn đã thấy, mình đã tạo một DataTable với tên là Customer. Sau đó tạo ba cột dữ liệu và thêm ba cột này vào bảng dữ liệu Customer.

Cuối cùng là tạo hai hàng dữ liệu và thêm hai hàng dữ liệu này vào bảng Customer. Như vậy là chúng ta đã tạo thành công bảng dữ liệu Customer với ba cột và hai hàng dữ liệu

Tạo bảng dữ liệu Orders.

// Tạo bảng Orders
DataTable Orders = new DataTable("Orders");

//Tạo các cột và các schema
DataColumn OrderId = new DataColumn("ID", typeof(Int32));
Orders.Columns.Add(OrderId);
DataColumn CustId = new DataColumn("CustomerId", typeof(Int32));
Orders.Columns.Add(CustId);
DataColumn OrderAmount = new DataColumn("Amount", typeof(Int32));
Orders.Columns.Add(OrderAmount);
                
//Thêm các hàng dữ liệu vào bảng Orders
Orders.Rows.Add(10001, 101, 20000);
Orders.Rows.Add(10002, 102, 30000);

Tương tự như bảng Customer, ở bảng này ta cũng tạo DataTable, sau đó tạo các cột và hàng dữ liệu rồi thêm vào bảng.

Tạo DataSet và DataTable.

 //Tạo DataSet
DataSet dataSet = new DataSet();

//Thêm các DataTables vào DataSet.
dataSet.Tables.Add(Customer);
dataSet.Tables.Add(Orders);

Như đã nói ở phần trên, thì DataSet là một tập hợp các DataTable. Vì vậy ta cần tạo một đối tượng DataSet và sau đó thêm hai bảng dữ liệu (Customer và Orders) vào DataSet.

Đưa dữ liệu vào DataTable từ DataSet.

Để đưa dữ liệu vào DataTable từ DataSet ta có thể sử dụng hai cách. Cách thứ nhất là sử dụng vị trí index để thể thêm vào DataTable và cách thứ hai là sử dụng tên bảng (Name).

Sử dụng vị trí index:

foreach (DataRow row in dataSet.Tables[0].Rows)
{
      Console.WriteLine(row["ID"] + ",  " + row["Name"] + ",  " + row["Mobile"]);
}

Vì lần đầu tiên ta thêm bảng Customer vào DataSet nên vị trí index của nó bằng 0. Nếu muốn lặp lại dữ liệu bảng khách hàng thì có thể sử dụng vòng lặp foreach để lặp lại.

Sử dụng tên bảng:

foreach (DataRow row in dataSet.Tables["Orders"].Rows)
{
      Console.WriteLine(row["ID"] + ",  " + row["CustomerId"] + ",  " + row["Amount"]);
}

Ngoài cách sử dụng vị trí index như trên, ta còn có thể sử dụng tên của bảng để thêm dữ liệu vào bằng cách sử dụng vòng lặp foreach.

Full Code.

using System;
using System.Data;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //tạo mới một bảng có tên Customer
                DataTable Customer = new DataTable("Customer");
                //tạo các cột và các schema của bảng
                DataColumn CustomerId = new DataColumn("ID", typeof(Int32));
                Customer.Columns.Add(CustomerId);
                DataColumn CustomerName = new DataColumn("Name", typeof(string));
                Customer.Columns.Add(CustomerName);
                DataColumn CustomerMobile = new DataColumn("Mobile", typeof(string));
                Customer.Columns.Add(CustomerMobile);
                //thêm các hàng dữ liệu vào bảng Customer
                Customer.Rows.Add(101, "Van Quyen", "118001229");
                Customer.Rows.Add(202, "Freetuts.net", "1234567890");

                //tạo mới một bảng Orders
                DataTable Orders = new DataTable("Orders");
                //tạo các cột vầ các schema của bảng
                DataColumn OrderId = new DataColumn("ID", typeof(Int32));
                Orders.Columns.Add(OrderId);
                DataColumn CustId = new DataColumn("CustomerId", typeof(Int32));
                Orders.Columns.Add(CustId);
                DataColumn OrderAmount = new DataColumn("Amount", typeof(Int32));
                Orders.Columns.Add(OrderAmount);

                //thêm các hàng dữ liệu vào bảng Orders
                Orders.Rows.Add(10001, 101, 20000);
                Orders.Rows.Add(10002, 102, 30000);

                //tạo mới một instance DataSet
                DataSet dataSet = new DataSet();
                //thêm các datatable vào dataset
                dataSet.Tables.Add(Customer);
                dataSet.Tables.Add(Orders);

                Console.WriteLine("Du lieu trong bang Customer: ");
                //sử dụng vòng lặp foreach để thêm dữ liệu vào datatable bằng vị trí index
                foreach (DataRow row in dataSet.Tables[0].Rows)
                {
                    Console.WriteLine(row["ID"] + ",  " + row["Name"] + ",  " + row["Mobile"]);
                }
                Console.WriteLine();

                Console.WriteLine("Du lieu trong bang Orders: ");
                //sử dụng vòng lặp foreach để thêm dữ liệu vào datatable bằng tên bảng
                foreach (DataRow row in dataSet.Tables["Orders"].Rows)
                {
                    Console.WriteLine(row["ID"] + ",  " + row["CustomerId"] + ",  " + row["Amount"]);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Co loi xay ra.\n" + e);
            }
            Console.ReadKey();
        }
    }
}

Kết quả:

bai9 01 png

Như vậy là chúng ta đã tìm hiểu xong về DataSet trong C# ADO.NET là gì? các thuộc tính, phương thức và cách sử dụng nó. Ở bài tiếp theo mình sẽ tiếp tục hướng dẫn cách thao tác với SQL bằng DataSet, các bạn nhớ chú ý theo dõi nhé !!!

Cùng chuyên mục:

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Trong bài viết này Freetuts chia sẽ cho các bạn một ứng dụng khá thú…

Factory Design Pattern trong C# - Cách triển khai và ví dụ

Factory Design Pattern trong C# - Cách triển khai và ví dụ

Chúng ta sẽ tìm hiểu về Factory Design Pattern trong C# là gì? Cách triển…

Hướng dẫn giải phương trình bậc hai trong C#

Hướng dẫn giải phương trình bậc hai trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Cách nối hai mảng trong C# bằng hai cách khác nhau

Cách nối hai mảng trong C# bằng hai cách khác nhau

Hướng dẫn chuyển đổi giờ phút giây trong C#

Hướng dẫn chuyển đổi giờ phút giây trong C#

Cách tìm số lớn nhất trong mảng C# cực dễ

Cách tìm số lớn nhất trong mảng C# cực dễ

Trong bài viết này mình sẽ hướng dẫn các bạn cách ..

Cách kiểm tra sự tồn tại của giá trị x trong mảng C#

Cách kiểm tra sự tồn tại của giá trị x trong mảng C#

Mình sẽ thực hiện một chương trình kiểm tra giá x có tồn ...

Cách tìm số nhỏ nhất và lớn nhất trong C#

Cách tìm số nhỏ nhất và lớn nhất trong C#

Mình sẽ thực hiện hai chương trình để tìm số nhỏ nhất và số lớn…

Cách tạo các số ngẫu nhiên (Random) trong C#

Cách tạo các số ngẫu nhiên (Random) trong C#

Cách tính căn bậc hai trong C# cực dễ

Cách tính căn bậc hai trong C# cực dễ

Trong bài viết này mình sẽ hướng dẫn các bạn cách tính căn bậc hai…

Cách làm tròn số trong C# bằng hàm Math.Round

Cách làm tròn số trong C# bằng hàm Math.Round

Mình sẽ thực hiện làm tròn số theo nhiều cách khác nhau để các bạn…

Cách tìm ước số của một số nguyên trong C#

Cách tìm ước số của một số nguyên trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tìm ...

Cách tìm bội chung nhỏ nhất trong C#

Cách tìm bội chung nhỏ nhất trong C#

Cách kiểm tra số chính phương trong C#

Cách kiểm tra số chính phương trong C#

Trước đi vào viết chương trình, các bạn cùng ...

Cách kiểm tra số hoàn hảo trong C#

Cách kiểm tra số hoàn hảo trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách kiểm ...

Cách đảo ngược các phần tử trong mảng C#

Cách đảo ngược các phần tử trong mảng C#

Mình sẽ thực hiện một chương trình nhận các giá trị của các phần ...

Cách tính trung bình cộng các phần tử trong mảng C#

Cách tính trung bình cộng các phần tử trong mảng C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tính ...

Cách chuyển chữ thường thành chữ in hoa và ngược lại trong C#

Cách chuyển chữ thường thành chữ in hoa và ngược lại trong C#

Mình sẽ thực hiện hai chương trình để chuyển ..

Cách viết hoa ký tự đầu tiên trong C#

Cách viết hoa ký tự đầu tiên trong C#

Mình sẽ thực hiện các chương trình để viết hoa ký từ đầu với các…

Top