Получение информации о схеме размещения данных в объекте 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
