Comment peut-GetSchemaTable () fonctionne?
-
21-09-2019 - |
Question
OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable dataTable = oleDbDataReader.GetSchemaTable();
Comment ça GetSchemaTable()
travail?
Où est-il obtenir ses informations dans SGBDR?
La solution
La mise en œuvre de IDataReader.GetSchemaTable()
appartient au fournisseur - il varie. Vous pouvez écrire vos propres fournisseurs et de le faire comme vous le souhaitez.
Pour être honnête, cela est mauvais peu de conception dans le cadre - vous ne devriez jamais avoir des méthodes d'interface qui renvoient un DataTable
typées ou DataSet
que ce résultat pourrait contenir quoi que ce soit. défaites un peu le point de le contraindre par une interface en premier lieu: « vous devez avoir une méthode qui retourne DataTable
mais nous ne se soucient pas ce que les lignes ou les colonnes qu'il a »
Même si le fournisseur est GetSchemaTable()
SQL ne va pas revenir à la [syscolumns]
ou [sysobjects]
. Ce serait un appel supplémentaire de DB, exiger des privilèges supplémentaires et ne pas travailler de toute façon, comme le jeu de résultats n'a pas besoin de tenir compte des objets dans la base de données.
Je ne suis pas certain, mais je pense que la grande majorité des implémentations IDataReader.GetSchemaTable()
à lire certaines propriétés des méta-données tenues avec le jeu de résultats.
Autres conseils
GetSchemaTable () lit les métadonnées sur l'ensemble de résultats renvoyés par ADO.NET.
A partir des tables système (par exemple, syscolumns, sysobjects, etc.) dans chaque base de données.