GetSchemaTable

Метод предоставляет метаданные текущей выборки данных.

Синтаксис
public abstract DataTable GetSchemaTable();
Возвращаемое значение

Объект типа DataTable, содержащий метаданные текущей выборки данных.

Структура записей возвращаемого объекта DataTable:

Имя столбца в объекте DataTable Значение столбца
ColumnName Имя столбца (в том числе, и алиасное).
ColumnOrdinal Порядковый номер столбца (отсчет начинается с 0).
ColumnSize Размер (в байтах) столбца, для строковых типов размер вычисляется в символах.
NumericPrecision Точность представления данных (для вещественных значений и чисел с фиксированной точкой).
ProviderType Индикатор типа данных столбца (значение ELinterDbType, приведенное к типу int).
BaseSchemaName Имя владельца.
DataType Тип данных поля (в нотации .NET).
IsExpression Тип значения поля: true – вычисляемое, false – загружаемое из БД.
IsIdentity Тип значения поля: true – генерируется последовательностью, false – загружается из БД.
IsAutoIncrement Атрибут поля: true – автоинкрементное, false – загружаемое из БД.
IsLong Атрибут поля: true – в поле имеется большой двоичный объект (BLOB), содержащий очень длинные данные, false – в противном случае.
NumericScale Масштаб представления данных (для вещественных значений и чисел с фиксированной точкой).
IsUnique Атрибут уникальности поля: true – уникальное, false – неуникальное.
IsKey Признак наличия у поля ключа: true – поле имеет ключ, false – поле без ключа.
BaseCatalogName

Имя папки в хранилище данных, содержащей столбец.

Примечание

В текущей версии ADO.NET-провайдера не поддерживается.

BaseColumnName

Имя столбца в хранилище данных.

Примечание

В текущей версии ADO.NET-провайдера не поддерживается.

BaseTableName Имя таблицы, которой принадлежит столбец.
IsHidden

Видимость столбца в выборке: true – столбец видимый, false – столбец скрытый.

Примечание

В текущей версии ADO.NET-провайдера не поддерживается.

BaseServerName

Имя ЛИНТЕР-сервера.

Примечание

В текущей версии ADO.NET-провайдера не поддерживается.

AllowDBNull Допустимость null-значений: true – столбец допускает null-значения, false – null-значения не допускаются.
IsAliased

Тип имени столбца: true – алиасное, false – из схемы таблицы.

Примечание

В текущей версии ADO.NET-провайдера не поддерживается.

IsRowVersion

Атрибут поля: true – поле содержит постоянный идентификатор строки, в который не может быть записано значение, false – в противном случае.

Примечание

В текущей версии ADO.NET-провайдера не поддерживается.

IsReadOnly

Тип доступа к значениям столбца: true – только для чтения, false – полный доступ.

Примечание

В текущей версии ADO.NET-провайдера не поддерживается.

Примечание

Если нет возможности определить значения атрибутов IsUnique, IsKey, AllowDBNull, то значения этих атрибутов будут равны DBNull.Value.

Исключения
Exception В БД не найдено представление DOTNET_COLUMNS (необходимо выполнить скрипт catalog.sql из подкаталога /dict установочного каталога СУБД ЛИНТЕР).
LinterSqlException Код завершения СУБД ЛИНТЕР не равен 0.
Пример
// C#
using System;
using System.Data;
using System.Data.Common;

class GetSchemaTable
{
  static void Main()
  {
    DbProviderFactory factory = null;
    DbConnection con = null;
    DbCommand cmd = null;
    DbDataReader reader = null;
    try
    {
      // Соединение с БД
      factory = DbProviderFactories.GetFactory("System.Data.LinterClient");
      con = factory.CreateConnection();
      con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8;DataSource=LOCAL";
      con.Open();
      cmd = factory.CreateCommand();
      cmd.Connection = con;
      cmd.CommandText = "select MAKE, MODEL, BODYTYPE from AUTO";
      reader = cmd.ExecuteReader();
      // Получение сведений о схеме базы данных
      DataTable schema = reader.GetSchemaTable();
      // Вывод полученных сведений на экран
      OutputDataTable(schema);
    }
    catch (Exception ex)
    {
      Console.WriteLine("Ошибка: " + ex.Message);
    }
    finally
    {
      // Освобождение ресурсов
      if (reader != null)
      {
        reader.Close();
      }
      if (cmd != null)
      {
        cmd.Dispose();
      }
      if (con != null)
      {
        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();
    }
  }
}

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

---------------------------------------------------------------------------
ColumnName | ColumnOrdinal | ColumnSize | NumericPrecision | ProviderType |
---------------------------------------------------------------------------
MAKE       | 0             | 20         | 0                | 1            |
MODEL      | 1             | 20         | 0                | 1            |
BODYTYPE   | 2             | 15         | 0                | 1            |