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 |