Lưu dữ liệu với DataSet 61

Một phần của tài liệu Tìm hiểu về công nghệ NET compact framework và lập trình ứng dụng trên pocket PC (Trang 61 - 66)

DataSet là lớp khung cơ bản cho thao tác dữ liệu với .NET Compact Framework. DataSet có thể được hiểu như một dụng cụ cơ sở dữ liệu quan hệ nhỏ trong chính nó. Nó lưu giữ các bảng trong bộ nhớ và được tổ chức thành các bảng, các hàng, và các cột, và nó cho phép những người phát triển thực hiện những thao tác cơ sở dữ liệu chuẩn, như việc thêm và loại bỏ dữ liệu, sắp xếp, và kiểm tra những ràng buộc.

Làm việc với .NET Compact Framework khó hơn làm việc với desktop .NET Framework, bởi vì có nhiều sự q tải (overloads) khơng thể tìm thấy trên .NET Compact

Framework và nó dễ dàng làm cho q trình hoạt động lộn xộn, làm cho quá trình thực thi kéo dài.

Toàn bộ chiến lược để xử lý dữ liệu trong lập trình ADO.NET là làm đầy một DataSet từ một cơ sở dữ liệu lớn, bao gồm cả việc lưu dữ liệu trong DataSet , và sau đó viết lại bất kỳ sự thay đổi nào cho cơ sở dữ liệu. Chương này bàn luận việc làm thế nào để đưa dữ liệu vào DataSet bởi việc chèn dữ liệu theo chương trình và để thực hiện những thao tác đơn giản trên dữ liệu.

3.2.1 Tìm hiểu bên trong DataSet: DataTables, DataRows, và DataColumns.

DataSet chứa một hoặc nhiều DataTable. Mỗi DataTable tương ứng với một bảng trong cơ sở dữ liệu quan hệ. Nó có một tập hợp các DataRow, và mỗi DataRow có một tập các DataColumn mà nó thực sự lưu giữ dữ liệu. Để tạo ra các DataSet, DataTable, và DataColumn dễ dàng và dễ làm việc với chúng, ta đặt tên cho chúng. Hình 6.1 là sơ đồ khối miêu tả toàn bộ cấu trúc của một DataSet lưu dữ liệu cho một PhoneBook đơn giản.

Bạn có thể sử dụng một DataTable để lưu dữ liệu được kết hợp với một bảng, nhưng DataSet cung cấp các phương thức và các thuộc tính mà có thêm tiện ích và thực sự tạo ra một cơ sở dữ liệu quan hệ thu nhỏ trong bộ nhớ. Ví dụ, với DataSet bạn có thể làm tất cả những việc được nêu ở dưới đây:

 Thao tác với thông tin ở trong một DataSet như một cơ sở dữ liệu quan hệ nhỏ. Chẳng hạn, bạn có thể thiết lập những mối quan hệ cha - con, cập nhật và xóa, và tạo ra những cột dữ liệu mà được tính tốn từ những trường dữ liệu khác.

 Save hoặc load các nội dung của tất cả các DataTable vào một file XML với chỉ một dịng lệnh

 Nó thơng qua bộ máy SQL CE, bộ máy này sẽ giúp chúng ta đưa vào nó các bảng từ cơ sở dữ liệu quan hệ được lưu trữ trên thiết bị hoặc thay thế bằng dữ liệu từ máy chủ từ xa.

 Thơng qua nó, SQL cung cấp để đưa vào với các bảng từ một máy chủ từ xa..

 Nhận ở DataSet, cái mà trả về những giá trị của các Web service, hoặc thông qua DataSet để trở lại một Web service

3.2.2 Đưa dữ liệu vào trong một DataSet

Để đưa dữ liệu mới vào một DataSet, chúng ta cần thực hiện theo những bước sau:

1. Nhận một tên cho DataTable bên trong DataSet mà bạn muốn thêm hàng dữ liệu mới trong nó. Nếu cần thiết ta có thể tạo mới một DataTable. Tập hợp các DataTable mà DataSet quản lý có thể được sử dụng thông qua thuộc tính DataSet.Tables. Nếu bạn phải tạo một DataTable mới và thêm nó vào tập hợp DataSet.Tables thì bạn sẽ đi theo những bước sau (thơng thường, bạn sẽ thêm dữ liệu cho một bảng đã có sẵn, vì vậy bạn có thể bỏ qua các bước này):

- Tạo một DataTable qua cấu trúc DataTable

- Tạo một các DataColumn và thêm chúng vào tập hợp DataTable.Columns. Với mỗi DataColumn mới, bạn phải chỉ định tên cho cột và kiểu dữ liệu của nó.

- Thêm DataTable mới cho tập hợp DataSet.Table bằng cách gọi đến phương thức .Add của nó.

2. Tạo một DataRow mới bằng cách yêu cầu DataTable tạo nó ra cho bạn. Ví dụ, để tạo một hàng mới cho DataTable đầu tiên trong một DataSet ta sử dụng câu lệnh l_newRow = l_DataSet. Tables[0].NewRow. Ngoài ra, bạn cũng có thể chỉ định bảng bằng tên, ví dụ : l_newRow = l_DataSet.Tables["Customers"].NewRow 3. DataRow mới được tự động tạo ra các cột tương ứng với bảng đã được tạo. Đưa

các giá trị vào trong các cột của DataRow

4. Thêm DataRow mới vào tập hợp Rows của DataTable đã được tạo. Ví dụ : l_DataSet.Tables[0].Rows.Add(l_newRow);.

