Question

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

Comment ça GetSchemaTable() travail?

Où est-il obtenir ses informations dans SGBDR?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top