OdbcDataReader.GetSchemaTable Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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
Är OdbcDataReader stängd.
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.