2011-10-01 26 views
7

Tôi muốn hiểu mục đích của bộ dữ liệu khi chúng ta có thể trực tiếp giao tiếp với cơ sở dữ liệu bằng cách sử dụng các câu lệnh SQL đơn giản. Ngoài ra, cách nào tốt hơn? Cập nhật dữ liệu trong tập dữ liệu và sau đó chuyển chúng vào cơ sở dữ liệu cùng một lúc hoặc cập nhật cơ sở dữ liệu trực tiếp?Mục đích của Tập dữ liệu là gì?

Trả lời

28

Tôi muốn hiểu mục đích của bộ dữ liệu khi chúng ta có thể trực tiếp liên lạc với cơ sở dữ liệu sử dụng các câu lệnh SQL đơn giản.

Tại sao bạn có thức ăn trong tủ lạnh, khi bạn chỉ có thể đến thẳng cửa hàng tạp hóa mỗi lần bạn muốn ăn gì đó? Bởi vì đi đến cửa hàng tạp hóa mỗi khi bạn muốn một món ăn là vô cùng bất tiện.

Mục đích của DataSets là tránh trực tiếp giao tiếp với cơ sở dữ liệu bằng cách sử dụng các câu lệnh SQL đơn giản.Mục đích của một DataSet là hoạt động như một bản sao cục bộ rẻ tiền của dữ liệu mà bạn quan tâm để bạn không phải tiếp tục thực hiện các cuộc gọi có độ trễ cao đắt tiền đến cơ sở dữ liệu. Chúng cho phép bạn lái xe đến kho dữ liệu sau khi, tải mọi thứ bạn cần cho tuần tiếp theo và nhét vào tủ lạnh trong nhà bếp để ở đó khi bạn cần.

Ngoài ra, cách nào tốt hơn? Cập nhật dữ liệu trong tập dữ liệu và sau đó chuyển chúng vào cơ sở dữ liệu cùng một lúc hoặc cập nhật cơ sở dữ liệu trực tiếp?

Bạn đặt hàng tá sản phẩm khác nhau từ trang web. Cách nào tốt hơn: phân phối từng sản phẩm ngay khi chúng có sẵn từ nhà sản xuất của họ hoặc chờ cho đến khi tất cả đều có sẵn và vận chuyển tất cả cùng một lúc? Cách đầu tiên, bạn nhận được mỗi mục càng sớm càng tốt; cách thứ hai có chi phí phân phối thấp hơn. Cách nào là tốt hơn? Làm sao chúng ta biết được? Đó là vào bạn để quyết định!

Chiến lược cập nhật dữ liệu là tốt hơn là cách thực hiện theo cách đáp ứng tốt hơn nhu cầu và nhu cầu của khách hàng của bạn. Bạn chưa cho chúng tôi biết số liệu của khách hàng của bạn cho "tốt hơn" là gì, vì vậy câu hỏi không thể trả lời được. Khách hàng của bạn muốn gì - những nội dung mới nhất ngay khi có sẵn hoặc phí giao hàng thấp?

+0

cảm ơn lời giải thích: D – Lihini

+0

Nhân tiện, không có khách hàng. Chỉ là bản thân tôi. Nó chỉ là một hệ thống quản lý cổ phiếu tôi đang thực hành. Vì dữ liệu được sử dụng nhiều lần để xem và cập nhật, tôi đoán các tập dữ liệu là câu trả lời. Nhưng vẫn còn, có vấn đề này trong trường hợp thất bại hệ thống, tất cả các công việc được thực hiện bởi người dùng sẽ bị lạc trừ khi cơ sở dữ liệu được cập nhật cho mỗi và mọi cập nhật do người dùng thực hiện. Có thể ngăn chặn điều này với bộ dữ liệu không? – Lihini

+0

@Lizzie: Đó là một ứng cử viên tuyệt vời cho một câu hỏi mới. –

0

