GetSchema
Метод предоставляет список (коллекцию) всех поддерживаемых ЛИНТЕР-сервером объектов БД в текущем соединении.
Синтаксис
public override DataTable GetSchema();
Возвращаемое значение
Объект типа System.Data.DataTable со списком поддерживаемых объектов БД и количеством доступных клиентскому приложению атрибутов и идентификационных частей этих объектов (таблица 8).
| Имя столбца | Тип данных столбца | Описание |
|---|---|---|
CollectionName | string | Наименование списка объектов БД (имя коллекции), которое можно передать методу GetSchema (String) для получения общей информации о коллекции (столбец 1 таблицы 9) |
NumberOfRestriction | int | Количество атрибутов у объекта, по которым может запрашиваться индивидуальная информация. Например, для таблиц можно получать информацию о следующих 4-х атрибутах:
А для последовательности – только о 2-х атрибутах: схема последовательности и имя последовательности. Перечень запрашиваемых атрибутов объекта задается во втором параметре метода ПримечаниеВ текущей версии провайдера атрибут таблицы «местоположение таблицы» не поддерживается |
NumberOfIdentifierParts | int | Количество составных частей в полном идентификаторе объекта. Например, в идентификаторе таблицы это число равно 2: имя владельца таблицы и имя таблицы, в идентификаторе столбца это число равно 3: имя владельца таблицы, имя таблицы и имя столбца |
Перечень (коллекцию) всех поддерживаемых ЛИНТЕР-сервером объектов БД и их допустимые атрибуты представлен в таблице 9.
| Имя коллекции | Содержимое коллекции | Допустимые атрибуты элементов коллекции |
|---|---|---|
| MetaDataCollections | Сведения обо всех коллекциях схем | |
| DataSourceInformation | Сведения об источнике данных | |
| DataTypes | Типы поддерживаемых данных | |
| Restrictions | Типы атрибутов | |
| ReservedWords | Зарезервированные слова | |
| Tables | Список таблиц БД |
Возможные значения атрибута Type:
|
| Synonyms | Список синонимов БД |
|
| Views | Список представлений БД |
|
| Sequences | Список последовательностей БД |
|
| Columns | Список столбцов указанного объекта БД (таблицы, представления или синонима) |
ПримечаниеПри получении столбцов синонима будут возвращены столбцы таблицы, на которую указывает синоним. При этом, если синонимы указывают на другие синонимы, то выполняется переход по всей цепочке синонимов до таблицы. |
| Users | Список пользователей БД |
|
| Roles | Список ролей БД |
|
| ForeignKeys | Список внешних ключей БД |
|
| ForeignKeyColumns | Список столбцов составного ключа |
|
| Indexes | Список индексов БД |
|
| IndexColumns | Список столбцов составного индекса |
|
| Procedures | Список хранимых процедур БД |
|
| ProcedureParameters | Список параметров хранимой процедуры |
|
| ProcedureColumns | Список полей курсора, возвращаемого хранимой процедурой |
|
| Triggers | Список триггеров БД |
|
| Levels | Список мандатных уровней доступа |
|
| Stations | Список рабочих станций |
|
| Connections | Список активных пользователей СУБД |
|
| ReplicationServers | Список серверов репликации |
|
| Devices | Список устройств |
|
| Groups | Список групп защиты |
|
| CharacterSets | Список кодовых таблиц БД |
|
Примечание
Поддержка ниже перечисленных коллекций будет реализована в следующей версии ADO.NET-провайдера:
-
список хранимых событий;
-
список алиасов;
-
список форматов внешних файлов;
-
список правил репликации;
-
список фильтров полнотекстового поиска;
-
список правил трансляции кодировок.
Исключения
InvalidOperationException
| Соединение не открыто. |
Пример
// C#
using System;
using System.Data;
using System.Data.Common;
class GetSchemaSample
{
static void Main()
{
DbProviderFactory factory =
DbProviderFactories.GetFactory("System.Data.LinterClient");
DbConnection con = factory.CreateConnection();
con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8;DataSource=LOCAL";
try
{
// Соединение с БД
con.Open();
// Получение сведений о схеме базы данных
DataTable schema = con.GetSchema();
// Вывод полученных сведений на экран
OutputDataTable(schema);
}
catch (Exception ex)
{
Console.WriteLine("Ошибка: " + ex.Message);
}
finally
{
// Освобождение ресурсов
con.Close();
}
}
private static void OutputDataTable(DataTable dataTable)
{
Console.WriteLine(new String('-', 60));
foreach (DataColumn column in dataTable.Columns)
{
Console.Write(column.ColumnName + " | ");
}
Console.WriteLine();
Console.WriteLine(new String('-', 60));
foreach (DataRow row in dataTable.Rows)
{
for (int i = 0; i < dataTable.Columns.Count; i++)
{
if (row.IsNull(i))
{
Console.Write("<NULL> | ");
}
else
{
Console.Write(row[i] + " | ");
}
}
Console.WriteLine();
}
}
}
Результат выполнения примера:
------------------------------------------------------------------
CollectionName |NumberOfRestriction|NumberOfIdentifierParts|
------------------------------------------------------------------
CharacterSets |2 |1 |
Columns |4 |3 |
Connections |1 |1 |
DataSourceInformation|0 |0 |
DataTypes |0 |0 |
Devices |1 |1 |
ForeignKeyColumns |5 |4 |
ForeignKeys |4 |3 |
Groups |1 |1 |
IndexColumns |5 |4 |
Indexes |4 |3 |
Levels |1 |1 |
MetaDataCollections |0 |0 |
ProcedureColumns |3 |3 |
ProcedureParameters |3 |3 |
Procedures |3 |2 |
ReplicationServers |1 |1 |
ReservedWords |0 |0 |
Restrictions |0 |0 |
Roles |1 |1 |
Sequences |2 |2 |
Stations |1 |1 |
Synonyms |3 |2 |
Tables |4 |2 |
Triggers |3 |2 |
Users |1 |1 |
Views |3 |2 |