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 |