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);
Je ne suis pas sûr que vous allez être en mesure de le faire en se fondant sur le jeu de résultats. Vous aurez probablement besoin d'analyser le SQL au lieu - pourquoi avez-vous besoin?

OriginalL'auteur Nir | 2010-06-23