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

DataTable

Eine DataTable, die die Spaltenmetadaten beschreibt.

Implementiert

Ausnahmen

Hinweise

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

Spalte "DataReader" 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 dem Befehlstext wider.
ColumnOrdinal Die nullbasierte Ordnungszahl der Spalte. Diese Spalte kann keinen NULL-Wert enthalten.
ColumnSize Die maximale 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 es sich um einen numerischen Datentyp handelt, ist dies die maximale Genauigkeit der Spalte. Die Genauigkeit hängt von der Definition der Spalte ab. Wenn DbType es sich nicht um einen numerischen Datentyp handelt, 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 es Decimalsich um die Anzahl der Ziffern rechts neben dem Dezimalpunkt handelt. Andernfalls ist dies ein Nullwert. Wenn der zugrunde liegende ODBC-Treiber einen Genauigkeitswert für einen nicht numerischen Datentyp zurückgibt, wird dieser Wert in der Schematabelle verwendet.
DataType Karten zum allgemeinen Sprach-Runtime-Typ von DbType.
ProviderType Der zugrunde liegende Treibertyp.
IsLong true wenn die Spalte ein Binär-Long-Objekt (BLOB) enthält, das sehr lange Daten enthält. Die Definition von sehr langen Daten ist treiberspezifisch.
AllowDBNull true wenn der Verbraucher die Spalte auf einen Nullwert festlegen kann oder der Treiber nicht bestimmen kann, ob der Verbraucher die Spalte auf einen Nullwert 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) kann denselben Wert in dieser Spalte aufweisen. IsUnique ist garantiert true , wenn die Spalte einen Schlüssel selbst darstellt oder wenn eine Einschränkung des Typs UNIQUE vorhanden ist, die nur für diese Spalte gilt.

false: Die Spalte kann doppelte Werte in der Basistabelle enthalten. Die Standardeinstellung für diese Spalte ist false.
IsKey true: Die Spalte ist eine der Spalten in der Zeilengruppe, die zusammengenommen, die die Zeile eindeutig identifizieren. Die Gruppe von Spalten mit IsKey-Satz true muss eine Zeile im Rowet 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 Basistabellen primärschlüssel, 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 Werte neuen Zeilen in festen Schritten zuweisen; andernfalls false. Die Standardeinstellung für diese Spalte ist false.
BaseSchemaName Der Name des Schemas in der Datenquelle, die die Spalte enthält. NULL, wenn der Basiskatalogname nicht bestimmt werden kann. Der Standardwert für diese Spalte ist ein Nullwert.
BaseCatalogName Der Name des Katalogs im Datenspeicher, der die Spalte enthält. NULL, wenn der Basiskatalogname nicht bestimmt werden kann. Der Standardwert für diese Spalte ist ein Nullwert.
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 Nullwert.
BaseColumnName Der Name der Spalte im Datenspeicher. Dies unterscheidet sich möglicherweise von dem Spaltennamen, der in der Spalte "ColumnName" zurückgegeben wird, wenn ein Alias verwendet wurde. Ein Nullwert, wenn der Basisspaltenname nicht bestimmt werden kann oder wenn die Zeilensatzspalte abgeleitet wird, aber nicht identisch mit einer Spalte im Datenspeicher. Der Standardwert für diese Spalte ist ein Nullwert.

Eine Zeile wird für jede Spalte im Ergebnissatz zurückgegeben.

Bei der .NET Framework Datenanbieter für ODBC wird davon ausgegangen, dass Metadateninformationen aus einem ODBC-Treiber nach einem der Funktionen SQLPrepare, SQLExecute oder SQLExecuteDirect aufgerufen werden. Bei "SchemaOnly"-Befehlsverhalten, das 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 fehlt ein Teil oder alle Informationen in der SchemaTable. Nach dem Aufrufen von SQLPrepare ruft der Datenanbieter die ODBC SQLColAttribute-Funktion auf, um die Metadateninformationen zu den einzelnen Spalten in den Abfrageergebnissen zu finden (z. B. IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Wenn der zugrunde liegende Treiber einige dieser Informationen nicht zurückzugeben, werden die entsprechenden Werte in der SchemaTable nicht ordnungsgemäß festgelegt.

Die .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 gibt möglicherweise nicht immer die gewünschten Ergebnisse.

OdbcCommandBuilder benötigt die richtige Identifizierung der Primärschlüssel der Tabelle, um ordnungsgemäß zu funktionieren. Wenn der BaseTableName für jede Spalte in den Abfrageergebnissen nicht zurückgegeben wird, versucht die .NET Framework Datenanbieter für ODBC, die SQL-Anweisung zu analysieren, um die tabellennamen zu finden, die in der Abfrage enthalten sind. Dies funktioniert mit UPDATE, INSERT, DELETE und einfachen SELECT-Anweisungen, aber nicht mit gespeicherten Prozeduren oder SELECT-Anweisungen basierend auf Verknüpfungen. Wenn einige oder alle Schemainformationen aus dieser Tabelle fehlen, funktioniert dies OdbcCommandBuilder nicht ordnungsgemäß, da es nicht genügend Schemainformationen hat, um automatisch die richtigen INSERT-, UPDATE- oder DELETE-Anweisungen zu generieren.

Um sicherzustellen, dass Metadatenspalten die richtigen Informationen zurückgeben, müssen Sie mit dem Verhaltenparameter aufrufen ExecuteReader , der auf KeyInfo festgelegt ist. Andernfalls gibt einige der Spalten in der Schematabelle standard-, null- oder falsche Daten zurück.

Wenn Sie ODBC.NET über den ODBC-Treiber zu Oracle verwenden, werden aliase Schlüsselspalten nicht als Schlüssel erkannt. Dies wirkt sich auf die Spalten IsKey und IsUnique in der Schematabelle des OdbcDataReader aus. Es wirkt sich auch auf die Fähigkeit des ODBCCommandBuilders aus, die Aktualisierungslogik zu generieren. Berücksichtigen Sie nicht die Verwendung eines Aliass für eine Primärschlüsselspalte.

Hinweis

Der Microsoft Jet ODBC-Treiber gibt immer eindeutige Index- und Primärschlüsselspalten als Nullwert zurück, unabhängig davon, ob sie nullfähig sind oder nicht. Der Treiber gibt auch keine Primärschlüsselinformationen zurück; es gibt nur eine Liste eindeutiger Indizes und deren Spalten zurück, einschließlich Primärschlüsselspalten, ohne sich voneinander zu unterscheiden.

Gilt für

Siehe auch