ADO.NET
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

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é.

Ở 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ó.

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.

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.

*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:

Cách dùng Stack (ngắn xếp) trong C#

Cách dùng Stack (ngắn xếp) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính và phương thức của Stack…

Cách dùng Queue (hàng đợi) trong C#

Cách dùng Queue (hàng đợi) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính, phương thức của Queue, cũng…

Cách dùng Hashtable (bảng băm) trong C#

Cách dùng Hashtable (bảng băm) trong C#

Cụ thể sẽ tìm hiểu Hashtable là gì? các đặc điểm của nó, cùng với…

Sự kiện Enter và Leave trong C# Winforms

Sự kiện Enter và Leave trong C# Winforms

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

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Một câu hỏi được đặt ra là làm cách nào để có thể phát hiện…

Sắp xếp trộn trong C# (Merge Sort)

Sắp xếp trộn trong C# (Merge Sort)

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

Sắp xếp nổi bọt trong C# (Bubble Sort)

Sắp xếp nổi bọt trong C# (Bubble Sort)

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

Cách in ra hình tam giác ký tự * trong C#

Cách in ra hình tam giác ký tự * trong C#

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

Cách tính tổng các số chẵn từ 1 đến N trong C#

Cách tính tổng các số chẵn từ 1 đến N trong C#

Trước khi đi vào viết chương trình, chúng ta cùng tìm hiểu qua số chẵn…

Cách tính tổng các số lẻ từ 1 đến N trong C#

Cách tính tổng các số lẻ từ 1 đến N trong C#

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

Cách đếm số chữ số của một số nguyên trong C#

Cách đếm số chữ số của một số nguyên trong C#

Chúng ta cùng xem qua một số ví dụ để hiểu rõ hơn về chương…

Cách tính chu vi và diện tích hình tam giác trong C#

Cách tính chu vi và diện tích hình tam giác trong C#

Tam giác là một loại hình cơ bản trong hình học, có ba đỉnh là…

Cách tính chu vi và diện tích hình tròn trong C#

Cách tính chu vi và diện tích hình tròn trong C#

Trước khi đi vào viết chương trình tính chu vi và diện ..

Cách tính chu vi và diện tích hình chữ nhật trong C#

Cách tính chu vi và diện tích hình chữ nhật trong C#

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

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Cách xóa phần tử trùng lặp khỏi mảng trong C#

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

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Cách tìm tất cả các chuỗi con của chuỗi đã cho 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 xóa các ký tự trùng lặp khỏi chuỗi trong C#

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách xóa các ký tự…

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

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

Cách chuyển đổi nhị phân sang thập phân trong C#

Cách chuyển đổi nhị phân sang thập phân trong C#

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

Cách chuyển đổi thập phân sang nhị phân trong C#

Cách chuyển đổi thập phân sang nhị phân trong C#

Số nhị phân là các con số có cơ số là 2. Các số nhị…

Top