2008-08-05 51 views
103

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

Tuy nhiên, nhiều ví dụ trên web hiển thị bằng cách sử dụng Số liệu thay thế và truy cập (các) bảng thông qua phương pháp thu thập.

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

+0

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 Trình đọc dữ liệu: http://aspnet.4guysfromrolla.com/articles/050405-1.aspx http://aspnet.4guysfromrolla.com/articles/ 051805-1.aspx http://www.devx.com/vb2themax/Article/19887/1954?pf=true – GernBlandston

Trả lời

82

Nó thực sự phụ thuộc vào loại dữ liệu bạn đang mang lại. Vì một DataSet (có hiệu lực) chỉ là một tập hợp các đối tượng DataTable, bạn có thể trả về nhiều bộ dữ liệu riêng biệt thành một đối tượng duy nhất, 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 chưa đượ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.

6

trong 1.x đã từng là những thứ mà DataTables không thể thực hiện mà DataSets có thể (không nhớ chính xác điều 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 kết quả duy nhất, đó là lựa chọn tốt nhất của bạn giữa hai người.

+3

AFAIK một trong những điều lớn nhất là một DataTable không thể được tuần tự hóa và không thể được trả lại như là kết quả từ một WebService. –

5

Một tính năng của Số 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 lưu sẵn của bạn, Số liệu sẽ có một DataTable cho mỗi.

+0

Bạn cũng có thể chạy nhiều truy vấn chọn SQL trong một SQLCommand và truy cập từng 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 vào một 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 bên trong trong DataTable, chẳng hạn như bảo trì chỉ mục, v.v. Xem this article để biết thêm chi tiết.

19

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ả lại một tập hợp kết quả duy nhất mặc dù tôi nghĩ một 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à một DataSet thực hiện và theo dõi nhiều DataTables.

0

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