Chương 4 ADO.NET trên .NET CompactFramework
4.3 Ràng buộc dữ liệu
DataSet cho phép chúng ta chỉ ra qui tắc riêng biệt, mà dữ liệu trong tập hợp DataSet.Tables phải theo. Lớp cơ sở Constraint chỉ rõ qui tắc mà dữ liệu trong DataTable
phải theo.
ForeignKeyConstraint thường được sử dụng để tạo sức mạnh cho hành vi khi thay đổi
hoặc xóa cột khóa chính trong một bảng. Bởi vì ForeignKeyConstraint được mong đợi để sử dụng trong mơ hình quan hệ cha con giữa các bảng.
4.3.1 Thêm ràng buộc vào một DataSet
Mỗi DataTable lưu trữ trong tập hợp DataSet.Tables lưu trữ ConstraintCollection trong thuộc tính Constraints. Vsi dụ, để truy cập ConstraintCollection trong bảng đầu tiên của một DataSet, sử dụng như sau:
m_phonebookDS.Tables[0].Constraints
Các bước để tạo và khởi tạo ràng buộc:
Bước 1: Thêm ràng buộc vào tập hợp Constraints của bảng thíc hợp.
Bước 2: Thiết lập cờ DataSet.EnforceConstraints thành true để bật yêu cầu ràng
buộc. Khi chúng ta thiết lập cờ thành true, mỗi ràng buộc trong mỗi tập hợp
DataTable.Constraints được chọn, và đưa ra một ngoại lệ nếu kiểm tra bị lỗi.
4.3.2 Thêm một UniqueConstraint
Để thêm một UniqueConstraint vào một DataSet, làm theo các bước sau:
Bước 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:
UniqueConstraint(String name, DataColumn col) Creates a UniqueConstraint
with specified name that enforces uniqueness on a single DataColumn.
UniqueConstraint(DataColumn col) Creates a UniqueConstraint that enforces
UniqueConstraint(String name, DataColumn[] cols) Creates a UniqueConstraint that enforces uniqueness for multiple columns in a row. The columns are
specified by passing them as an array.
UniqueConstraint(DataColumn[] cols) Same as above except the UniqueConstraint is nameless.
UniqueConstraint(String name, string[] colNames, bool isPrimaryKey) This
fifth public constructor is useful only to the Smart Device Extensions environment.
Bước 2: Thêm UniqueConstraint vào tập hợp Constraints của DataTable mong
muốn.
Bước 3: Thiết lập DataSet.EnforceConstraints thành true để bật sự ràng buộc.. Ví dụ:
// Add a UniqueConstraint to the phone number column
// Note: Using indexing by the string "PhoneNumber" is slower UniqueConstraint l_UniqueConstraint = new
UniqueConstraint(l_DataSet.Tables[0]. Columns["PhoneNumber"]);
l_DataSet.Tables[0].Constraints.Add(l_UniqueConstraint);
4.3.3 Ngăn ngừa giá trị NULL trong DataColumn
Thuộc tính DataColumn.AllowDBNull rất hữu ích để khơng cho phép một DataColumn có giá trị DBNull. Nếu chúng ta tạo một DataRow mới và không đưa một giá trị vào một cột, nó nhận giá trị mặc định là DBNull.
Ví dụ:
l_newTable.Columns["Name"].AllowDBNull = false;
Nếu DataColumn có AllowDBNull là false được thiết lập thành DBNull, ngoại lệ
System.Data.NoNullAllowed được đưa ra khi một dòng mới được thêm vào DataTable trong DataSet. Ví dụ:
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);]