OdbcDataReader.GetSchemaTable Metod

Definition

Returnerar en DataTable som beskriver kolumnmetadata för OdbcDataReader.

public:
 override System::Data::DataTable ^ GetSchemaTable();
public:
 virtual System::Data::DataTable ^ GetSchemaTable();
public override System.Data.DataTable? GetSchemaTable();
public System.Data.DataTable GetSchemaTable();
public override 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

Returer

En DataTable som beskriver kolumnmetadata.

Implementeringar

Undantag

Kommentarer

Metoden GetSchemaTable returnerar metadata om varje kolumn i följande ordning:

DataReader-kolumn Description
ColumnName Namnet på kolumnen; Detta kanske inte är unikt. Om kolumnnamnet inte kan fastställas returneras ett null-värde. Det här namnet återspeglar alltid den senaste namngivningen av kolumnen i den aktuella vyn eller kommandotexten.
ColumnOrdinal Kolumnens nollbaserade ordningstal. Den här kolumnen får inte innehålla ett null-värde.
Kolumnstorlek Den maximala möjliga längden på ett värde i kolumnen. För kolumner som använder en datatyp med fast längd är det här storleken på datatypen.
Numerisktprecision Om DbType är en numerisk datatyp är detta kolumnens maximala precision. Precisionen beror på definitionen av kolumnen. Om DbType inte är en numerisk datatyp ska du inte använda data i den här kolumnen. Om den underliggande ODBC-drivrutinen returnerar ett precisionsvärde för en icke-numerisk datatyp används det här värdet i schematabellen.
Numerisk skala Om DbType är Decimal, antalet siffror till höger om decimaltecknet. Annars är detta ett null-värde. Om den underliggande ODBC-drivrutinen returnerar ett precisionsvärde för en icke-numerisk datatyp används det här värdet i schematabellen.
Datatyp Mappar till den vanliga språkkörningstypen DbTypeför .
ProviderType Den underliggande drivrutinstypen.
IsLong true om kolumnen innehåller ett binärt långt objekt (BLOB) som innehåller mycket långa data. Definitionen av mycket långa data är drivrutinsspecifik.
AllowDBNull true om konsumenten kan ange kolumnen till ett null-värde eller om drivrutinen inte kan avgöra om konsumenten kan ange kolumnen till ett null-värde. Annars, false. En kolumn kan innehålla null-värden, även om den inte kan anges till ett null-värde.
ÄrEndastLäsbar true om kolumnen inte kan ändras. annars false.
IsRowVersion Ange om kolumnen innehåller en beständig radidentifierare som inte kan skrivas till och inte har något meningsfullt värde förutom att identitetera raden.
IsUnique true: Inga två rader i bastabellen (tabellen som returneras i BaseTableName) kan ha samma värde i den här kolumnen. IsUnique är garanterat true om kolumnen representerar en nyckel själv eller om det finns en begränsning av typen UNIK som endast gäller för den här kolumnen.

false: Kolumnen kan innehålla duplicerade värden i bastabellen. Standardvärdet för den här kolumnen är false.
IsKey true: Kolumnen är en av en uppsättning kolumner i raduppsättningen som tillsammans unikt identifierar raden. Uppsättningen kolumner med IsKey inställd på true måste unikt identifiera en rad i raduppsättningen. Det finns inget krav på att den här uppsättningen kolumner är en minimal uppsättning kolumner. Den här uppsättningen kolumner kan genereras från en primärnyckel för bastabellen, en unik begränsning eller ett unikt index.