5. Sau khi chúng ta đã có tất cả các dịng như mong muốn, ta gọi DataSet.AcceptChanges để chấp nhận sự thay đổi. Để huỷ bỏ tất cả việc thêm mới dữ liệu ta gọi phương thức DataSet.RejectChanges

3.2.3. Xây dựng một DataSet lưu giữ một Phone Book

Để hiểu việc làm thế nào để tạo một DataSet có khả năng lưu trữ dữ liệu quan hệ, chúng ta sẽ xem một vài dòng code mẫu của ứng dụng PhoneBook. Đây là ứng dụng mẫu được giải thích rất chi tiết trong mục tiếp theo, cài đặt một DataSet có khả năng lưu trữ một phone book mẫu. DataSet lưu trữ một DataTable đơn, bảng này được thiết lập với hai DataColumn, một để lưu tên và một lưu số điện thoại. Đoạn mã sau mô tả năm bước cần thiết để thêm dữ liệu cho một DataSet, bao gồm cả việc tạo một bảng mới.

Đoạn code: Tạo và lưu một DataSet C#

DataSet l_DataSet = new DataSet();

// Create a DataTable that holds a "Name" and a "PhoneNumber" DataTable l_newTable = new DataTable("Phone Contacts"); l_newTable.Columns.Add(new DataColumn("Name", typeof(System.String)));

l_newTable.Columns.Add(new DataColumn("PhoneNumber", typeof(System.String)));

// Add the DataTable to the DataSet's table collection l_DataSet.Tables.Add(l_newTable);

// Now put a few names in... // GEORGE WASHINGTON

DataRow l_newRow = l_DataSet.Tables[0].NewRow(); l_newRow[0] = "George Washington";

l_newRow[1] = "555 340-1776";

l_DataSet.Tables[0].Rows.Add(l_newRow); // BEN FRANKLIN

l_newRow = l_DataSet.Tables[0].NewRow(); l_newRow["Name"] = "Ben Franklin";

l_newRow["PhoneNumber"] = "555 336-3211"; l_DataSet.Tables[0].Rows.Add(l_newRow); // Commit the changes

3.2.4. Trích dữ liệu từ một DataSet

Trích dữ liệu từ một DataSet đơn giản như việc truy nhập vào DataTable trong tập hợp DataSet.Tables và xem xét các hàng mong muốn trong bảng. Mỗi hàng có một chỉ số làm cho nó dễ dàng truy nhập vào các cột mong muốn. Chỉ số đầu tiên là số 0, như trong ví dụ:

- l_DataSet.Tables[0].Rows[0][0]: truy cập vào cột đầu tiên trong dòng đầu tiên của DataTable đầu tiên.

- l_DataSet.Tables[0].Rows[0][9]L: Truy cập vào cột thứ 10 trong hàng đầu tiên của DataTable đầu tiên.

- l_DataSet.Tables[0].Rows[29][9]: Truy cập vào cột thứ 10 trong hàng thư 30 của DataTable đầu tiên.

3.2.5. Trích dữ liệu của PhoneBook từ một DataSet

Đoạn code mẫu sau đây được đưa ra từ ứng dụng PhoneBook mẫu. Nó là một vòng lặp đi qua tất cả các hàng trong DataTable đầu tiên trong một DataSet và đưa các giá trị DataColumn thứ 0 và thứ 1 vào trong một ListBox.

C#

for (int i = 0; i < phonebookEntriesDataSet.Tables[0].Rows.Count; i++) {

this.listBox1.Items.Add(

phonebookEntriesDataSet.Tables[0].Rows[i][0] + " " + phonebookEntriesDataSet.Tables[0].Rows[i][1]); }

3.2.6. Thay đổi dữ liệu trong một DataSet

Để thay đổi dữ liệu được lưu trữ bên trong DataSet, bạn truy cập vào DataColumn mà bạn muốn thay đổi và đặt cho nó một giá trị mới. khi tất cả các thay đổi được kết thúc, bạn gọi hàm AcceptChanges để chấp nhận sự thay đổi đó.

Ví dụ, đoạn mã sau đây sẽ thiết đặt cột thứ hai trong hàng đầu tiên của bảng đầu tiên trong tập hợp DataSet thành một số ngẫu nhiên được cung cấp bởi l_randomGenerator.

C#

// Column 1 is the phone number. // |

// V

m_phonebookDS.Tables[0].Rows[0][1] = randomGenerator.Next().ToString();

Thay đổi bằng cách sử dụng chỉ số tên, cách này chậm hơn trong .NET Compact Framework khi lượng lớn dữ liệu là phức tạp:

C#

m_phonebookDS.Tables["Phone Contacts"].Rows[0]["PhoneNumber"] = l_randomGenerator.Next().ToString();

3.2.7. Gỡ những lỗi thơng thường có liên quan đến DataSet

Lỗi chung nhất mà người dùng hay gặp phải khi họ cố gắng truy nhập hoặc thay đổi một đối tượng trong một DataSet, như là một DataColumn hoặc DataRow mà nó khơng tồn tại. Ví dụ như, nếu một DataSet chỉ có hai bảng thì đoạn code này có thể bị lỗi bởi vì tập hợp DataSet.Tables sử dụng chỉ số 0:

C#

m_phonebookDS.Tables[2].Rows[0][1] = l_randomGenerator.Next().ToString();

Trong tình hình này thì một ngoại lệ chung nhất mà người phát triển sẽ thấy là IndexOutOfRangeException.

Một phần của tài liệu Tìm hiểu về công nghệ NET compact framework và lập trình ứng dụng trên pocket PC (Trang 61 - 66)