Partager via


OdbcDataReader.GetSchemaTable Méthode

Définition

Retourne un DataTable qui décrit les métadonnées de colonne de 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

Retours

DataTable qui décrit les métadonnées de colonne.

Implémente

Exceptions

Remarques

La GetSchemaTable méthode retourne des métadonnées sur chaque colonne dans l’ordre suivant :

Colonne DataReader Description
ColumnName Nom de la colonne ; cela peut ne pas être unique. Si le nom de colonne ne peut pas être déterminé, une valeur Null est retournée. Ce nom reflète toujours le nommage le plus récent de la colonne dans le texte de la vue ou de la commande actuelle.
ColumnOrdinal Numéro en base zéro de la colonne. Cette colonne ne peut pas contenir de valeur Null.
ColumnSize Longueur maximale possible pour une valeur de la colonne. Pour les colonnes qui utilisent un type de données de longueur fixe, il s’agit de la taille du type de données.
NumericPrecision Si DbType est un type de données numérique, il s’agit de la précision maximale de la colonne. La précision dépend de la définition de la colonne. Si DbType n’est pas un type de données numérique, n’utilisez pas les données de cette colonne. Si le pilote ODBC sous-jacent retourne une valeur de précision pour un type de données non numérique, cette valeur est utilisée dans la table de schéma.
NumericScale Si DbType a la valeur Decimal, nombre de chiffres à droite de la virgule décimale. Sinon, il s’agit d’une valeur Null. Si le pilote ODBC sous-jacent retourne une valeur de précision pour un type de données non numérique, cette valeur est utilisée dans la table de schéma.
DataType Mappe au type de Common Language Runtime de DbType.
ProviderType Type de pilote sous-jacent.
IsLong true si la colonne contient un objet BLOB (Binary Long Object) qui contient des données très longues. La définition des données très longues est spécifique au pilote.
AllowDBNull true si le consommateur peut définir la colonne sur une valeur Null ou si le pilote ne peut pas déterminer si le consommateur peut définir la colonne sur une valeur Null. Sinon, false. Une colonne peut contenir des valeurs Null, même si une valeur Null ne peut pas lui être affectée.
IsReadOnly true si la colonne ne peut pas être modifiée ; sinon false, .
IsRowVersion Défini si la colonne contient un identificateur de ligne persistant dans lequel il est impossible d'écrire et ne possède aucune valeur significative, excepté pour identifier la ligne.
IsUnique true: deux lignes de la table de base (la table retournée dans BaseTableName) ne peuvent pas avoir la même valeur dans cette colonne. IsUnique est garanti true si la colonne représente une clé par elle-même ou s’il existe une contrainte de type UNIQUE qui s’applique uniquement à cette colonne.

false: la colonne peut contenir des valeurs en double dans la table de base. La valeur par défaut de cette colonne est false.
IsKey true: la colonne fait partie d’un ensemble de colonnes dans l’ensemble de lignes qui, ensemble, identifient la ligne de manière unique. L’ensemble de colonnes avec IsKey défini sur true doit identifier de manière unique une ligne dans l’ensemble de lignes. Cet ensemble de colonnes ne doit pas obligatoirement être un ensemble minimal de colonnes. Cet ensemble de colonnes peut être généré à partir d’une clé primaire de table de base, d’une contrainte unique ou d’un index unique.

