OdbcDataReader.GetSchemaTable メソッド

定義

DataTable の列メタデータを記述する 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

戻り値

列メタデータを記述する DataTable

実装

例外

OdbcDataReader が閉じています。

注釈

メソッドは GetSchemaTable 、各列に関するメタデータを次の順序で返します。

DataReader 列 [説明]
ColumnName 列の名前。これは一意ではない可能性があります。 列名を特定できない場合は、null 値が返されます。 この名前には、現在のビューまたはコマンド テキストの列の最新の名前が常に反映されます。
ColumnOrdinal 列の 0 から始まる序数。 この列に NULL 値を含めることはできません。
ColumnSize 列に格納できる値の最大の長さ。 固定長データ型を使用する列の場合、これはデータ型のサイズです。
NumericPrecision が数値データ型の場合 DbType 、これは列の最大有効桁数です。 有効桁数は、列の定義によって異なります。 が数値データ型でない場合 DbType は、この列のデータを使用しないでください。 基になる ODBC ドライバーが数値以外のデータ型の有効桁数の値を返す場合、この値はスキーマ テーブルで使用されます。
NumericScale が のDecimal場合DbType、小数点の右側の桁数。 それ以外の場合、これは null 値です。 基になる ODBC ドライバーが数値以外のデータ型の有効桁数の値を返す場合、この値はスキーマ テーブルで使用されます。
DataType の共通言語ランタイム型に DbTypeマップされます。
ProviderType 基になるドライバーの種類。
IsLong true 列に非常に長いデータを含むバイナリ長オブジェクト (BLOB) が含まれている場合は 。 非常に長いデータの定義は、ドライバー固有です。
AllowDBNull true コンシューマーが列を null 値に設定できる場合、またはコンシューマーが列を null 値に設定できるかどうかをドライバーが判断できない場合。 それ以外の場合は false。 列を NULL 値に設定できない場合でも、列に NULL 値が含まれる場合があります。
IsReadOnly true 列を変更できない場合は 。それ以外の場合 falseは 。
IsRowVersion 列に、書き込みを行うことができない永続的な行 ID が含まれ、行を識別する以外、有効な値がない場合に設定します。
IsUnique true: ベース テーブル (BaseTableName で返されるテーブル) 内の 2 つの行は、この列で同じ値を持つ必要はありません。 IsUnique は、列が単独でキーを表している場合、またはこの列にのみ適用される UNIQUE 型の制約がある場合に保証 true されます。

false: 列には、ベース テーブルに重複する値を含めることができます。 この列の既定値は です false
IsKey true: 列は、行セット内の一連の列の 1 つであり、一緒に行を一意に識別します。 IsKey が に設定されている列のセットは、 true 行セット内の行を一意に識別する必要があります。 この列のセットは列の最小セットである必要はありません。 この列のセットは、ベース テーブルの主キー、一意の制約、または一意のインデックスから生成できます。

false: 行を一意に識別するために列は必要ありません。
IsAutoIncrement true 列が固定の増分で新しい行に値を割り当てる場合。それ以外の場合 falseは 。 この列の既定値は です false
BaseSchemaName 列を含むデータ ソース内のスキーマの名前。 ベース カタログ名を特定できない場合は NULL。 この列の既定値は null 値です。
BaseCatalogName 列を含むデータ ストア内のカタログの名前です。 ベース カタログ名を特定できない場合は NULL。 この列の既定値は null 値です。
BaseTableName 列を含むデータ ストア内のテーブルまたはビューの名前です。 ベースのテーブル名が確認できない場合は、NULL 値です。 この列の既定値は null 値です。
BaseColumnName データ ストア内での列名。 別名が使用された場合、これは ColumnName 列に返される列名とは異なる場合があります。 ベース列名を特定できない場合、または行セット列がデータ ストア内の列から派生しているが、同一ではない場合は null 値。 この列の既定値は null 値です。

結果セット内のすべての列に対して行が返されます。

.NET Framework Data Provider for ODBC では、SQLPrepareSQLExecute、または SQLExecuteDirect 関数のいずれかが呼び出された後に、ODBC ドライバーからメタデータ情報を使用できるものとします。 "SchemaOnly" コマンドの動作が正しく機能するためには、 SQLPrepare は必要なメタデータ情報を返す必要があります。 すべての ODBC ドライバーがこの関数をサポートしたり、メタデータ情報を返したりするわけではありません。 このような場合、SchemaTable 内の情報の一部または全部が見つかりません。 SQLPrepare を呼び出した後、データ プロバイダーは ODBC SQLColAttribute 関数を呼び出して、クエリ結果の各列に関連するメタデータ情報 (IsLong、IsUnique、AllowDBNull、BaseTableName、BaseColumnName など) を検索します。 基になるドライバーがこの情報の一部を返さない場合、SchemaTable の対応する値は正しく設定されません。

.NET Framework Data Provider for ODBC では、SQLPrimaryKeys も呼び出して、すべてのテーブルのキー情報を取得します。 基になる ODBC ドライバーがこの関数をサポートしていない場合、データ プロバイダーは SQLStatistics を 呼び出し、テーブルの主キーとして一意のインデックスのいずれかを選択します。 これにより、必要な結果が得られない場合があります。

OdbcCommandBuilder 正しく動作するためには、テーブルの主キーを正しく識別する必要があります。 クエリ結果のすべての列に対して BaseTableName が返されない場合、.NET Framework Data Provider for ODBC は SQL ステートメントの解析を試み、クエリに関係するテーブル名を検索します。 これは UPDATE、INSERT、DELETE、および単純な SELECT ステートメントでは機能しますが、結合に基づくストアド プロシージャまたは SELECT ステートメントでは機能しません。 一部またはすべてのスキーマ情報がこのテーブルに存在しない場合、 には正しい INSERT、 OdbcCommandBuilder UPDATE、または DELETE ステートメントを自動的に生成するための十分なスキーマ情報がないため、正しく機能しません。

メタデータ列が正しい情報を返すようにするには、behavior パラメーターを KeyInfo に設定して を呼び出 ExecuteReader す必要があります。 それ以外の場合、スキーマ テーブル内の一部の列は、既定値、null、または正しくないデータを返す可能性があります。

ODBC ドライバーを使用して Oracle に ODBC.NET を使用する場合、エイリアス化されたキー列はキーとして認識されません。 これは、OdbcDataReader のスキーマ テーブルの IsKey 列と IsUnique 列に影響します。 また、更新ロジックを生成する OdbcCommandBuilder の機能にも影響します。 主キー列に別名を使用しないことを検討してください。

注意

Microsoft Jet ODBC ドライバーは、NULL 許容かどうかに関係なく、常に一意のインデックス列と主キー列を null 許容として返します。 ドライバーは主キー情報も返しません。一意のインデックスとその列 (主キー列を含む) の一覧のみが返され、それらの間で区別されます。

適用対象

こちらもご覧ください