2009-05-18 7 views
1

Ich benutze das 2.0-Framework und ich suche nach einem generischen Weg, um festzustellen, ob eine Spalte in einer Tabelle existiert. Ich möchte diesen Code mit mehreren Datenbanktypen und Providern verwenden.Generische Möglichkeit, festzustellen, ob eine Spalte in ADO.NET existiert

Die GetSchema-Methode gibt Schemainformationen zurück, aber das Format der Informationen und die Daten zur Einschränkung der zurückgegebenen Informationen scheinen beide für den Anbieter spezifisch zu sein.

Die anderen Lösungen, die ich gesehen habe, scheinen auf Select * aus Tabelle zu laufen und dann die Ergebnisse zu suchen, um zu sehen, ob die Spalte existiert. Dies funktioniert, aber es scheint verrückt, eine Auswahl für die gesamte Tabelle auszustellen, um zu sehen, ob eine Spalte existiert.

Antwort

3

Zwei Optionen, die ich von sofort denken kann:

Es wäre schön, die INFORMATION_SCHEMA Ansichten zu verwenden, den Teil der SQL-Standards sind, aber nicht alle Datenbanksysteme umzusetzen. Aber wenn die Datenbanken, die Ihnen wichtig sind, es implementieren, ist das Ihre beste Wahl.

Eine andere Option ist, Ihre Abfrage zu nehmen, aber fügen Sie eine "WHERE 1 = 0" -Klausel hinzu, so dass es keine Zeilen zurückgibt. ADO.NET wird immer noch das Schema in diesem Fall zurückgeben

EDIT: Eigentlich gibt die zweite Methode Ihnen die Existenz von Spalten und ihre Datentypen. Ich bin mir jedoch nicht sicher, ob Sie vollständige Schemainformationen wie maximale Länge, NULLable usw. erhalten. Die Ansichten von INFORMATION_SCHEMA sind wirklich die beste Wahl, aber ORACLE implementiert sie nicht.

ich auf diese kam:

http://database-geek.com/2009/04/30/oracle-information_schema/

, die eine Open-Source-Bemühungen ist es, die INFORMATION_SCHEMA Ansichten in Oracle zu verspotten. Ich habe keine Ahnung, wie vollständig oder funktionell diese Anstrengung an diesem Punkt ist.

+0

Ich brauche in diesem Fall nicht die vollständigen Schemainformationen. Ich versuche nur, eine generische bool FieldExists (string tableName) -Methode zu implementieren. –

+0

Ich liebe es, dem Management zu erklären, dass der SQL-Standard nicht wirklich ein Standard ist, da so vieles entweder anders implementiert oder überhaupt nicht in verschiedenen Datenbanken implementiert ist. –

+0

Deshalb war ich fasziniert von diesem Projekt zur Implementierung von INFORMATION_SCHEMA auf Oracle. Oracle ist hier die große Ausnahme, aber es sollte nicht so schwer zu implementieren sein. Oracle stellt all diese Informationen zur Verfügung, nur in einem benutzerdefinierten Satz von Tabellen/Ansichten. Es ist wirklich nur eine Frage von einigen Leuten, die sich die Zeit nehmen, die Ansicht zu erstellen, um die Daten in das korrekte Schema zu übersetzen. – Clyde

2

Statt select * aus der Tabelle, die Sie tun können:

select * from table 
where true=false 

Dies lässt ADO die Namen der Spalten sehen, ohne dass die Daten zurück. Es könnte eine bessere allgemeinere Möglichkeit geben, Systemtabellen über DB-Provider hinweg abzufragen, aber ich weiß es nicht.

+0

Diese Lösung wurde tatsächlich implementiert. Ich habe Clyde's Lösung als die akzeptierte markiert, da er diese Lösung und die INFORMATION_SCHEMA erwähnt, die für einige besser sein könnte. –

Verwandte Themen