OdbcDataReader.GetSchemaTable Methode

Definition

Gibt eine DataTable zurück, die die Spaltenmetadaten des OdbcDataReader beschreibt.

public:
 override System::Data::DataTable ^ GetSchemaTable();
public:
 virtual System::Data::DataTable ^ GetSchemaTable();
public override System.Data.DataTable GetSchemaTable ();
public override System.Data.DataTable? GetSchemaTable ();
public System.Data.DataTable GetSchemaTable ();
override this.GetSchemaTable : unit -> System.Data.DataTable
abstract member GetSchemaTable : unit -> System.Data.DataTable
override this.GetSchemaTable : unit -> System.Data.DataTable
Public Overrides Function GetSchemaTable () As DataTable
Public Function GetSchemaTable () As DataTable

Gibt zurück

Eine DataTable, die die Spaltenmetadaten beschreibt.

Implementiert

Ausnahmen

Hinweise

Die GetSchemaTable -Methode gibt Metadaten zu jeder Spalte in der folgenden Reihenfolge zurück:

DataReader-Spalte BESCHREIBUNG
ColumnName Der Name der Spalte; Dies ist möglicherweise nicht eindeutig. Wenn der Spaltenname nicht bestimmt werden kann, wird ein NULL-Wert zurückgegeben. Dieser Name spiegelt immer die neueste Benennung der Spalte in der aktuellen Ansicht oder im Aktuellen Befehlstext wider.
ColumnOrdinal Die nullbasierte Ordnungszahl der Spalte. Diese Spalte kann keinen NULL-Wert enthalten.
ColumnSize Die maximal mögliche Länge eines Werts in der Spalte. Für Spalten, die einen Datentyp mit fester Länge verwenden, ist dies die Größe des Datentyps.
NumericPrecision Wenn DbType ein numerischer Datentyp ist, ist dies die maximale Genauigkeit der Spalte. Die Genauigkeit hängt von der Definition der Spalte ab. Wenn DbType kein numerischer Datentyp ist, verwenden Sie die Daten in dieser Spalte nicht. 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 DbType ist, ist Decimaldie Anzahl der Ziffern rechts neben dem 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 DbTypezugeordnet.
ProviderType Der zugrunde liegende Treibertyp.
IsLong true , wenn die Spalte ein Binary Long Object (BLOB) enthält, das sehr lange Daten enthält. Die Definition von sehr langen Daten ist treiberspezifisch.
AllowDBNull true , wenn der Consumer die Spalte auf einen NULL-Wert festlegen kann oder der Treiber nicht ermitteln kann, ob der Consumer die Spalte auf einen NULL-Wert festlegen kann. Andernfalls false. Eine Spalte kann NULL-Werte enthalten, auch wenn sie nicht auf einen NULL-Wert festgelegt werden kann.
IsReadOnly true , wenn die Spalte nicht geändert werden kann; andernfalls false.
IsRowVersion Festlegen, ob die Spalte einen permanenten Zeilenbezeichner enthält, in den nicht geschrieben werden kann und der über die Identifizierung der Zeile hinaus keinen inhaltlichen Wert hat.
IsUnique true: Keine zwei Zeilen in der Basistabelle (die in BaseTableName zurückgegebene Tabelle) können in dieser Spalte denselben Wert aufweisen. IsUnique ist garantiert true , wenn die Spalte selbst einen Schlüssel darstellt oder wenn eine Einschränkung vom Typ UNIQUE vorhanden ist, die nur für diese Spalte gilt.

false: Die Spalte kann doppelte Werte in der Basistabelle enthalten. Der Standardwert für diese Spalte ist false.
IsKey true: Die Spalte ist eine von einer Reihe von Spalten im Rowset, die zusammengenommen die Zeile eindeutig identifizieren. Der Satz von Spalten, deren IsKey auf festgelegt ist, true muss eine Zeile im Rowset eindeutig identifizieren. Es ist nicht erforderlich, dass es sich bei dieser Menge Spalten um eine minimale Spaltenmenge handelt. Dieser Satz von Spalten kann aus einem Primärschlüssel der Basistabelle, einer eindeutigen Einschränkung oder einem eindeutigen Index generiert werden.

