Получение информации о схеме размещения данных в объекте DataTabie (Таблица данных)
Рассмотрим, как можно получить информацию об объекте DataTabie (Таблица данных), точнее, об ограничениях и ключах этого объекта. В предыдущем примере уже было показано, как получить доступ к объектам Data-Column объекта DataTabie (Таблица данных). Обратите внимание на использование свойства IsPrimaryKey объекта UniqueConstraint для определения, является ли ограничение первичным ключом. Следующий фрагмент взят из примера DataEditing.
pEnum = ds › Tables › GetEnumerator(); // Таблицы while (pEnum › MoveNext()) { DataTabie *t = dynamic_cast<DataTable *>(pEnum › Current); Console::WriteLine(" {0}", t › TableName); Console::WriteLine ("\tPrimary Key:")/' // Первичный ключ for (int i = 0; i < t › PrimaryKey.Length; i++) { DataColumn *c = t › PrimaryKey[i]; Console::WriteLine("\t\t{0}", c › ColumnName); } Console::WriteLine("\tConstraints:"); lEnumerator *pEnum = t › Constraints › GetEnumerator(); // Ограничения while (pEnum › MoveNext()) { Constraint *c = // Ограничение dynamic_cast<Constraint *>(pEnum › Current); // Ограничение String *constraintName; // Строка // если (с – ForeignKeyConstraint) if (dynamic_cast<ForeignKeyConstraint *>(c)I= 0) constraintName = String::Concat("Foreign Key:", // Строка:: Concat ("Внешний ключ: ", c › ConstraintName); else if (dynamic_cast<UniqueConstraint *>(c)!= 0) { UniqueConstraint *u = dynamic_cast<UniqueConstraint *>(c); if (u › IsPrimaryKey) constraintName = "Primary Key"; // Первичный ключ else constraintName = u › ConstraintName; } else constraintName = "Unknown Name"; // Неизвестное имя Console::WriteLine("\t\t{0, -40}", constraintName); } }
Напечатанные программой строки приведены ниже. Обратите внимание на то, что определение связей, осуществленное нами с помощью объектов DataRelation, приводит к появлению объектов ForeignKeyConstraint в коллекции ограничений таблицы.
Первичный ключ также появляется в коллекции ограничений как объект UniqueConstraint. Ограничения, определенные как ограничения единственности или внешние ключи, появляются в коллекции так, как ожидается.
Categories Primary Key: Constraints: Unique CategoryName Constraint BookCategories Primary Key: CategoryName LibraryofCongressNumber Constraints: Primary Key Foreign Key:Category › BookCategories Relation Constraint2 Authors Primary Key: Authorld Constraints: Primary Key Books Primary Key: ISBN Constraints: Primary Key Foreign Key:Authors › Books Foreign Key:Book Category LOC › Book LOG Relation
Вот перевод этой выдачи:
Категории Первичный ключ: Ограничения: Ограничение единственности CategoryName Категории книг Первичный ключ: Название категории Номер в Библиотеке Конгресса Ограничения: Первичный ключ Внешний ключ: Отношение Category › BookCategories Constraint2 Авторы Первичный ключ: Authorld Ограничения: Первичный ключ Книги Первичный ключ: ISBN Ограничения: Первичный ключ: Внешний ключ:Авторы › Книги Внешний ключ: Отношение Book Category LOC › Book LOG