OdbcDataReader.GetSchemaTable メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 では、SQLPrepare、SQLExecute、または 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 許容として返します。 ドライバーは主キー情報も返しません。一意のインデックスとその列 (主キー列を含む) の一覧のみが返され、それらの間で区別されます。
適用対象
こちらもご覧ください
.NET