OdbcDataReader.GetSchemaTable Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
Der OdbcDataReader ist geschlossen.
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.