Pergunta

OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable dataTable = oleDbDataReader.GetSchemaTable();

Como acontece GetSchemaTable() trabalhar?

Onde ele obtém suas informações no RDBMS?

Foi útil?

Solução

A implementação de IDataReader.GetSchemaTable() Cabe ao provedor - então ele variará. Você pode escrever seus próprios fornecedores e fazê -lo da maneira que desejar.

Para ser sincero, isso é ruim de design na estrutura - você nunca deve ter métodos de interface que retornem um não DataTable ou DataSet como esse resultado pode conter qualquer coisa. Meio que derrota o ponto de restringi -lo por uma interface em primeiro lugar: "Você deve ter um método que retorne DataTable Mas não nos importamos com quais linhas ou colunas ele tem "

Mesmo que o provedor seja SQL GetSchemaTable() não volta para o [syscolumns] ou [sysobjects]. Isso seria uma chamada adicional de banco de dados, requer privilégios adicionais e não funcionaria de qualquer maneira, pois o conjunto de resultados não precisa refletir nenhum objetivo no banco de dados.

Não tenho certeza, mas eu esperaria a grande maioria de IDataReader.GetSchemaTable() implementações para ler algumas propriedades dos meta -dados mantidos com o conjunto de resultados.

Outras dicas

GetSChematable () lê os metadados no conjunto de resultados retornados pelo ADO.net.

Nas tabelas do sistema (por exemplo, syscolumns, sysobjects, etc) em cada banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top