Comment obtenir le nom de la table d'une colonne de SqlDataReader
J'ai une requête SQL-je obtenir à partir d'un fichier de configuration, cette requête contient généralement de 3 à 6 jointures.
J'ai besoin de trouver au moment de l'exécution, sur la base du résultat représenté par les SqlDataReader, pour trouver le nom de la table pour chaque colonne.
Voici quelque chose qui ne fonctionne pas:
- SqlDataReader.GetName retourne le nom de la colonne, mais pas le nom de la table.
- SqlDataReader.GetSchemaTable retourne un tableau de données avec les informations de colonne - mais tous les noms de table sont nulles.
- Interrogation information_schema n'aide pas parce que j'ai besoin de données sur les résultats de la requête en cours (et les noms de colonnes ne sont pas uniques, il y a des colonnes de même nom dans des tables différentes).
Je suis en utilisant .net 3.5SP1/C#/SQL Server 2008 dans une application console.
EDIT: je sais que ce n'est pas possible pour tous les cas, car une "colonne" peut être combiné à partir de plusieurs tables, une fonction ou une expression constante - je suis à la recherche de quelque chose qui fonctionne dans le cas simple.
EDIT 2: Trouvé pourquoi ça ne marchait pas - Vous pouvez utiliser SqlDataReader.GetSchemaTable pour obtenir des informations de la table, mais vous devez définir CommandBehavior à KeyInfo, vous n'avez qu'à le ExecuteReader appel:
reader = cmd.ExecuteReader(CommandBehavior.KeyInfo);
OriginalL'auteur Nir | 2010-06-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser SqlDataReader.GetSchemaTable pour obtenir des informations de la table, mais vous devez définir CommandBehavior à KeyInfo, vous n'avez qu'à le ExecuteReader appel:
OriginalL'auteur Nir
Je ne sais pas si cette information est disponible. En particulier, toutes les colonnes d'un ensemble de résultats proviennent d'une table. À partir d'un point de vue relationnel, des tables et des jeux de résultats sont la même chose.
OriginalL'auteur John Saunders
Ce question sans réponse sur stackoverflow utilise SqlDataReader.GetSchemaTable pour obtenir le nom de la table. Leur problème, c'est qu'il renvoie le nom réel de la table plutôt que de l'alias de la table. Vous ne savez pas si cela fonctionne avec votre sql mais pensé que je laisserais vous savez, juste au cas où.
OriginalL'auteur Kyra
En général, ce n'est pas possible. Considérons la requête suivante:
Clairement col1 proviennent de plus d'une table.
OriginalL'auteur A-K
vous pouvez le résoudre comme suit :
OriginalL'auteur
OriginalL'auteur Emre Kilinc Arslan