false: la colonne n’est pas nécessaire pour identifier la ligne de manière unique.
IsAutoIncrement true si la colonne affecte des valeurs aux nouvelles lignes par incréments fixes ; sinon false, . La valeur par défaut de cette colonne est false.
BaseSchemaName Nom du schéma dans la source de données qui contient la colonne. NULL si le nom du catalogue de base ne peut pas être déterminé. La valeur par défaut de cette colonne est une valeur Null.
BaseCatalogName Nom du catalogue dans le magasin de données qui contient la colonne. NULL si le nom du catalogue de base ne peut pas être déterminé. La valeur par défaut de cette colonne est une valeur Null.
BaseTableName Nom de la table ou de la vue dans le magasin de données qui contient la colonne. Valeur Null si le nom de la table de base ne peut pas être déterminé. La valeur par défaut de cette colonne est une valeur Null.
BaseColumnName Nom de la colonne dans le magasin de données. Il peut être différent du nom de colonne retourné dans la colonne ColumnName si un alias a été utilisé. Valeur Null si le nom de colonne de base ne peut pas être déterminé ou si la colonne d’ensemble de lignes est dérivée, mais non identique, d’une colonne dans le magasin de données. La valeur par défaut de cette colonne est une valeur Null.

Une ligne est retournée pour chaque colonne du jeu de résultats.

Le fournisseur de données .NET Framework pour ODBC suppose que les informations de métadonnées sont disponibles à partir d’un pilote ODBC après l’appel de l’une des fonctions SQLPrepare, SQLExecute ou SQLExecuteDirect . Pour que le comportement de la commande « SchemaOnly » fonctionne correctement, SQLPrepare doit retourner les informations de métadonnées requises. Tous les pilotes ODBC ne prennent pas en charge cette fonction ou ne retournent pas d’informations de métadonnées. Dans ce cas, une partie ou la totalité des informations contenues dans schemaTable sont manquantes. Après avoir appelé SQLPrepare, le fournisseur de données appelle la fonction ODBC SQLColAttribute pour rechercher les informations de métadonnées relatives à chaque colonne dans les résultats de la requête (par exemple, IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Si le pilote sous-jacent ne retourne pas certaines de ces informations, les valeurs correspondantes dans schemaTable ne sont pas définies correctement.

Le fournisseur de données .NET Framework pour ODBC appelle également SQLPrimaryKeys pour récupérer les informations de clé pour chaque table. Si le pilote ODBC sous-jacent ne prend pas en charge cette fonction, le fournisseur de données appelle SQLStatistics et choisit l’un des index uniques comme clé primaire pour la table. Cela peut ne pas toujours donner les résultats souhaités.

OdbcCommandBuilder a besoin de l’identification correcte des clés primaires de la table pour fonctionner correctement. Si baseTableName n’est pas retourné pour chaque colonne dans les résultats de la requête, le fournisseur de données .NET Framework pour ODBC tente d’analyser l’instruction SQL pour rechercher les noms de table impliqués dans la requête. Cela fonctionne avec les instructions UPDATE, INSERT, DELETE et SELECT simples, mais pas avec les procédures stockées ou les instructions SELECT basées sur des jointures. Si une partie ou la totalité des informations de schéma sont manquantes dans cette table, le OdbcCommandBuilder ne fonctionnera pas correctement, car il ne dispose pas d’informations de schéma suffisantes pour générer automatiquement les instructions INSERT, UPDATE ou DELETE correctes.

Pour vous assurer que les colonnes de métadonnées retournent les informations correctes, vous devez appeler ExecuteReader avec le paramètre de comportement défini sur KeyInfo. Sinon, certaines colonnes de la table de schéma peuvent retourner des données par défaut, null ou incorrectes.

Lorsque vous utilisez ODBC.NET à Oracle via le pilote ODBC, les colonnes de clés avec alias ne sont pas reconnues en tant que clés. Cela affecte les colonnes IsKey et IsUnique dans la table de schéma de OdbcDataReader. Cela affecte également la capacité d’OdbcCommandBuilder à générer une logique de mise à jour. N’utilisez pas d’alias pour une colonne de clé primaire.

Notes

Le pilote ODBC Microsoft Jet retourne toujours l’index unique et les colonnes de clé primaire comme nullables, qu’elles soient ou non nullables. Le pilote ne retourne pas non plus d’informations sur la clé primaire ; elle retourne uniquement une liste d’index uniques et de leurs colonnes, y compris les colonnes clés primaires, sans les différencier.

S’applique à

Voir aussi