false: Die Spalte ist nicht erforderlich, um die Zeile eindeutig zu identifizieren.
IsAutoIncrement true , wenn die Spalte neuen Zeilen in festen 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 Ansicht im Datenspeicher, die 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. Dies kann sich von dem Spaltennamen unterscheiden, der in der Spalte ColumnName zurückgegeben wird, wenn ein Alias verwendet wurde. Ein NULL-Wert, wenn der Name der Basisspalte nicht bestimmt werden kann oder wenn die Rowsetspalte abgeleitet, aber nicht identisch mit einer Spalte im Datenspeicher 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 Metadateninformationen von einem ODBC-Treiber verfügbar sind, nachdem eine der Funktionen SQLPrepare, SQLExecute oder SQLExecuteDirect aufgerufen wurde. Damit das Befehlsverhalten "SchemaOnly" ordnungsgemäß funktioniert, muss SQLPrepare die erforderlichen Metadateninformationen zurückgeben. Nicht alle ODBC-Treiber unterstützen diese Funktion oder geben Metadateninformationen zurück. In diesen Fällen fehlen teilweise oder alle Informationen in der SchemaTable. Nach dem Aufruf von SQLPrepare ruft der Datenanbieter die ODBC SQLColAttribute-Funktion auf, um die Metadateninformationen zu den einzelnen Spalten in den Abfrageergebnissen zu suchen (z. B. IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Wenn der zugrunde liegende Treiber einige dieser Informationen nicht zurückgibt, werden die entsprechenden Werte in der SchemaTable nicht ordnungsgemäß festgelegt.

Der .NET Framework-Datenanbieter für ODBC ruft auch SQLPrimaryKeys auf, um die Schlüsselinformationen für jede Tabelle 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. Dies liefert möglicherweise nicht immer die gewünschten Ergebnisse.

OdbcCommandBuilder benötigt die korrekte Identifizierung der Primärschlüssel der Tabelle, um ordnungsgemäß zu funktionieren. Wenn baseTableName nicht für jede Spalte in den Abfrageergebnissen zurückgegeben wird, versucht der .NET Framework-Datenanbieter für ODBC, die SQL-Anweisung zu analysieren, um die an der Abfrage beteiligten Tabellennamen zu finden. Dies funktioniert mit UPDATE-, INSERT-, DELETE- und einfachen SELECT-Anweisungen, aber nicht mit gespeicherten Prozeduren oder SELECT-Anweisungen, die auf Joins basieren. Wenn einige oder alle Schemainformationen in dieser Tabelle fehlen, funktioniert die OdbcCommandBuilder nicht ordnungsgemäß, da es nicht genügend Schemainformationen enthält, um automatisch die richtigen INSERT-, UPDATE- oder DELETE-Anweisungen zu generieren.

Um sicherzustellen, dass Metadatenspalten die richtigen Informationen zurückgeben, müssen Sie aufrufen ExecuteReader , wobei der Verhaltensparameter auf KeyInfo festgelegt ist. Andernfalls geben einige Spalten in der Schematabelle möglicherweise standard-, NULL- oder falsche Daten zurück.

Wenn Sie ODBC.NET über den ODBC-Treiber zu Oracle verwenden, werden Aliasschlüsselspalten nicht als Schlüssel erkannt. Dies wirkt sich auf die Spalten IsKey und IsUnique in der Schematabelle von OdbcDataReader aus. Dies wirkt sich auch auf die Fähigkeit von OdbcCommandBuilder aus, Aktualisierungslogik zu generieren. Erwägen Sie, keinen Alias für eine Primärschlüsselspalte zu verwenden.

Hinweis

Der Microsoft Jet ODBC-Treiber gibt immer eindeutige Index- und Primärschlüsselspalten als NULL-werte zurück, unabhängig davon, ob sie NULL-Werte zulassen oder nicht. Der Treiber gibt auch keine Primärschlüsselinformationen zurück. Es gibt nur eine Liste mit eindeutigen Indizes und deren Spalten zurück, einschließlich Primärschlüsselspalten, ohne zwischen ihnen zu unterscheiden.

Gilt für:

Weitere Informationen