OdbcDataReader.GetSchemaTable Метод

Определение

Возвращает таблицу данных DataTable, описывающую метаданные столбца OdbcDataReader.Returns a DataTable that describes the column metadata of the OdbcDataReader.

public:
 override System::Data::DataTable ^ GetSchemaTable();
public:
 virtual System::Data::DataTable ^ GetSchemaTable();
public override System.Data.DataTable GetSchemaTable ();
public 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, описывающий метаданные столбцов.A DataTable that describes the column metadata.

Реализации

Исключения

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

Комментарии

Метод GetSchemaTable возвращает метаданные о каждом столбце в следующем порядке:The GetSchemaTable method returns metadata about each column in the following order:

Столбец DataReaderDataReader column DescriptionDescription
ColumnNameColumnName Имя столбца; Это может быть неуникальным.The name of the column; this might not be unique. Если имя столбца определить невозможно, возвращается значение null.If the column name cannot be determined, a null value is returned. Это имя всегда отражает самое последнее именование столбца в текущем представлении или тексте команды.This name always reflects the most recent naming of the column in the current view or command text.
ColumnOrdinalColumnOrdinal Отсчитываемый от нуля порядковый номер столбца.The zero-based ordinal of the column. Этот столбец не может содержать значение NULL.This column cannot contain a null value.
ColumnSizeColumnSize Максимально допустимая длина значения данного столбца.The maximum possible length of a value in the column. Для столбцов, использующих тип данных фиксированной длины, это размер типа данных.For columns that use a fixed-length data type, this is the size of the data type.
NumericPrecisionNumericPrecision Если DbType является числовым типом данных, это максимальная точность столбца.If DbType is a numeric data type, this is the maximum precision of the column. Точность зависит от определения столбца.The precision depends on the definition of the column. Если DbType не является числовым типом данных, не используйте данные в этом столбце.If DbType is not a numeric data type, do not use the data in this column. Если базовый драйвер ODBC возвращает значение точности для нечислового типа данных, это значение используется в таблице схемы.If the underlying ODBC driver returns a precision value for a non-numeric data type, this value is used in the schema table.
NumericScaleNumericScale Если DbType Decimal, количество цифр справа от десятичной запятой.If DbType is Decimal, the number of digits to the right of the decimal point. В противном случае это значение null.Otherwise, this is a null value. Если базовый драйвер ODBC возвращает значение точности для нечислового типа данных, это значение используется в таблице схемы.If the underlying ODBC driver returns a precision value for a non-numeric data type, this value is used in the schema table.
DataTypeDataType Сопоставляется с типом DbTypeсреды CLR.Maps to the common language runtime type of DbType.
ProviderTypeProviderType Базовый тип драйвера.The underlying driver type.
IsLongIsLong true, если столбец содержит большой двоичный объект (BLOB), содержащий очень длинные данные.true if the column contains a Binary Long Object (BLOB) that contains very long data. Определение очень длинных данных зависит от драйвера.The definition of very long data is driver-specific.
AllowDBNullAllowDBNull true, если потребитель может задать для столбца значение null или если драйвер не может определить, может ли потребитель установить значение NULL для столбца.true if the consumer can set the column to a null value or if the driver cannot determine whether the consumer can set the column to a null value. В противном случае — false.Otherwise, false. Столбец может содержать значения NULL, даже если сам столбец не может иметь значение NULL.A column may contain null values, even if it cannot be set to a null value.
IsReadOnlyIsReadOnly true, если столбец не может быть изменен; в противном случае false.true if the column cannot be modified; otherwise false.
IsRowVersionIsRowVersion Задается, если столбец содержит постоянный идентификатор строк, в который невозможно записать и который не имеет значений, отличных от нуля, за исключением идентификатора столбца.Set if the column contains a persistent row identifier that cannot be written to, and has no meaningful value except to identity the row.
IsUniqueIsUnique true: никакие две строки в базовой таблице (таблица, возвращаемая в BaseTableName) не могут иметь одинаковое значение в этом столбце.true: No two rows in the base table (the table returned in BaseTableName) can have the same value in this column. IsUnique гарантированно будет true, если столбец представляет ключ самостоятельно или если существует ограничение типа UNIQUE, которое применяется только к этому столбцу.IsUnique is guaranteed to be true if the column represents a key by itself or if there is a constraint of type UNIQUE that applies only to this column.

