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
Возвращаемое значение
A DataTable , описывающий метаданные столбца.
Реализации
Исключения
Комментарии
Метод GetSchemaTable возвращает метаданные о каждом столбце в следующем порядке:
| Столбец DataReader | Description |
|---|---|
| ColumnName | Имя столбца; Это может быть не уникальным. Если не удается определить имя столбца, возвращается значение NULL. Это имя всегда отражает последнее именование столбца в текущем представлении или тексте команды. |
| ColumnOrdinal | Порядковый номер от нуля столбца. Этот столбец не может содержать значение NULL. |
| РазмерСтолбца | Максимальная длина значения в столбце. Для столбцов, использующих тип данных фиксированной длины, это размер типа данных. |
| Числовойprecision | Если DbType это числовой тип данных, это максимальная точность столбца. Точность зависит от определения столбца. Если DbType не является числовым типом данных, не используйте данные в этом столбце. Если базовый драйвер ODBC возвращает значение точности для нечисленного типа данных, это значение используется в таблице схемы. |
| NumericScale | Если DbType значение Decimalравно, число цифр справа от десятичной запятой. В противном случае это значение null. Если базовый драйвер ODBC возвращает значение точности для нечисленного типа данных, это значение используется в таблице схемы. |
| Тип данных | Сопоставляется с типом 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: столбец является одним из наборов столбцов в наборе строк, которые, взятые вместе, однозначно идентифицируют строку. Набор столбцов с набором IsKey, который true должен однозначно идентифицировать строку в наборе строк. Этот набор столбцов не является минимальным набором столбцов. Этот набор столбцов может быть создан из первичного ключа базовой таблицы, уникального ограничения или уникального индекса.false: столбец не требуется для уникальной идентификации строки. |
| IsAutoIncrement |
true Значение , если столбец назначает значения новым строкам в фиксированных добавочных значениях; в противном случае false. Значение по умолчанию для этого столбца.false |
| BaseSchemaName | Имя схемы в источнике данных, содержащего столбец. ЗНАЧЕНИЕ NULL, если не удается определить имя базового каталога. Значение по умолчанию для этого столбца равно null. |
| BaseCatalogName | Имя каталога в хранилище данных, содержащее столбец. ЗНАЧЕНИЕ NULL, если не удается определить имя базового каталога. Значение по умолчанию для этого столбца равно null. |
| BaseTableName | Имя таблицы или представления в хранилище данных, содержащего столбец. Значение NULL, если не удается определить имя базовой таблицы. По умолчанию этот столбец имеет значение NULL. |
| BaseColumnName | Имя столбца в хранилище данных. Это может отличаться от имени столбца, возвращаемого в столбце ColumnName, если использовался псевдоним. Значение NULL, если имя базового столбца не может быть определено или если столбец набора строк является производным, но не идентичен столбцу в хранилище данных. Значение по умолчанию для этого столбца равно null. |
Строка возвращается для каждого столбца в наборе результатов.
Data Provider платформы .NET для ODBC предполагает, что сведения о метаданных доступны из драйвера ODBC после одного из SQLPrepare, SQLExecute или SQLExecuteDirect. Для правильной работы команды SchemaOnly SQLPrepare должен возвращать необходимые сведения о метаданных. Не все драйверы ODBC поддерживают эту функцию или возвращают сведения о метаданных. В таких случаях часть или все сведения в SchemaTable будут отсутствуют. После вызова SQLPrepare поставщик данных вызывает функцию ODBC SQLColAttribute , чтобы найти сведения метаданных, связанные с каждым столбцом в результатах запроса (например, IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Если базовый драйвер не возвращает некоторые из этих сведений, соответствующие значения в SchemaTable не будут заданы правильно.
.NET Framework Data Provider для ODBC также вызывает SQLPrimaryKeys для получения ключевых сведений для каждой таблицы. Если базовый драйвер ODBC не поддерживает эту функцию, поставщик данных вызывает SQLStatistics и выбирает один из уникальных индексов в качестве первичного ключа для таблицы. Это может не всегда дать нужные результаты.
OdbcCommandBuilder требует правильной идентификации первичных ключей таблицы для правильной работы. Если baseTableName не возвращается для каждого столбца в результатах запроса, .NET Framework Data Provider для ODBC пытается проанализировать инструкцию SQL, чтобы найти имена таблиц, участвующих в запросе. Это работает с инструкциями UPDATE, INSERT, DELETE и простыми инструкциями SELECT, но не с хранимыми процедурами или операторами SELECT на основе соединений. Если некоторые или все сведения о схеме отсутствуют в этой таблице, они не будут работать правильно, OdbcCommandBuilder так как у нее недостаточно сведений о схеме для автоматического создания правильных инструкций INSERT, UPDATE или DELETE.
Чтобы убедиться, что столбцы метаданных возвращают правильные сведения, необходимо вызвать ExecuteReader параметр поведения, заданный для KeyInfo. В противном случае некоторые столбцы в таблице схемы могут возвращать значения по умолчанию, null или неверные данные.
При использовании ODBC.NET в Oracle через драйвер ODBC псевдоним ключевые столбцы не распознаются как ключи. Это влияет на столбцы IsKey и IsUnique в таблице схемы OdbcDataReader. Это также влияет на способность OdbcCommandBuilder создавать логику обновления. Рекомендуется не использовать псевдоним для столбца первичного ключа.
Note
Драйвер ODBC Jet Microsoft всегда возвращает уникальный индекс и столбцы первичного ключа в качестве значения NULL независимо от того, являются ли они пустыми или нет. Драйвер также не возвращает сведения о первичном ключе; он возвращает только список уникальных индексов и их столбцов, включая первичные ключевые столбцы, не отличаясь от них.