Tôi thường thích thực hành điều đó, nếu tôi cần thực hiện một loạt các phép thử phân tích trên một tập dữ liệu lớn, tôi sẽ điền một tập dữ liệu (hoặc một dữ liệu tùy thuộc vào cấu trúc). Bằng cách đó, nó là một mô hình bị ngắt kết nối khỏi cơ sở dữ liệu.

Nhưng đối với các truy vấn DML, tôi thích các lần truy cập nhanh trực tiếp vào cơ sở dữ liệu (tốt hơn là thông qua các procs được lưu trữ). Tôi đã tìm thấy đây là hiệu quả nhất, và với các truy vấn được điều chỉnh tốt nó không phải là xấu ở tất cả trên db.

11

Bộ dữ liệu hỗ trợ kiến ​​trúc bị ngắt kết nối. Bạn có thể thêm dữ liệu cục bộ, xóa khỏi nó và sau đó sử dụng SqlAdapter bạn có thể cam kết mọi thứ vào cơ sở dữ liệu. Bạn thậm chí có thể tải tệp xml trực tiếp vào tập dữ liệu. Nó thực sự phụ thuộc vào yêu cầu của bạn là gì. Bạn thậm chí có thể thiết lập trong quan hệ bộ nhớ giữa các bảng trong DataSet.

Và btw, sử dụng truy vấn sql trực tiếp được nhúng trong ứng dụng của bạn thực sự là cách thiết kế ứng dụng thực sự tồi tệ và kém. Ứng dụng của bạn sẽ dễ bị "Sql Injection". Thứ hai, nếu bạn viết các truy vấn như nhúng trong ứng dụng, Sql Server phải thực hiện kế hoạch thực hiện của nó mọi lúc trong khi các thủ tục lưu sẵn được biên dịch và thực thi nó đã được quyết định khi nó được biên dịch. Sql server cũng có thể thay đổi kế hoạch của nó khi dữ liệu lớn. Bạn sẽ nhận được cải thiện hiệu suất bằng cách này. Atleast sử dụng các thủ tục được lưu trữ và xác nhận đầu vào rác trong đó. Họ vốn đã kháng Sql Injection.

Thủ tục được lưu trữ và Tập dữ liệu là cách để thực hiện.

Xem sơ đồ này:

enter image description here

Edit: Nếu bạn là thành .Net framework 3.5, 4.0, bạn có thể sử dụng số ORMs như Entity Framework, NHibernate, cận âm. ORM đại diện cho mô hình kinh doanh của bạn thực tế hơn. Bạn luôn có thể sử dụng các thủ tục được lưu trữ với ORM nếu một số tính năng không được hỗ trợ vào ORM.

Ví dụ: Nếu bạn đang viết CTE đệ quy (Biểu thức bảng chung) Thủ tục lưu trữ rất hữu ích. Bạn sẽ gặp phải quá nhiều vấn đề nếu bạn sử dụng Entity Framework cho điều đó.

+0

Tôi muốn không đồng ý - tôi sẽ nói sử dụng trình ánh xạ đối tượng (như Entity Framework, cũng hỗ trợ các thủ tục được lưu trữ) để biến dữ liệu quan hệ của bạn thành các đối tượng thích hợp là cách đi ..... –

+0

@ marc_s: Tôi cũng đồng ý. Nhưng câu hỏi này là đối phó với Net framework 2.0 và tôi khi tôi nói "Stored Procedures and Dataset" Tôi có nghĩa là họ là con đường để đi cho Ado.Net cùng với lớp SqlHelper cũ tốt. – TCM

+0

@GertArnold: Cảm ơn vì đã phát hiện. Tôi đã sửa chữa. – TCM

3

This page giải thích một cách chi tiết, trong đó trường hợp, bạn nên sử dụng một Dataset và trong đó trường hợp bạn sử dụng truy cập trực tiếp vào cơ sở dữ liệu

Các vấn đề liên quan