Ngắt kết nối Data – DataSet & SqlDataAdapter

Giới thiệu

Một DataSet là một đối tượng chứa dữ liệu trong bộ nhớ và có thể gồm nhiều bảng. DataSet chỉ chứa dữ liệu chứ không tương tác với nguồn dữ liệu. Thay vào đó, SqlDataAdapter sẽ được dùng để quản lý các kết nối với nguồn dữ liệu và cho chúng ta chế độ làm việc disconnected. SqlDataAdapter mở  một kết nối chỉ khi cần thiết và đóng nó ngay sau khi tác vụ được hoàn thành. Ví dụ, SqlDataAdapter thực hiện các tác vụ sau, khi đổ dữ liệu vào DataSet:

  1. Mở kết nối
  2. Đổ dữ liệu vào DataSet (Fill)
  3. Đóng kết nối

Và thực hiện các công việc sau, khi cập nhật dữ liệu nguồn với thay đổi của DataSet:

  1. Mở kết nối
  2. Ghi thay đổi từ DataSet vào dữ liệu nguồn (Update)
  3. Đóng kết nối

Giữa hai thao tác Fill và Update, các kết nối với nguồn dữ liệu được đóng lại và bạn có thể tự do ghi, đọc dữ liệu với DataSet. Đây chính là cơ chế của mô hình làm việc với disconnected data. Bởi vì ứng dụng sẵn sàng kết nối khi cần thiết, ứng dụng trở nên dễ phát triển hơn.

Hai kịch bản minh họa cho lý do tại sao bạn cần làm việc với disconnected data: người dùng làm việc không cần kết nối mạng và giúp Web site dễ phát triển hơn. Hãy xem xét việc nhà kinh doanh cần dữ liệu của khách hàng trong khi họ đi công tác. Khi bắt đầu ngày, họ sẽ cần đồng bộ dữ liệu với database chính  để lấy các thông tin cập nhật mới nhất. Trong suốt ngày hôm đó, họ sẽ thực hiện các thay đổi trên dữ liệu khách hàng hiện tại, thêm khách hàng mới, và nhập các hóa đơn mới. Điều này hợp lệ vì họ có nguồn dữ liệu khách hàng riêng và những người khác không thể thay đổi trên cùng dòng dữ liệu. Vào cuối ngày, nhà kinh doanh cập nhật sẽ kết nối vào mạng và cập nhật thay đổi cho tiến trình xử lý ban đêm.

Kịch bản khác là giúp Web site dễ phát triển hơn.Với một SqlDataReader, bạn phải trở lại database lấy dữ liệu mỗi khi xem một trang. Điều này yêu cầu một kết nối mới cho mỗi lần tải trang, nó sẽ ảnh hưởng lớn đến hiệu suất khi số lượng người dùng tăng lên. Một cách để khắc phục điều này là dùng DataSet, chỉ cần cập nhật một lần và lưu trong bộ nhớ tạm (cache). Mỗi yêu cầu tải trang sẽ kiểm tra cache và nạp dữ liệu (từ database) nếu nó không tồn tại hoặc lấy dữ liệu ra khỏi cache và hiển thị nó. Điều này giúp hạn chế truy xuất database và tăng hiệu suất cho ứng dụng của bạn.

Các trường hợp ngoại lệ cho kịch bản trên bao gồm các trường hợp bạn cần cập nhật dữ liệu. Bạn phải quyết định, dựa trên cách dữ liệu sẽ được dùng và chiến lược của bạn. Dùng disconnected data khi thông tin của bạn thường là read-only, nhưng hãy xem xét các giải pháp thay thế (như dùng đối tượng SqlCommand để cập nhật tức thời) khi bạn yêu cầu một vài thứ linh hoạt hơn. Cũng vậy, nếu số lượng dữ liệu quá lớn để lưu trong bộ nhớ, bạn sẽ cần dùng SqlDataReader để đọc dữ liệu.