Datable vs Dataset


129

Tôi hiện đang sử dụng DataTable để lấy kết quả từ cơ sở dữ liệu mà tôi có thể sử dụng trong mã của mình.

Tuy nhiên, nhiều ví dụ trên chương trình web sử dụng Dataset thay vào đó và truy cập (các) bảng thông qua phương thức bộ sưu tập.

Có bất kỳ lợi thế, hiệu suất khôn ngoan hay nói cách khác là sử dụng DataSets hoặc DataTables làm phương thức lưu trữ cho kết quả SQL không?


1
Nếu bạn đang làm việc với các ứng dụng web, bạn có thể muốn xem xét sử dụng DataReader: aspnet.4guysfromrolla.com/articles/050405-1.aspx aspnet.4guysfromrolla.com/articles/051805-1.aspx devx.com/vb2themax/ Bài viết / 19887/1954? Pf = true
Chris Burgess

Cuối cùng, DataTable và Dataset là các chuyển đổi hữu ích từ ADO Recordset ... trở lại vào năm 2002. Bạn không nên nướng chúng ẩn dụ dữ liệu chính của bạn những ngày này.
Marc Gravell

Câu trả lời:


94

Nó thực sự phụ thuộc vào loại dữ liệu bạn mang về. Do một Bộ dữ liệu chỉ là một tập hợp các đối tượng DataTable, nên bạn có thể trả lại nhiều bộ dữ liệu riêng biệt thành một đối tượng và do đó dễ quản lý hơn.

Hiệu suất khôn ngoan, bạn có nhiều khả năng nhận được sự kém hiệu quả từ các truy vấn không được tối ưu hóa so với lựa chọn "sai" của cấu trúc .NET. Ít nhất, đó là kinh nghiệm của tôi.


29

Một điểm khác biệt chính là DataSets có thể chứa nhiều bảng và bạn có thể xác định mối quan hệ giữa các bảng đó.

Nếu bạn chỉ trả về một tập kết quả duy nhất mặc dù tôi nghĩ rằng DataTable sẽ được tối ưu hóa hơn. Tôi nghĩ rằng phải có một số chi phí (được cấp nhỏ) để cung cấp chức năng mà Bộ dữ liệu thực hiện và theo dõi nhiều Dữ liệu.


8

trong 1.x đã từng có những thứ DataTables không thể làm mà DataSets có thể (không nhớ chính xác những gì). Tất cả đã được thay đổi trong 2.x. Tôi đoán đó là lý do tại sao rất nhiều ví dụ vẫn sử dụng DataSets. DataTables nên nhanh hơn vì chúng nhẹ hơn. Nếu bạn chỉ kéo một tập kết quả duy nhất, đó là lựa chọn tốt nhất của bạn giữa hai kết quả.


4
Một điểm lớn của AFAIK là DataTable không thể được tuần tự hóa và không thể được trả về do kết quả của Dịch vụ web.
Martin Clarke

6

Một tính năng của Bộ dữ liệu là nếu bạn có thể gọi nhiều câu lệnh chọn trong các thủ tục được lưu trữ của mình, thì Bộ dữ liệu sẽ có một DataTable cho mỗi.


Bạn cũng có thể chạy nhiều SQL chọn truy vấn trong một SQLCommand và truy cập mỗi resultset trong dataset.Tables [i]
Jan

3

Có một số tối ưu hóa bạn có thể sử dụng khi điền DataTable, chẳng hạn như gọi BeginLoadData (), chèn dữ liệu, sau đó gọi EndLoadData (). Điều này sẽ tắt một số hành vi nội bộ trong DataTable, chẳng hạn như bảo trì chỉ mục, v.v. Xem bài viết này để biết thêm chi tiết.


1

Khi bạn chỉ làm việc với một bảng duy nhất, sự khác biệt thực tế lớn nhất mà tôi đã tìm thấy là Dataset có phương thức "HasChanges" nhưng DataTable thì không. Cả hai đều có "GetChanges", vì vậy bạn có thể sử dụng và kiểm tra null.


0

Đối tượng DataTable biểu thị dữ liệu dạng bảng dưới dạng bộ nhớ trong, bộ đệm bảng của các hàng, cột và các ràng buộc. Bộ dữ liệu bao gồm một tập hợp các đối tượng DataTable mà bạn có thể liên kết với nhau bằng các đối tượng DataRelation.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.