So holen Sie den Tabellennamen einer Spalte aus SqlDataReader

8

Ich habe eine SQL-Abfrage, die ich aus einer Konfigurationsdatei erhalte, diese Abfrage enthält normalerweise 3-6 Verknüpfungen.

Ich muss zur Laufzeit auf der Basis der von SqlDataReader dargestellten Ergebnismenge den Namen der Tabelle für jede Spalte finden.

Hier sind einige Dinge, die nicht funktionieren:

  • SqlDataReader.GetName gibt den Spaltennamen, aber nicht den Tabellennamen zurück.
  • SqlDataReader.GetSchemaTable gibt eine Datentabelle mit Spalteninformationen zurück - aber alle Tabellennamen sind null.
  • Die Abfrage von information_schema hilft nicht, da ich Daten zu den Ergebnissen der aktuellen Abfrage benötige (und die Spaltennamen sind nicht eindeutig - es gibt Spalten mit demselben Namen in verschiedenen Tabellen).

Ich verwende .net 3.5SP1 / C # / SQL Server 2008 in einer Konsolenanwendung.

BEARBEITEN: Ich weiß, das ist nicht in allen Fällen möglich, da eine "Spalte" aus mehreren Tabellen, einer Funktion oder sogar einem konstanten Ausdruck kombiniert werden kann - ich suche nach etwas, das funktioniert der einfache Fall.

BEARBEITEN 2: Herausgefunden, warum es nicht funktionierte - Sie können SqlDataReader.GetSchemaTable verwenden, um Tabelleninformationen abzurufen, aber Sie müssen CommandBehavior auf KeyInfo setzen, und zwar im ExecuteReader-Aufruf:

%Vor%     
Nir 23.06.2010, 15:08
quelle

6 Antworten

10

Sie können SqlDataReader.GetSchemaTable verwenden, um Tabelleninformationen abzurufen, aber Sie müssen CommandBehavior für KeyInfo festlegen, und zwar im ExecuteReader-Aufruf:

%Vor%     
Nir 24.06.2010, 13:25
quelle
2

Ich weiß nicht, ob diese Informationen verfügbar sind. Insbesondere stammen nicht alle Spalten einer Ergebnismenge aus einer Tabelle. Aus relationaler Sicht sind Tabellen und Resultsets identisch.

    
John Saunders 23.06.2010 15:10
quelle
2

Diese unbeantwortete Frage für stackoverflow verwendet SqlDataReader.GetSchemaTable, um die Tabelle abzurufen Name. Ihr Problem besteht darin, dass sie den tatsächlichen Tabellennamen und nicht den Aliasnamen der Tabelle zurückgibt. Ich bin mir nicht sicher, ob das mit deinem SQL funktioniert, aber ich dachte, ich würde es dich nur für den Fall wissen lassen.

    
Kyra 23.06.2010 15:32
quelle
1

Im Allgemeinen ist dies nicht möglich. Betrachten Sie die folgende Abfrage:

%Vor%

Col1 kommt eindeutig aus mehr als einer Tabelle.

    
A-K 24.06.2010 15:04
quelle
1

Sie können es wie folgt lösen:

%Vor%     
user2380889 14.05.2013 08:51
quelle
0
%Vor%     
Emre Kilinc Arslan 05.06.2016 16:56
quelle

Tags und Links