Como funciona getsChematable ()?
-
21-09-2019 - |
Pergunta
OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable dataTable = oleDbDataReader.GetSchemaTable();
Como acontece GetSchemaTable()
trabalhar?
Onde ele obtém suas informações no RDBMS?
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.