false: Kolumnen krävs inte för att unikt identifiera raden.
IsAutoIncrement true om kolumnen tilldelar värden till nya rader i fasta steg; annars false. Standardvärdet för den här kolumnen är false.
BaseSchemaName Namnet på schemat i datakällan som innehåller kolumnen. NULL om baskatalognamnet inte kan fastställas. Standardvärdet för den här kolumnen är ett null-värde.
BaseCatalogName Namnet på katalogen i datalagret som innehåller kolumnen. NULL om baskatalognamnet inte kan fastställas. Standardvärdet för den här kolumnen är ett null-värde.
BaseTableName Namnet på tabellen eller vyn i datalagret som innehåller kolumnen. Ett null-värde om bastabellnamnet inte kan fastställas. Standardvärdet för den här kolumnen är ett null-värde.
BaseColumnName Namnet på kolumnen i datalagret. Detta kan skilja sig från kolumnnamnet som returneras i kolumnen ColumnName om ett alias användes. Ett null-värde om baskolumnnamnet inte kan fastställas eller om raduppsättningskolumnen härleds, men inte är identisk med, en kolumn i datalagret. Standardvärdet för den här kolumnen är ett null-värde.

En rad returneras för varje kolumn i resultatuppsättningen.

.NET Framework-Data Provider för ODBC förutsätter att metadatainformation är tillgänglig från en ODBC-drivrutin efter någon av SQLPrepare, SQLExecute eller SQLExecuteDirect-funktioner anropas. För att kommandobeteendet SchemaOnly ska fungera korrekt måste SQLPrepare returnera nödvändig metadatainformation. Alla ODBC-drivrutiner stöder inte den här funktionen eller returnerar metadatainformation. I dessa fall saknas en del av eller all information i SchemaTable. När du har anropat SQLPrepare anropar dataprovidern funktionen ODBC SQLColAttribute för att hitta metadatainformationen som är relaterad till varje kolumn i frågeresultatet (till exempel IsLong, IsUnique, AllowDBNull, BaseTableName och BaseColumnName). Om den underliggande drivrutinen inte returnerar en del av den här informationen anges inte motsvarande värden i SchemaTable korrekt.

.NET Framework-Data Provider för ODBC anropar också SQLPrimaryKeys för att hämta nyckelinformationen för varje tabell. Om den underliggande ODBC-drivrutinen inte stöder den här funktionen anropar dataleverantören SQLStatistics och väljer ett av de unika indexen som primärnyckel för tabellen. Detta kanske inte alltid ger de resultat du vill ha.

OdbcCommandBuilder behöver rätt identifiering av de primära nycklarna i tabellen för att fungera korrekt. Om BaseTableName inte returneras för varje kolumn i frågeresultatet försöker .NET Framework-Data Provider för ODBC parsa SQL-instruktionen för att hitta tabellnamnen som ingår i frågan. Detta fungerar med UPDATE-, INSERT-, DELETE- och enkla SELECT-instruktioner, men inte med lagrade procedurer eller SELECT-instruktioner baserade på kopplingar. Om en del eller all schemainformation saknas i den här tabellen OdbcCommandBuilder fungerar den inte korrekt eftersom den inte har tillräckligt med schemainformation för att automatiskt generera rätt INSERT-, UPDATE- eller DELETE-instruktioner.

För att se till att metadatakolumner returnerar rätt information måste du anropa ExecuteReader med beteendeparametern inställd på KeyInfo. Annars kan vissa kolumner i schematabellen returnera standarddata, null eller felaktiga data.

När du använder ODBC.NET till Oracle via ODBC-drivrutinen, identifieras inte aliaserade nyckelkolumner som nycklar. Detta påverkar kolumnerna IsKey och IsUnique i schematabellen för OdbcDataReader. Det påverkar också OdbcCommandBuilders möjlighet att generera uppdateringslogik. Överväg att inte använda ett alias för en primärnyckelkolumn.

Note

Den Microsoft Jet ODBC-drivrutinen returnerar alltid unika index- och primärnyckelkolumner som nullbara oavsett om de är nullbara eller inte. Drivrutinen returnerar inte heller primärnyckelinformation. den returnerar bara en lista över unika index och deras kolumner, inklusive primärnyckelkolumner, utan att skilja mellan dem.

Gäller för

Se även