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 |