Поделиться через


OdbcDataReader.GetSchemaTable Метод

Определение

Возвращает объект DataTable, описывающий метаданные столбцов модуля чтения данных OdbcDataReader.

public:
 override System::Data::DataTable ^ GetSchemaTable();
public:
 virtual System::Data::DataTable ^ GetSchemaTable();
public override System.Data.DataTable? GetSchemaTable ();
public System.Data.DataTable GetSchemaTable ();
public override System.Data.DataTable GetSchemaTable ();
override this.GetSchemaTable : unit -> System.Data.DataTable
abstract member GetSchemaTable : unit -> System.Data.DataTable
override this.GetSchemaTable : unit -> System.Data.DataTable
Public Overrides Function GetSchemaTable () As DataTable
Public Function GetSchemaTable () As DataTable

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

Объект DataTable, описывающий метаданные столбцов.

Реализации

Исключения

Объект OdbcDataReader закрыт.

Комментарии

Метод GetSchemaTable возвращает метаданные о каждом столбце в следующем порядке:

Столбец DataReader Описание
ColumnName Имя столбца; это может быть не уникально. Если не удается определить имя столбца, возвращается значение NULL. Это имя всегда отражает последнее имя столбца в текущем представлении или тексте команды.
ColumnOrdinal Отсчитываемый от нуля порядковый номер столбца. Этот столбец не может содержать значение NULL.
ColumnSize Максимально допустимая длина значения данного столбца. Для столбцов, использующих тип данных фиксированной длины, это размер типа данных.
NumericPrecision Если DbType является числовым типом данных, это максимальная точность столбца. Точность зависит от определения столбца. Если DbType не является числовым типом данных, не используйте данные в этом столбце. Если базовый драйвер ODBC возвращает значение точности для нечислового типа данных, это значение используется в таблице схемы.
NumericScale Если DbType имеет значение Decimal, число цифр справа от десятичной запятой. В противном случае это значение равно NULL. Если базовый драйвер ODBC возвращает значение точности для нечислового типа данных, это значение используется в таблице схемы.
DataType Сопоставляется с типом DbTypeСРЕДЫ CLR .
ProviderType Базовый тип драйвера.
IsLong true Значение , если столбец содержит двоичный длинный объект (BLOB), содержащий очень длинные данные. Определение очень длинных данных зависит от драйвера.
AllowDBNull true Значение , если потребитель может задать для столбца значение NULL или драйвер не может определить, может ли потребитель задать для столбца значение NULL. В противном случае — значение false. Столбец может содержать значения NULL, даже если сам столбец не может иметь значение NULL.
IsReadOnly true Значение , если столбец не может быть изменен; в противном случае false.
IsRowVersion Задается, если столбец содержит постоянный идентификатор строк, в который невозможно записать и который не имеет значений, отличных от нуля, за исключением идентификатора столбца.
IsUnique true: две строки в базовой таблице (таблица, возвращаемая в BaseTableName) не могут иметь одинаковое значение в этом столбце. Значение IsUnique гарантируется true , если столбец представляет ключ сам по себе, или если существует ограничение типа UNIQUE, применимое только к этому столбцу.

false: столбец может содержать повторяющиеся значения в базовой таблице. По умолчанию для этого столбца используется значение false.
IsKey true: столбец является одним из наборов столбцов в наборе строк, которые, вместе взятые, однозначно идентифицируют строку. Набор столбцов со значением true IsKey должен однозначно идентифицировать строку в наборе строк. Нет необходимости, чтобы этот набор столбцов являлся минимальным. Этот набор столбцов может быть создан из первичного ключа базовой таблицы, уникального ограничения или уникального индекса.

false: столбец не требуется для уникальной идентификации строки.
IsAutoIncrement true Значение , если столбец присваивает значения новым строкам с фиксированным шагом приращения; в противном случае false. По умолчанию для этого столбца используется значение false.
BaseSchemaName Имя схемы в источнике данных, который содержит столбец. Значение NULL, если не удается определить имя базового каталога. По умолчанию для этого столбца используется значение NULL.
BaseCatalogName Имя каталога в хранилище данных, содержащем столбец. Значение NULL, если не удается определить имя базового каталога. По умолчанию для этого столбца используется значение NULL.
BaseTableName Имя таблицы или представления в хранилище данных, содержащем столбец. Значение NULL, если невозможно определить имя базовой таблицы. Значение по умолчанию этого столбца — null.
BaseColumnName Имя столбца в хранилище данных. Это может отличаться от имени столбца, возвращаемого в столбце ColumnName, если использовался псевдоним. Значение NULL, если не удается определить имя базового столбца или столбец набора строк является производным, но не идентичным столбцу в хранилище данных. По умолчанию для этого столбца используется значение NULL.

Для каждого столбца в наборе результатов возвращается строка.

Поставщик данных платформа .NET Framework для ODBC предполагает, что метаданные доступны из драйвера ODBC после вызова одной из функций SQLPrepare, SQLExecute или SQLExecuteDirect. Чтобы команда SchemaOnly работала правильно, SQLPrepare должен возвращать необходимые метаданные. Не все драйверы ODBC поддерживают эту функцию или возвращают метаданные. В таких случаях часть или вся информация в SchemaTable будет отсутствовать. После вызова SQLPrepare поставщик данных вызывает функцию ODBC SQLColAttribute для поиска метаданных, связанных с каждым столбцом в результатах запроса (например, IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Если базовый драйвер не возвращает некоторые из этих сведений, соответствующие значения в SchemaTable будут заданы неправильно.

Поставщик данных платформа .NET Framework для ODBC также вызывает SQLPrimaryKeys для получения сведений о ключах для каждой таблицы. Если базовый драйвер ODBC не поддерживает эту функцию, поставщик данных вызывает SQLStatistics и выбирает один из уникальных индексов в качестве первичного ключа для таблицы. Это не всегда дает нужные результаты.

OdbcCommandBuilder для правильной работы требует правильной идентификации первичных ключей таблицы. Если baseTableName возвращается не для каждого столбца в результатах запроса, поставщик данных платформа .NET Framework для ODBC пытается проанализировать инструкцию SQL, чтобы найти имена таблиц, участвующих в запросе. Это работает с инструкциями UPDATE, INSERT, DELETE и простыми инструкциями SELECT, но не с хранимыми процедурами или инструкциями SELECT на основе соединений. Если некоторые или все сведения о схеме отсутствуют в этой таблице, OdbcCommandBuilder объект не будет работать правильно, так как у него недостаточно сведений о схеме для автоматического создания правильных инструкций INSERT, UPDATE или DELETE.

Чтобы убедиться, что столбцы метаданных возвращают правильные сведения, необходимо вызвать ExecuteReader с параметром поведения KeyInfo. В противном случае некоторые столбцы в таблице схемы могут возвращать данные по умолчанию, null или неверные данные.

При использовании ODBC.NET в Oracle через драйвер ODBC столбцы псевдонимов ключей не распознаются как ключи. Это влияет на столбцы IsKey и IsUnique в таблице схемы OdbcDataReader. Это также влияет на способность OdbcCommandBuilder создавать логику обновления. Не рекомендуется использовать псевдоним для столбца первичного ключа.

Примечание

Драйвер Microsoft Jet ODBC всегда возвращает уникальные столбцы индекса и первичного ключа как допускаемые значения NULL независимо от того, допускается ли они значение NULL. Драйвер также не возвращает сведения о первичном ключе; Он возвращает только список уникальных индексов и их столбцов, включая столбцы первичного ключа, без различия между ними.

Применяется к

См. также раздел