Condividi tramite


OdbcDataReader.GetSchemaTable Metodo

Definizione

Restituisce un oggetto DataTable che descrive i metadati della colonna di 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

Restituisce

Oggetto DataTable che descrive i metadati della colonna.

Implementazioni

Eccezioni

Commenti

Il GetSchemaTable metodo restituisce i metadati relativi a ogni colonna nell'ordine seguente:

Colonna DataReader Descrizione
ColumnName Nome della colonna; questo potrebbe non essere univoco. Se non è possibile determinare il nome della colonna, viene restituito un valore Null. Questo nome riflette sempre la denominazione più recente della colonna nella visualizzazione o nel testo del comando corrente.
ColumnOrdinal Ordinale in base zero della colonna. Questa colonna non può contenere un valore Null.
ColumnSize Lunghezza massima possibile di un valore nella colonna. Per le colonne che usano un tipo di dati a lunghezza fissa, si tratta delle dimensioni del tipo di dati.
NumericPrecision Se DbType è un tipo di dati numerico, si tratta della precisione massima della colonna. La precisione dipende dalla definizione della colonna. Se DbType non è un tipo di dati numerico, non utilizzare i dati in questa colonna. Se il driver ODBC sottostante restituisce un valore di precisione per un tipo di dati non numerico, questo valore viene utilizzato nella tabella dello schema.
NumericScale Se DbType è Decimal, il numero di cifre a destra del separatore decimale. In caso contrario, si tratta di un valore Null. Se il driver ODBC sottostante restituisce un valore di precisione per un tipo di dati non numerico, questo valore viene utilizzato nella tabella dello schema.
DataType Esegue il mapping al tipo Common Language Runtime di DbType.
ProviderType Tipo di driver sottostante.
IsLong true se la colonna contiene un BLOB (Binary Long Object) che contiene dati molto lunghi. La definizione di dati molto lunghi è specifica del driver.
AllowDBNull true se il consumer può impostare la colonna su un valore Null o se il driver non è in grado di determinare se il consumer può impostare la colonna su un valore Null. In caso contrario, false. Una colonna può contenere valori Null, anche se non può essere impostata su questo tipo di valore.
IsReadOnly true se la colonna non può essere modificata; in caso contrario false, .
IsRowVersion Impostato se nella colonna è contenuto un identificatore di riga persistente in cui non è possibile scrivere e se la colonna non dispone di valori significativi se non per effettuare l'identificazione della riga.
IsUnique true: due righe nella tabella di base (la tabella restituita in BaseTableName) possono avere lo stesso valore in questa colonna. IsUnique è garantito true se la colonna rappresenta una chiave da sola o se è presente un vincolo di tipo UNIQUE che si applica solo a questa colonna.

false: la colonna può contenere valori duplicati nella tabella di base. Il valore predefinito per questa colonna è false.
IsKey true: la colonna è una di un set di colonne nel set di righe che, insieme, identifica in modo univoco la riga. Il set di colonne con IsKey impostato su true deve identificare in modo univoco una riga nel set di righe. Non è necessario che questo set di colonne sia un set minimo di colonne. Questo set di colonne può essere generato da una chiave primaria della tabella di base, da un vincolo univoco o da un indice univoco.

false: la colonna non è necessaria per identificare in modo univoco la riga.
IsAutoIncrement true se la colonna assegna valori alle nuove righe in incrementi fissi; in caso contrario false, . Il valore predefinito per questa colonna è false.
BaseSchemaName Nome dello schema nell'origine dati che contiene la colonna. NULL se non è possibile determinare il nome del catalogo di base. Il valore predefinito per questa colonna è un valore Null.
BaseCatalogName Nome del catalogo nell'archivio dati contenente la colonna. NULL se non è possibile determinare il nome del catalogo di base. Il valore predefinito per questa colonna è un valore Null.
BaseTableName Nome della tabella o vista nell'archivio dati contenente la colonna. Valore Null se il nome della tabella di base non può essere determinato. Il valore predefinito di questa colonna è un valore Null.
BaseColumnName Nome della colonna nell'archivio dati. Potrebbe essere diverso dal nome della colonna restituito nella colonna ColumnName se è stato usato un alias. Valore Null se il nome della colonna di base non può essere determinato o se la colonna del set di righe è derivata, ma non identica a, una colonna nell'archivio dati. Il valore predefinito per questa colonna è un valore Null.

Viene restituita una riga per ogni colonna nel set di risultati.

Il provider di dati .NET Framework per ODBC presuppone che le informazioni sui metadati siano disponibili da un driver ODBC dopo la chiamata di una delle funzioni SQLPrepare, SQLExecute o SQLExecuteDirect . Per il corretto funzionamento del comportamento del comando "SchemaOnly", SQLPrepare deve restituire le informazioni necessarie sui metadati. Non tutti i driver ODBC supportano questa funzione o restituiscono informazioni sui metadati. In questi casi, parte o tutte le informazioni nella tabella SchemaTable non saranno presenti. Dopo aver chiamato SQLPrepare, il provider di dati chiama la funzione ODBC SQLColAttribute per trovare le informazioni sui metadati correlate a ogni colonna nei risultati della query, ad esempio IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName. Se il driver sottostante non restituisce alcune di queste informazioni, i valori corrispondenti nella tabella SchemaTable non verranno impostati correttamente.

Il provider di dati .NET Framework per ODBC chiama anche SQLPrimaryKeys per recuperare le informazioni chiave per ogni tabella. Se il driver ODBC sottostante non supporta questa funzione, il provider di dati chiama SQLStatistics e sceglie uno degli indici univoci come chiave primaria per la tabella. Questo potrebbe non dare sempre i risultati desiderati.

OdbcCommandBuilder richiede l'identificazione corretta delle chiavi primarie della tabella per funzionare correttamente. Se BaseTableName non viene restituito per ogni colonna nei risultati della query, il provider di dati .NET Framework per ODBC tenta di analizzare l'istruzione SQL per trovare i nomi di tabella coinvolti nella query. Questa operazione funziona con istruzioni UPDATE, INSERT, DELETE e SELECT semplici, ma non con stored procedure o istruzioni SELECT basate su join. Se alcune o tutte le informazioni sullo schema non sono presenti in questa tabella, l'oggetto OdbcCommandBuilder non funzionerà correttamente, perché contiene informazioni sullo schema insufficienti per generare automaticamente le istruzioni INSERT, UPDATE o DELETE corrette.

Per assicurarsi che le colonne di metadati restituiscono le informazioni corrette, è necessario chiamare ExecuteReader con il parametro di comportamento impostato su KeyInfo. In caso contrario, alcune colonne della tabella dello schema possono restituire dati predefiniti, Null o non corretti.

Quando si usa ODBC.NET a Oracle tramite il driver ODBC, le colonne chiave con alias non vengono riconosciute come chiavi. Ciò influisce sulle colonne IsKey e IsUnique nella tabella dello schema di OdbcDataReader. Influisce anche sulla capacità di OdbcCommandBuilder di generare la logica di aggiornamento. È consigliabile non usare un alias per una colonna di chiave primaria.

Nota

Il driver ODBC microsoft Jet restituisce sempre colonne di indice univoco e chiave primaria come nullable indipendentemente dal fatto che siano nullable o meno. Il driver inoltre non restituisce informazioni sulla chiave primaria; restituisce solo un elenco di indici univoci e le relative colonne, incluse le colonne chiave primaria, senza differenziarle.

Si applica a

Vedi anche