false: столбец может содержать дублирующиеся значения в базовой таблице.false: The column can contain duplicate values in the base table. Значение по умолчанию для этого столбца — false.The default for this column is false.
IsKeyIsKey true: столбец является одним из набора столбцов в наборе строк, которые вместе однозначно идентифицируют строку.true: The column is one of a set of columns in the rowset that, taken together, uniquely identify the row. Набор столбцов с IsKey, имеющим значение true, должен уникальным образом идентифицировать строку в наборе строк.The set of columns with IsKey set to true must uniquely identify a row in the rowset. Нет необходимости, чтобы этот набор столбцов являлся минимальным.There is no requirement that this set of columns is a minimal set of columns. Этот набор столбцов может быть создан из первичного ключа базовой таблицы, ограничения уникальности или уникального индекса.This set of columns may be generated from a base table primary key, a unique constraint, or a unique index.

false: столбец не требуется для уникальной идентификации строки.false: The column is not required to uniquely identify the row.
IsAutoIncrementIsAutoIncrement true, если столбец присваивает значения новым строкам с фиксированным приращением; в противном случае false.true if the column assigns values to new rows in fixed increments; otherwise false. Значение по умолчанию для этого столбца — false.The default for this column is false.
BaseSchemaNameBaseSchemaName Имя схемы в источнике данных, содержащем столбец.The name of the schema in the data source that contains the column. Значение NULL, если не удается определить базовое имя каталога.NULL if the base catalog name cannot be determined. Значением по умолчанию для этого столбца является значение null.The default for this column is a null value.
BaseCatalogNameBaseCatalogName Имя каталога в хранилище данных, содержащем столбец.The name of the catalog in the data store that contains the column. Значение NULL, если не удается определить базовое имя каталога.NULL if the base catalog name cannot be determined. Значением по умолчанию для этого столбца является значение null.The default for this column is a null value.
BaseTableNameBaseTableName Имя таблицы или представления в хранилище данных, содержащем столбец.The name of the table or view in the data store that contains the column. Значение NULL, если невозможно определить имя базовой таблицы.A null value if the base table name cannot be determined. Значением по умолчанию для этого столбца является значение null.The default of this column is a null value.
BaseColumnNameBaseColumnName Имя столбца в хранилище данных.The name of the column in the data store. Это может отличаться от имени столбца, возвращенного в столбце ColumnName, если был использован псевдоним.This might be different from the column name returned in the ColumnName column if an alias was used. Значение null, если имя базового столбца не может быть определено или если столбец набора строк является производным, но не идентичен столбцу в хранилище данных.A null value if the base column name cannot be determined or if the rowset column is derived, but not identical to, a column in the data store. Значением по умолчанию для этого столбца является значение null.The default for this column is a null value.

Для каждого столбца в результирующем наборе возвращается строка.A row is returned for every column in the results set.

