Tìm hiểu về các ràng buộc dữ liệu 6 6-

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 66 - 68)

DataSet cho phép bạn chỉ định những quy tắc riêng biệt mà dữ liệu lưu trữ bên trong tập DataSet.Tables phải theo. Lớp cơ bản Constraint chỉ rõ những quy tắc mà dữ liệu bên trong một DataTable phải theo để duy trì tính tồn vẹn cho CSDL. Hai lớp được kế thừa từ lớp Constraint trình bày sự giới hạn riêng mà dữ liệu phải theo. UniqueConstraint chỉ rõ một giá trị đặc biệt cho một DataColumn duy nhất trong bảng.

ForeignKeyConstraint được sử dụng để tạo sức mạnh cho hành động khi thay đổi hoặc xố cột khố chính của một bảng. Bởi vì ForeignKeyConstraint được dùng để thay thế cho mơ hình quan hệ cha - con giữa các bảng.

3.3.1 Thêm các ràng buộc cho một DataSet

Mỗi DataTable được lưu trữ trong tập DataSet.Tables chứa một ConstraintCollection trong thuộc tính Constraints. Ví dụ, để truy nhập ConstraintCollection trong bảng đầu tiên của một DataSet, ta dùng đoạn mã sau:

C#

m_phonebookDS.Tables[0].Constraints

Những bước tạo và khởi tạo những sự ràng buộc khác theo loại ràng buộc mà bạn đang thử để tạo ra. Mỗi một lần ràng buộc được tạo ra và khởi tạo, bạn phải thực hiện những bước này để làm cho nó hoạt động được:

Các bước tạo và khởi tạo ràng buộc:

1. Thêm ràng buộc cho tập hợp Constraints của các bảng thích hợp.

2. Thiết đặt cờ lệnh DataSet.EnforceConstraints là true để yêu cầu ràng buộc. khi bạn thiết đặt cờ lệnh trở lại là true thì mỗi ràng buộc trong mỗi tập hợp DataTable.Constraints được kiểm tra, và đưa ra một ngoại lệ nếu kiểm tra bị lỗi.

3.3.2 Thêm một UniqueConstraint

Để thêm một UniqueConstraint cho một DataSet, ta làm theo các bước sau:

1. Tạo một UniqueConstraint bằng cách sử dụng một trong bốn khởi tạo trên .NET Compact Framework. Mỗi một khởi tạo được thảo luận chi tiết dưới đây :

- UniqueConstraint(String name, DataColumn col): tạo một UniqueConstraint với tên riêng mà phải là duy nhất trong một DataColumn đơn.

- UniqueConstraint(DataColumn col)tạo một UniqueConstraint mà nó là duy nhất trên một DataColumn đơn.

- UniqueConstraint(String name, DataColumn[] cols): tạo một UniqueConstraint mà nó là duy nhất của nhiều cột trong một hàng. Các cột này được đặt rất ngẫu nhiên như một mảng .

- UniqueConstraint(DataColumn[] cols) : Tương tự như trên trừ UniqueConstraint là không tên.

- UniqueConstraint(String name, string[] colNames, bool isPrimaryKey): Đây là khởi tạo chung thứ năm, chỉ có ích trong mơi trường Smart Device Extensions.

2. Thêm UniqueConstraint cho tập hợp Constraints của DataTable mong muốn. 3. Thiết đặt là true để mở ràng buộc.

Cần lưu ý với DataSet.EnforceConstionts

Khi DataSet.EnforceConstraints là true thì bạn sẽ thấy một ngoại lệ ở bất cứ thời điểm nào mà bạn đưa vào, xoá, hoặc cập nhật dữ liệu trong DataSet. Một ngoại lệ được đưa vào tuỳ theo những chi tiết của những ràng buộc trong DataSet. Nếu một ngoại lệ là thrown, bạn có thể trở lại những sự thay đổi bạn đã làm bằng cách bắt ngoại lệ và gọi DataSet.RejectChanges().

3.3.3 Ngăn chặn giá trị Null trong một DataColumn

Thuộc tính DataColumn.AllowDBNull rất có ích cho việc khơng cơng nhận một DataColumn có giá trị DBNull. Nếu bạn tạo một DataRow mới và không gán một giá trị cho một trong số các cột, nó sẽ nhận giá trị mặc định là DBNull.

Đoạn code mẫu dưới đây được lấy ra từ ứng dụng PhoneBook mẫu. Đoạn code mẫu này khơng cơng nhận trường Name của PhoneBook vì tồn tại DBNull.

C#

l_newTable.Columns["Name"].AllowDBNull = false;

Nếu một DataColumn mà có AllowDBNull là false được thiết lập cho DBNull, thì một ngoại lệ System.Data.NoNullAllowed được đưa ra khi hàng mới được thêm vào cho một DataTable lưu vào trong DataSet. Ví dụ, đoạn code dưới đây thực hiện việc thêm vào một hàng tại cột Name mà chưa bao giờ thiết đặt, và vì vậy việc thực hiện đoạn code này sẽ đưa ra một ngoai lệ System.Data.NoNullAllowed .

C#

DataRow l_newRow = m_phonebookDS.Tables[0].NewRow(); l_newRow[0] = "Violator"

l_newRow[1] = "5555587";

// This is going to throw an exception because the "Name" // DataColumn was never set, so it is DBNull, and that is // not allowed for the DataColumn

m_phonebookDS.Tables[0].Rows.Add(l_newRow);]

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 66 - 68)