Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gibt eine DataTable zurück, die die Spaltenmetadaten des OdbcDataReader beschreibt.
Namespace: System.Data.Odbc
Assembly: System.Data (in system.data.dll)
Syntax
'Declaration
Public Overrides Function GetSchemaTable As DataTable
'Usage
Dim instance As OdbcDataReader
Dim returnValue As DataTable
returnValue = instance.GetSchemaTable
public override DataTable GetSchemaTable ()
public:
virtual DataTable^ GetSchemaTable () override
public DataTable GetSchemaTable ()
public override function GetSchemaTable () : DataTable
Rückgabewert
Eine DataTable, die die Spaltenmetadaten beschreibt.
Ausnahmen
| Ausnahmetyp | Bedingung |
|---|---|
Der OdbcDataReader ist geschlossen. |
Hinweise
Die GetSchemaTable-Methode gibt Metadaten für die einzelnen Spalten in der folgenden Reihenfolge zurück:
DataReader-Spalte |
Beschreibung |
|---|---|
ColumnName |
Der Name der Spalte, der nicht unbedingt eindeutig sein muss. Wenn der Spaltenname nicht bestimmt werden kann, wird ein NULL-Wert zurückgegeben. Dieser Name stellt immer die aktuellste Benennung der Spalte in der aktuellen Sicht oder im Befehlstext dar. |
ColumnOrdinal |
Die Ordnungszahl der Spalte. Diese ist 0 für die Lesezeichenspalte der Zeile, sofern vorhanden. Weitere Spalten werden beginnend mit 1 nummeriert. Diese Spalte darf keinen NULL-Wert enthalten. |
ColumnSize |
Die maximal mögliche Länge eines Werts in der Spalte. Bei Spalten, die einen Datentyp mit fester Länge verwenden, ist dies die Größe des Datentyps. |
NumericPrecision |
Wenn DbType einen numerischen Datentyp darstellt, ist dies die maximale Genauigkeit der Spalte. Die Genauigkeit ist von der Definition der Spalte abhängig. Wenn DbType kein numerischer Datentyp ist, ist dies ein NULL-Wert. Wenn der zugrunde liegende ODBC-Treiber einen Genauigkeitswert für einen nicht numerischen Datentyp zurückgibt, wird dieser Wert in der Schematabelle verwendet. |
NumericScale |
Wenn DbTypeDecimal ist, ist dies die Anzahl der Stellen rechts vom Dezimaltrennzeichen. Andernfalls ist dies ein NULL-Wert. Wenn der zugrunde liegende ODBC-Treiber einen Genauigkeitswert für einen nicht numerischen Datentyp zurückgibt, wird dieser Wert in der Schematabelle verwendet. |
DataType |
Wird dem Common Language Runtime-Typ von DbType zugeordnet. |
ProviderType |
Der zugrunde liegende Treibertyp. |
IsLong |
true, wenn die Spalte ein BLOB (Binary Large Object) mit sehr umfangreichen Daten enthält. Die Definition sehr umfangreicher Daten ist treiberabhängig. |
AllowDBNull |
true, wenn der Consumer die Spalte auf einen NULL-Wert festlegen kann oder wenn der Treiber nicht bestimmen kann, ob der Consumer die Spalte auf einen NULL-Wert festlegen kann. Andernfalls false. Eine Spalte kann auch dann NULL-Werte enthalten, wenn sie nicht auf einen NULL-Wert festgelegt werden kann. |
IsReadOnly |
true, wenn die Spalte nicht geändert werden kann, andernfalls false. |
IsRowVersion |
Wird festgelegt, wenn die Spalte einen persistenten Zeilenbezeichner enthält, in den nicht geschrieben werden kann und dessen Wert nur für das Bezeichnen der Zeile sinnvoll ist. |
IsUnique |
true: In der Basistabelle (der in BaseTableName zurückgegebenen Tabelle) dürfen zwei Zeilen in dieser Spalte nicht den gleichen Wert haben. IsUnique ist immer true, wenn die Spalte selbst einen Schlüssel darstellt oder eine Einschränkung vom Typ UNIQUE ausschließlich auf diese Spalte angewendet wird. false: Die Spalte kann doppelte Werte in der Basistabelle enthalten. Der Standardwert für diese Spalte ist false. |
IsKey |
true: Die Spalte gehört zu einem Satz von Spalten im Rowset, die zusammen die Zeile eindeutig bezeichnen. Der Satz von Spalten, bei denen IsKey auf true festgelegt ist, muss eine Zeile im Rowset eindeutig bezeichnen. Es gibt für diesen Satz von Spalten keine Anforderung für einen Mindestsatz von Spalten. Dieser Satz von Spalten kann aus dem Primärschlüssel der Basistabelle, einer Unique-Einschränkung oder einem eindeutigen Index generiert werden. false: Die Spalte ist für die eindeutige Bezeichnung der Zeile nicht erforderlich. |
IsAutoIncrement |
true, wenn die Spalte neuen Zeilen in feststehenden Schritten Werte zuweist, andernfalls false. Der Standardwert für diese Spalte ist false. |
BaseSchemaName |
Der Name des Schemas in der Datenquelle, die die Spalte enthält. NULL, wenn der Name des Basiskatalogs nicht bestimmt werden kann. Der Standardwert für diese Spalte ist ein NULL-Wert. |
BaseCatalogName |
Der Name des Katalogs im Datenspeicher, der die Spalte enthält. NULL, wenn der Name des Basiskatalogs nicht bestimmt werden kann. Der Standardwert für diese Spalte ist ein NULL-Wert. |
BaseTableName |
Der Name der Tabelle oder Sicht im Datenspeicher, der die Spalte enthält. Ein NULL-Wert, wenn der Name der Basistabelle nicht bestimmt werden kann. Der Standardwert dieser Spalte ist ein NULL-Wert. |
BaseColumnName |
Der Name der Spalte im Datenspeicher. Dieser kann sich von dem in der ColumnName-Spalte zurückgegebenen Spaltennamen unterscheiden, wenn ein Alias verwendet wurde. Ein NULL-Wert, wenn der Name der Basisspalte nicht bestimmt werden kann oder die Rowset-Spalte aus einer Spalte im Datenspeicher abgeleitet wird, jedoch nicht mit dieser identisch ist. Der Standardwert für diese Spalte ist ein NULL-Wert. |
Für jede Spalte im Resultset wird eine Zeile zurückgegeben.
Der .NET Framework-Datenanbieter für ODBC geht davon aus, dass nach dem Aufruf der Funktionen SQLPrepare, SQLExecute und SQLExecuteDirect Metadaten von einem ODBC-Treiber verfügbar sind. Damit der "SchemaOnly"-Befehl das richtige Verhalten aufweist, müssen von SQLPrepare die erforderlichen Metadateninformationen zurückgegeben werden. Nicht alle ODBC-Treiber unterstützen diese Funktion oder geben Metadateninformationen zurück. In diesen Fällen fehlen die Informationen in der SchemaTable teilweise oder ganz. Nach dem Aufruf von SQLPrepare ruft der Datenanbieter die SQLColAttribute-ODBC-Funktion auf, um die Metadateninformationen für die einzelnen Spalten in den Abfrageergebnissen zu suchen (z. B. IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Wenn der zugrunde liegende Treiber keinen Teil dieser Informationen zurückgibt, werden die entsprechenden Werte in der SchemaTable nicht richtig festgelegt.
Der .NET Framework-Datenanbieter für ODBC ruft außerdem SQLPrimaryKeys auf, um die Schlüsselinformationen für alle Tabellen abzurufen. Wenn der zugrunde liegende ODBC-Treiber diese Funktion nicht unterstützt, ruft der Datenanbieter SQLStatistics auf und wählt einen der eindeutigen Indizes als Primärschlüssel für die Tabelle aus. Auf diese Weise erhalten Sie möglicherweise nicht immer die gewünschten Ergebnisse.
Für OdbcCommandBuilder müssen die Primärschlüssel der Tabelle richtig angegeben werden, damit eine ordnungsgemäße Funktionsweise sichergestellt wird. Wenn der BaseTableName nicht für alle Spalten in den Abfrageergebnissen zurückgegeben wird, versucht der .NET Framework-Datenanbieter für ODBC, die SQL-Anweisung zu analysieren, um die Tabellennamen für die Abfrage zu finden. Die funktioniert bei UPDATE-Anweisungen, INSERT-Anweisungen, DELETE-Anweisungen und einfachen SELECT-Anweisungen, jedoch nicht bei gespeicherten Prozeduren oder SELECT-Anweisungen auf der Grundlage von Verknüpfungen. Bei teilweise oder völlig fehlenden Schemainformationen in der Tabelle funktioniert der OdbcCommandBuilder nicht ordnungsgemäß, da anhand der vorhandenen Schemainformationen nicht die richtigen INSERT-Anweisungen, UPDATE-Anweisungen oder DELETE-Anweisungen automatisch generiert werden können.
Sie müssen ExecuteReader mit dem auf KeyInfo festgelegten behavior-Parameter aufrufen, um sicherzustellen, dass die Metadatenspalten die richtigen Informationen zurückgeben. Andernfalls geben einige der Spalten in der Schematabelle möglicherweise Standarddaten, NULL oder fehlerhafte Daten zurück.
Hinweis
Für Microsoft Jet-ODBC-Treiber sind bei der Rückgabe von Spalten mit eindeutigen Indizes und Primärschlüsseln immer NULL-Werte zulässig, wobei es keine Rolle spielt, ob tatsächlich NULL-Werte zulässig sind. Der Treiber gibt auch keine Primärschlüsselinformationen zurück. Er gibt lediglich eine Liste mit eindeutigen Indizes und den zugehörigen Spalten einschließlich der Primärschlüsselspalten zurück, ohne zwischen diesen zu unterscheiden.
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1
Siehe auch
Referenz
OdbcDataReader-Klasse
OdbcDataReader-Member
System.Data.Odbc-Namespace