Поставщик данных .NET Framework для ODBC предполагает, что сведения о метаданных доступны из драйвера ODBC после вызова одной из функций SQLPrepare, SQLExecuteили склексекутедирект .The .NET Framework Data Provider for ODBC assumes that metadata information is available from an ODBC driver after one of SQLPrepare, SQLExecute, or SQLExecuteDirect functions are called. Чтобы поведение команды "SchemaOnly" работало правильно, SQLPrepare должно вернуть необходимые сведения о метаданных.For "SchemaOnly" command behavior to work correctly, SQLPrepare must return the required metadata information. Не все драйверы ODBC поддерживают эту функцию или возвращают сведения о метаданных.Not all ODBC drivers support this function or return metadata information. В таких случаях часть или все сведения в Счематабле будут отсутствовать.In these cases, part or all of the information in the SchemaTable will be missing. После вызова SQLPrepareпоставщик данных вызывает функцию ODBC SQLColAttribute для поиска сведений о метаданных, относящихся к каждому столбцу в результатах запроса (например, IsUnique, Unique, AllowDBNull, BaseTableName, басеколумннаме).After calling SQLPrepare, The data provider calls the ODBC SQLColAttribute function to find the metadata information related to each column in the query results (for example, IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Если базовый драйвер не возвращает некоторые из этих сведений, соответствующие значения в Счематабле будут заданы неправильно.If the underlying driver does not return some of this information, the corresponding values in the SchemaTable will not be set correctly.

Поставщик данных .NET Framework для ODBC также вызывает SQLPrimaryKeys для получения сведений о ключах для каждой таблицы.The .NET Framework Data Provider for ODBC also calls SQLPrimaryKeys to retrieve the key information for every table. Если базовый драйвер ODBC не поддерживает эту функцию, поставщик данных вызывает SQLStatistics и выбирает один из уникальных индексов в качестве первичного ключа для таблицы.If the underlying ODBC driver does not support this function, the data provider calls SQLStatistics and chooses one of the unique indexes as the primary key for the table. Это может не всегда дать нужные результаты.This may not always give the results that you want.

OdbcCommandBuilder требуется правильная идентификация первичных ключей таблицы в целях правильной работы.OdbcCommandBuilder needs the correct identification of the primary keys of the table in order to work correctly. Если значение BaseTableName не возвращается для каждого столбца в результатах запроса, то поставщик данных .NET Framework для ODBC пытается проанализировать инструкцию SQL, чтобы найти имена таблиц, участвующих в запросе.If the BaseTableName is not returned for every column in the query results, the .NET Framework Data Provider for ODBC tries to parse the SQL statement to find the table names involved in the query. Это работает с инструкциями UPDATE, INSERT, DELETE и Simple SELECT, но не с хранимыми процедурами или инструкциями SELECT на основе соединений.This works with UPDATE, INSERT, DELETE and simple SELECT statements, but not with stored procedures or SELECT statements based on joins. Если в этой таблице отсутствуют некоторые или все сведения о схеме, OdbcCommandBuilder будет работать неправильно, так как у нее недостаточно сведений о схеме для автоматического создания правильных инструкций INSERT, UPDATE или DELETE.If some or all the schema information is missing from this table, the OdbcCommandBuilder will not work correctly, because it has insufficient schema information to automatically generate the correct INSERT, UPDATE, or DELETE statements.

Чтобы убедиться, что столбцы метаданных возвращают правильные сведения, необходимо вызвать ExecuteReader с параметром поведения, установленным в KeyInfo.To make sure that metadata columns return the correct information, you must call ExecuteReader with the behavior parameter set to KeyInfo. В противном случае некоторые столбцы в таблице схемы могут возвращать значения по умолчанию, null или неверные данные.Otherwise, some of the columns in the schema table may return default, null, or incorrect data.

При использовании ODBC.NET с Oracle через драйвер ODBC псевдонимы ключевых столбцов не распознаются как ключи.When you use ODBC.NET to Oracle via the ODBC driver, aliased key columns are not recognized as keys. Это влияет на столбцы IsKey и IsUnique в таблице схемы OdbcDataReader.This affects the IsKey and IsUnique columns in the schema table of the OdbcDataReader. Он также влияет на способность Одбккоммандбуилдер создавать логику обновления.It also affects the OdbcCommandBuilder's ability to generate updating logic. Рекомендуется не использовать псевдоним для первичного ключевого столбца.Consider not using an alias for a primary key column.

Примечание

Драйвер ODBC для Microsoft Jet всегда возвращает уникальный индекс и первичные ключевые столбцы как допускающие значение NULL независимо от того, допускаются ли они для NULL.The Microsoft Jet ODBC driver always returns unique index and primary key columns as nullable regardless of whether they are nullable or not. Драйвер также не возвращает сведения о первичном ключе; Он возвращает только список уникальных индексов и их столбцов, включая первичные ключевые столбцы, без различения между ними.The driver also does not return primary key information; it only returns a list of unique indexes and their columns, including primary key columns, without differentiating among them.

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

Дополнительно