GetSchema(String, String[ ])

Метод предоставляет метаданные в соответствии с запрошенными атрибутами указанного объекта БД (коллекции данных), связанного с текущим соединением.

Синтаксис
public override DataTable GetSchema
(
    String collectionName,
    String[] restrictionValues
);

collectionName – имя коллекции данных (строковое значение из столбца 1 в таблице 3). Если указано значение NULL, метаданные предоставляются обо всех коллекциях БД и о количестве атрибутов элементов коллекции.

restrictionValues – массив строковых значений, содержащий:

  • перечень требуемых атрибутов метаданных (одно или несколько значений из столбца 3 в таблице 3). В этом случае выдается информация об этом атрибуте всех объектов указанной коллекции;

  • конкретное значение атрибута (атрибутов) – имя пользователя, название таблицы, имя столбца и т.п. В этом случае выдается информация только об объектах с заданными атрибутами из указанной коллекции.

Запрашиваемые атрибуты элементов коллекции должны задаваться строго в соответствии с их порядковыми номерами (указанными в столбце 3 таблицы 3), поэтому если информация о каком-то атрибуте не требуется, на его позиции необходимо указать null.

Пример. Узнать всех владельцев таблиц AUTO. Согласно таблице 5 (столбец 3) в коллекции TABLES имени владельца соответствует 3 уровень детализации, поэтому массив restrictionValues должен выглядеть так (первые два атрибута пропущены):

string[] { null, null, "AUTO", null };

или так

string[] { null, null, "AUTO" };

(последние элементы массива можно опускать)

Если явное значение атрибута не указано (в смысле null), то из БД будут извлекаться элементы коллекции со всеми значениями атрибута.

Возвращаемое значение

Объект DataTable типа System.Data.DataTable.

Структура возвращаемых записей зависит от коллекции.

Исключения
ArgumentExceptionКоллекция данных не поддерживается.
InvalidOperationExceptionСоединение не открыто.
LinterSqlExceptionКод завершения СУБД ЛИНТЕР не равен 0.
Пример
// 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();
      // Получение сведений о схеме базы данных
      string[] restrictions = new string[] { null, "SYSTEM", "AUTO", null };
      DataTable schema = con.GetSchema("Columns", restrictions);
      // Вывод полученных сведений на экран
      OutputDataTable(schema);
    }
    catch (Exception ex)
    {
      Console.WriteLine("Ошибка: " + ex.Message);
    }
    finally
    {
      // Освобождение ресурсов
      con.Close();
    }
  }
  private static void OutputDataTable(DataTable dataTable)
  {
    int columnsNumber = Math.Min(5, dataTable.Columns.Count);
    Console.WriteLine(new String('-', 60));
    for (int i = 0; i <  columnsNumber; i++)
    {
      Console.Write(dataTable.Columns[i].ColumnName + " | ");
    }
    Console.WriteLine();
    Console.WriteLine(new String('-', 60));
    foreach (DataRow row in dataTable.Rows)
    {
      for (int i = 0; i <  columnsNumber; i++)
      {
        if (row.IsNull(i))
        {
          Console.Write("< NULL > | ");
        }
        else
        {
          Console.Write(row[i] + " | ");
        }
      }
      Console.WriteLine();
    }
  }
}

Результат выполнения примера:

------------------------------------------------------------
TABLE_CATALOG|TABLE_SCHEMA|TABLE_NAME|COLUMN_NAME|DATA_TYPE|
------------------------------------------------------------
             |SYSTEM      |AUTO      |MAKE       |CHAR     |
             |SYSTEM      |AUTO      |MODEL      |CHAR     |
             |SYSTEM      |AUTO      |BODYTYPE   |CHAR     |
             |SYSTEM      |AUTO      |CYLNDERS   |INT      |
             |SYSTEM      |AUTO      |HORSEPWR   |INT      |
             |SYSTEM      |AUTO      |DSPLCMNT   |INT      |
             |SYSTEM      |AUTO      |WEIGHT     |INT      |
             |SYSTEM      |AUTO      |COLOR      |CHAR     |
             |SYSTEM      |AUTO      |YEAR       |INT      |
             |SYSTEM      |AUTO      |SERIALNO   |CHAR     |
             |SYSTEM      |AUTO      |CHKDATE    |INT      |
             |SYSTEM      |AUTO      |CHKMILE    |INT      |
             |SYSTEM      |AUTO      |PERSONID   |INT      |