Partilhar via


OdbcDataReader.GetSchemaTable Método

Definição

Retorna um DataTable que descreve os metadados da coluna do 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

Retornos

Um DataTable que descreve os metadados de coluna.

Implementações

Exceções

Comentários

O GetSchemaTable método retorna metadados sobre cada coluna na seguinte ordem:

Coluna DataReader Descrição
ColumnName O nome da coluna; isso pode não ser exclusivo. Se o nome da coluna não puder ser determinado, um valor nulo será retornado. Esse nome sempre reflete a nomenclatura mais recente da coluna na exibição atual ou no texto do comando.
ColumnOrdinal O ordinal com base em zero da coluna. Esta coluna não pode ter um valor nulo.
ColumnSize O comprimento máximo possível de um valor na coluna. Para colunas que usam um tipo de dados de comprimento fixo, esse é o tamanho do tipo de dados.
NumericPrecision Se DbType for um tipo de dados numérico, essa será a precisão máxima da coluna. A precisão depende da definição da coluna. Se DbType não for um tipo de dados numérico, não use os dados nesta coluna. Se o driver ODBC subjacente retornar um valor de precisão para um tipo de dados não numérico, esse valor será usado na tabela de esquema.
NumericScale Se DbType for Decimal, o número de dígitos à direita do ponto decimal. Caso contrário, esse é um valor nulo. Se o driver ODBC subjacente retornar um valor de precisão para um tipo de dados não numérico, esse valor será usado na tabela de esquema.
Tipo de dados Mapeia para o tipo de common language runtime de DbType.
ProviderType O tipo de driver subjacente.
IsLong true se a coluna contiver um BLOB (Objeto Binário Longo) que contenha dados muito longos. A definição de dados muito longos é específica do driver.
AllowDBNull true se o consumidor puder definir a coluna como um valor nulo ou se o driver não puder determinar se o consumidor pode definir a coluna como um valor nulo. Caso contrário, false. Uma coluna pode conter valores nulos mesmo se não puder ser ajustada para um valor nulo.
IsReadOnly true se a coluna não puder ser modificada; caso contrário false, .
IsRowVersion Defina se a coluna contém um identificador de linha persistente que não pode ser gravado e que não tem valor significativo, exceto para identificar a linha.
IsUnique true: não há duas linhas na tabela base (a tabela retornada em BaseTableName) pode ter o mesmo valor nesta coluna. IsUnique tem a garantia de ser true se a coluna representa uma chave por si só ou se há uma restrição do tipo UNIQUE que se aplica somente a esta coluna.

false: a coluna pode conter valores duplicados na tabela base. O padrão para esta coluna é false.
IsKey true: a coluna é um de um conjunto de colunas no conjunto de linhas que, juntos, identificam exclusivamente a linha. O conjunto de colunas com IsKey definido como true deve identificar exclusivamente uma linha no conjunto de linhas. Não há nenhum requisito de que esse conjunto de colunas seja um conjunto mínimo de colunas. Esse conjunto de colunas pode ser gerado a partir de uma chave primária da tabela base, uma restrição exclusiva ou um índice exclusivo.

false: a coluna não é necessária para identificar exclusivamente a linha.
IsAutoIncrement true se a coluna atribuir valores a novas linhas em incrementos fixos; caso contrário false, . O padrão para esta coluna é false.
BaseSchemaName O nome do esquema na fonte de dados que contém a coluna. NULL se o nome do catálogo base não puder ser determinado. O padrão para esta coluna é um valor nulo.
BaseCatalogName O nome do catálogo no repositório de dados que contém a coluna. NULL se o nome do catálogo base não puder ser determinado. O padrão para esta coluna é um valor nulo.
BaseTableName O nome da tabela ou exibição no repositório de dados que contém a coluna. Um valor nulo se o nome da tabela de base não pode ser determinado. O padrão desta coluna é um valor nulo.
BaseColumnName O nome da coluna no armazenamento de dados. Isso pode ser diferente do nome da coluna retornado na coluna ColumnName se um alias for usado. Um valor nulo se o nome da coluna base não puder ser determinado ou se a coluna de conjunto de linhas for derivada, mas não idêntica a, uma coluna no armazenamento de dados. O padrão para esta coluna é um valor nulo.

Uma linha é retornada para cada coluna no conjunto de resultados.

O provedor de dados .NET Framework para ODBC pressupõe que as informações de metadados estejam disponíveis em um driver ODBC após uma das funções SQLPrepare, SQLExecute ou SQLExecuteDirect ser chamada. Para que o comportamento do comando "SchemaOnly" funcione corretamente, o SQLPrepare deve retornar as informações de metadados necessárias. Nem todos os drivers ODBC dão suporte a essa função ou retornam informações de metadados. Nesses casos, parte ou todas as informações na SchemaTable estarão ausentes. Depois de chamar SQLPrepare, o provedor de dados chama a função ODBC SQLColAttribute para localizar as informações de metadados relacionadas a cada coluna nos resultados da consulta (por exemplo, IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Se o driver subjacente não retornar algumas dessas informações, os valores correspondentes no SchemaTable não serão definidos corretamente.

O provedor de dados .NET Framework para ODBC também chama SQLPrimaryKeys para recuperar as informações principais de cada tabela. Se o driver ODBC subjacente não der suporte a essa função, o provedor de dados chamará SQLStatistics e escolherá um dos índices exclusivos como a chave primária da tabela. Isso pode nem sempre dar os resultados desejados.

OdbcCommandBuilder precisa da identificação correta das chaves primárias da tabela para funcionar corretamente. Se BaseTableName não for retornado para cada coluna nos resultados da consulta, o provedor de dados .NET Framework para ODBC tentará analisar a instrução SQL para localizar os nomes de tabela envolvidos na consulta. Isso funciona com instruções UPDATE, INSERT, DELETE e SELECT simples, mas não com procedimentos armazenados ou instruções SELECT com base em junções. Se algumas ou todas as informações de esquema estiverem ausentes desta tabela, o OdbcCommandBuilder não funcionará corretamente, pois não tem informações de esquema suficientes para gerar automaticamente as instruções INSERT, UPDATE ou DELETE corretas.

Para garantir que as colunas de metadados retornem as informações corretas, você deve chamar ExecuteReader com o parâmetro de comportamento definido como KeyInfo. Caso contrário, algumas das colunas na tabela de esquema podem retornar dados padrão, nulos ou incorretos.

Quando você usa ODBC.NET para o Oracle por meio do driver ODBC, as colunas de chave alias não são reconhecidas como chaves. Isso afeta as colunas IsKey e IsUnique na tabela de esquema do OdbcDataReader. Isso também afeta a capacidade do OdbcCommandBuilder de gerar a lógica de atualização. Considere não usar um alias para uma coluna de chave primária.

Observação

O driver ODBC do Microsoft Jet sempre retorna colunas exclusivas de índice e chave primária como anuláveis, independentemente de serem anuláveis ou não. O driver também não retorna informações de chave primária; retorna apenas uma lista de índices exclusivos e suas colunas, incluindo colunas de chave primária, sem diferenciar entre eles.

Aplica-se a

Confira também