次の方法で共有


OdbcDataReader.GetSchemaTable メソッド

メモ : この名前空間、クラス、およびメンバは、.NET Framework Version 1.1 だけでサポートされています。

OdbcDataReader の列メタデータを記述する DataTable を返します。

Public Overridable Function GetSchemaTable() As DataTable Implements _   IDataReader.GetSchemaTable
[C#]
public virtual DataTable GetSchemaTable();
[C++]
public: virtual DataTable* GetSchemaTable();
[JScript]
public function GetSchemaTable() : DataTable;

戻り値

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

実装

IDataReader.GetSchemaTable

例外

例外の種類 条件
InvalidOperationException OdbcDataReader が閉じています。

解説

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

DataReader 列 説明
ColumnName 列名。列名は一意でない場合もあります。列名が判断できない場合は、null 値が返されます。この名前は、現在のビュー内またはコマンド テキスト内の列に対して指定された最新の名前を常に反映しています。
ColumnOrdinal 列の序数。行のブックマーク列 (ある場合) は 0 になります。その他の列は、1 から順に番号が付けられます。この列には null 値を含めることはできません。
ColumnSize 列の値に許容される最大長。固定長データ型を使用する列では、そのデータ型のサイズになります。
NumericPrecision DbType が数値データ型の場合は、列の最大精度になります。精度は、列の定義によって決まります。 DbType が数値データ型以外の場合は、null 値になります。基になる ODBC ドライバが非数値データ型に対して精度の値を返した場合、この値はスキーマ テーブルで使用されます。
NumericScale DbTypeDecimal の場合は、小数点の右側の桁数。それ以外の場合は、null 値になります。基になる ODBC ドライバが非数値データ型に対して精度の値を返した場合、この値はスキーマ テーブルで使用されます。
DataType DbType の共通言語ランタイムの型に割り当てます。
ProviderType 基になるドライバの種類。
IsLong 長いデータが格納された BLOB (Binary Long Object) が列に格納されている場合は true 。非常に長いデータの定義は、ドライバによって異なります。
AllowDBNull コンシューマが列に null 値を設定できる場合、またはコンシューマが列に null 値を設定できるかどうかをドライバが判断できない場合は true 。それ以外の場合は false 。列を null 値に設定できない場合でも、null 値が含まれている可能性があります。
IsReadOnly 列を変更できない場合は true 。それ以外の場合は false
IsRowVersion 書き込み禁止で、行の識別以外に意味のない値を持つ永続的な行 ID が列に格納されている場合に、設定されます。
IsUnique true の場合は、この列では、ベース テーブル (BaseTableName で返されるテーブル) 内で行に重複する値を格納できないことを示します。列自体がキーを構成している場合や、その列だけに適用される UNIQUE 型の制約がある場合は、IsUnique は必ず true になります。 false: 列はベース テーブル内に重複する値を格納できます。この列の既定値は false です。
IsKey true の場合は、列が、行セット内の行を一意に識別するために組み合わされる、列のセットの 1 つであることを示します。IsKey が true に設定された列のセットは、行セット内の行を一意に識別する必要があります。この列のセットが列の最小セットである必要はありません。この列のセットは、ベース テーブルの主キー、UNIQUE 制約、または一意のインデックスから生成されることもあります。 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、または SQLExecuteDirectassumes 関数のいずれかが呼び出された後で、ODBC ドライバからのメタデータ情報を使用できることを前提としています。SchemaOnly コマンドが正しく動作するために、SQLPrepare は、必要なメタデータ情報を返す必要があります。すべての ODBC ドライバでこの関数が使用できるわけではなく、また、使用できる場合でもメタデータ情報が返されるとは限りません。このような場合、SchemaTable の一部またはすべての情報が欠落します。SQLPrepare を呼び出した後、データ プロバイダは ODBC の SQLColAttribute 関数を呼び出して、クエリ結果の各列に関連するメタデータ情報 (IsLong、IsUnique、AllowDBNull、BaseTableName、BaseColumnName など) を検索します。基になるドライバが完全な情報を返さない場合、SchemaTable 内の対応する値は正しく設定されません。

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

OdbcCommandBuilder が正しく動作するためには、テーブルの主キーの正しい ID が必要です。クエリ結果によって BaseTableName が返されない列がある場合、.NET Framework Data Provider for ODBC は、SQL ステートメントを解析して、そのクエリに関連するテーブル名を検索しようとします。この動作は、UPDATE、INSERT、DELETE、および単純な SELECT ステートメントでは行われますが、ストアド プロシージャや結合を使用した SELECT ステートメントでは行われません。このテーブルから一部またはすべてのスキーマ情報が欠落している場合は、正しい INSERT、UPDATE、または DELETE ステートメントを自動生成するために必要なスキーマ情報が足りないため、 OdbcCommandBuilder は正しく動作しません。

Note[note] メタデータの列が正しい情報を確実に返すようにするには、 behavior パラメータを KeyInfo に設定して ExecuteReader を呼び出す必要があります。それ以外の場合、スキーマ テーブルのいくつかの列は、既定のデータ、null、または正しくないデータを返します。

メモ   Microsoft Jet ODBC ドライバは、一意のインデックス列および主キー列を、null が許可されているかどうかに関係なく常に null が許可されている列として返します。また、このドライバは、主キー情報を返しません。主キーを含む一意のインデックスと、そのインデックスの列のリストだけを返します。主キー列は、他の列と区別されません。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

OdbcDataReader クラス | OdbcDataReader メンバ | System.Data.Odbc 名前空間