Иллюстрированный самоучитель по Architecture .NET

Получение информации о схеме размещения данных в объекте 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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.